Kiba ETL 中是否有调用相关管道的标准模式?

Is there a standard pattern for invoking related pipelines in Kiba ETL?

我正在使用 Kiba 开发一个 ETL 管道,它可以导入我的 Rails 应用程序中的多个相关模型。例如,我有 records,其中有很多 images。可能还有 collections 包含许多 records.

我的数据来源多种多样,包括 HTTP APIs 和 CSV 文件。我想让管道尽可能模块化和可重用,所以对于每种新类型的源,我只需要创建源,其余的管道定义是相同的。

给定目标中的多个模型,并且可能有多个 API 调用以从源中获取数据,Kiba 中的标准模式是什么?

我可以创建一个目标为 'the application' 并负责所有这些模型的管道,这种 感觉 像错误的方法,因为目标将负责跨不同 Rails 模型保存数据、上传图像等

我是否应该创建一个主管道来触发更具体的管道,传递特定类型的数据(例如用于导入的图像 URL)?或者有比这更好的方法吗?

谢谢。

Kiba 作者在这里!

在数据管道中寻找某种形式的通用性、模块化和可重用性是自然而普遍的。不过,我想说的是,就像常规代码一样,一开始可能很难弄清楚什么是正确的方法(这在很大程度上取决于您的具体情况)。

这就是为什么我的建议是:

  • 从简单开始(针对一项特定工作)
  • 非常重要:确保实施 end-to-end 自动化测试(使用 webmock 或类似的方法来消除 API 请求并使测试完全隔离,从源创建包含 1 行的测试到目的地)-这将使以后重构内容变得容易
  • 一旦你有了那个(1 个带测试的管道),你就可以开始实施第二个,并重构以提取有趣的模式作为可重用位,并从那里迭代

根据您的具体情况,您可能会提取特定的组件,或者您可能最终会提取整个通用作业或通用作业系列等。

即使您获得更多使用 Kiba 的经验,这种方法也很有效(这也是我逐渐提取您将在 kiba-common and kiba-pro 中找到的组件的方式。