从数据库保存和加载 etl 管道

Saving and loading etl pipeline from database

我当前的任务是制作一个 rails 应用程序,用户可以在其中从 rdbms(对于 mysql、pg 等)和 s3(对于 csv 和 json)创建连接。

用户可以添加 etl 作业。一个 etl 作业将来可以有多个管道,但现在只有一个。 管道具有源、目标和多个转换。

在 UI 上,用户将拖动源和目标,可以是 rdbms(mysql、pg 等)或文件(csv/json),并且配置形式会有所不同类型(文件为 rdbms 或 s3)

之后它可以添加转换。

关于以下内容的任何想法或指示

这是一个有点复杂的用例,因为与直接使用 Kiba 的开发人员相比,您会有额外的复杂性。不过,这是可以做到的!

我的建议是首先在您的 Rails 数据库中创建模型来描述作业的定义,其中每个源、转换和目标都希望以有效的方式向用户公开给你。

您必须安全地存储凭据(DB、S3)(此处很可能需要加密)。

然后,一旦您的模型就位,您将构建一个 UI 让用户编辑模型。

之后,您将使用 Sidekiq-compatible Kiba API 以根据您的记录以编程方式创建工作。这是一个伪代码:

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 组件,您可能需要查看

希望对您有所帮助!