Сохранение и загрузка конвейера 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.
Надеюсь это поможет!