问题标签 [kiba-etl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
57 浏览

kiba-etl - 在 Kiba ETL 中调用相关管道是否有标准模式?

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

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

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

我可以创建一个管道,其中目标是“应用程序”并负责所有这些模型,这感觉像是错误的方法,因为目标将负责跨不同 Rails 模型保存数据、上传图像等。

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

谢谢。

0 投票
2 回答
74 浏览

ruby - 在 ETL 过程中使用 Kiba(或纯 Ruby)转置 CSV 行和列

第三方系统生成家长教师预约的 HTML 表格:

列数根据有多少教师进行预订而变化。行数根据我们创建的插槽数而变化。

最终结果需要是每个老师的哈希值,例如:

我认为将 ETL 处理为一行是最有意义的,所以这次我将 Numbers 中的行和列转置并将其保存为 CSV:

我试图让办公室工作人员使用的整个过程尽可能简单,所以是否可以在 Kiba(或纯 Ruby)中进行行和列的转置?在 Kiba 中,我假设我必须处理所有行,为每个老师累积一个哈希,然后在最后输出每个老师的哈希?

0 投票
1 回答
65 浏览

ruby - 如何构建需要进行多次 HTTP 调用的 Kiba 项目

我正在考虑在 kiba 中编写我们的 ETL(或类似 ETL)流程,我想知道如何构建它。我的主要问题是整体架构。该过程大致如下:

  1. 从 HTTP 端点获取数据。
  2. 对于从该 API 返回的每个项目,再进行一次 HTTP 调用
  3. 对从第 2 步返回的每个项目进行一些转换
  4. 将每个项目发送到其他地方

现在我的问题是:如果只有第一步是 asource并且直到最后的任何东西都是 a ,这可以transform吗?source或者以某种方式让每个 HTTP 调用成为 a然后以某种方式组合它们会更好,也许使用多个作业?

0 投票
1 回答
33 浏览

kiba-etl - kiba-etl 模式将转换拆分为独立的管道

Kiba 是一个非常小的库,据我了解,它的大部分价值来自于强制执行小型独立转换的模块化架构。

但是,在我看来,一系列串行转换的模型并不适合我们面临的大多数 ETL 问题。为了解释这个问题,让我举一个人为的例子:

源产生具有以下结构的哈希

我们首选的输出是哈希列表,其中一些键可能与源中的相同,尽管值可能不同

现在,计算结果支出需要一系列转换:ConvertCurrency, MultiplyByPeople等等等等。计算成本也是如此:ConvertCurrencyDifferently, MultiplyByOriginalSpend.. 请注意,成本计算取决于原始(未转换的)支出值。

最自然的模式是在两个独立的管道中计算支出和成本,然后合并最终输出。如果您愿意,可以使用 map-reduce 模式。我们甚至可以从并行运行管道中受益。

但是在我的情况下,这并不是性能问题(因为转换非常快)。问题在于,由于 Kiba 将所有转换作为一组连续步骤应用,成本计算将受到支出计算的影响,最终我们将得到错误的结果。

kiba 有办法解决这个问题吗?我唯一能想到的是确保目标名称与源名称不同,例如“originSpend”和“finalSpend”。然而,它仍然困扰着我,我的支出计算管道必须确保为每个步骤传递完整的密钥集,而不是仅仅传递与其相关的密钥,然后最后合并成本密钥。或者也许可以定义两个独立的 kiba 作业,并让一个主作业调用这两个并将它们的结果合并到最后?对此,最 kiba 惯用的解决方案是什么?

将 ETL 管道拆分为多个并行路径似乎是大多数 ETL 工具的一个关键特性,所以我很惊讶它似乎不是 kiba 支持的东西?

0 投票
1 回答
34 浏览

kiba-etl - 对 Kiba 作业中的行重新排序

我有一个 kiba 作业,它需要一个 CSV 文件(使用Kiba::Common::Sources::CSV),丰富其数据,合并一些行(使用此处ChainableAggregateDestination描述的目标)并将其保存到另一个 CSV 文件(使用)。Kiba::Common::Destinations::CSV

现在,我想对目标 CSV 中的行进行不同的排序(基于第一列)。我找不到一种方法来编写执行此操作的转换。我可以post_process用来重新打开目标 CSV,对其进行排序并重写它,但我想有一种更清洁的方法......

有人可以指出我正确的方向吗?