Сохранение и загрузка конвейера etl из базы данных

Моя текущая задача - создать приложение rails, в котором пользователи могут создавать соединения из rdbms (для mysql, pg и т. Д.) И s3 (для csv и json).

Пользователь может добавить работу etl. Задание etl может иметь несколько конвейеров в будущем, но пока одно. Конвейер имеет источник, назначение и несколько преобразований.

В пользовательском интерфейсе пользователь перетаскивает источник и назначение, которое может быть rdbms (mysql, pg и т. Д.) Или файлом (csv/json), и формы конфигурации будут различаться в зависимости от типа (rdbms или s3 для файла)

После этого он может добавить преобразования.

Любые идеи или указатели на следующее

  • правильное сохранение и загрузка конфигураций источника, назначения и преобразования в базу данных.
  • запускать etl не из сценария etl, а из конвейера etl, хранящегося в базе данных

1 ответ

Решение

Это несколько сложный вариант использования, потому что у вас будет дополнительный уровень сложности по сравнению с разработчиками, использующими Kiba напрямую. Это может быть сделано, хотя!

Сначала я рекомендую создать в вашей базе данных Rails модели, которые будут описывать определения заданий, каждое из которых, источники и преобразования, которые вы хотите предоставить своим пользователям, таким образом, чтобы это работало для вас.

Вам придется надежно хранить учетные данные (DB, S3) (шифрование здесь более чем вероятно).

Затем, как только у вас появятся модели, вы создадите пользовательский интерфейс, который позволит пользователям редактировать модели.

После этого вы будете использовать Sidekiq-совместимый API Kiba, чтобы программно создавать задания на основе ваших записей. Вот псевдокод:

job_model = MyApp::Job.find(id)

kiba_job = Kiba.parse do
  job_model.sources.each do |s|
    source s.class_name, s.config
  end
  job_model.transforms.each do |t|
    transform t.class_name, t.config
  end
  job_model.destinations.each do |d|
    transform d.class_name, d.config
  end
end

Kiba.run(kiba_job)

Очевидно, что вам нужно быть очень осторожным, разрешив только ограниченный набор классов и конфигураций (внесите в белый список разрешенную настройку, не позволяйте пользователям вводить произвольно).

Вы также реализовали бы предопределенный набор источников, преобразований и назначений, которые вы хотите предложить своим пользователям.

Например, для реализации ваших компонентов S3 вы можете проверить этот вопрос SO.

Надеюсь это поможет!

Другие вопросы по тегам