2

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

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

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

之后,它可以添加转换。

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

  • 在数据库中正确保存和加载源、目标和转换配置。
  • 不是从 etl 脚本而是从存储在数据库中的 etl 管道运行 etl
4

1 回答 1

3

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

我的建议是首先在您的 Rails 数据库中创建模型,该模型将描述作业的定义,以及您希望以适合您的方式向用户公开的每个源、转换和目标。

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

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

之后,您将使用与Sidekiq 兼容的 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 组件,您可能需要查看这个 SO question

希望这可以帮助!

于 2018-01-17T14:44:21.510 回答