问题标签 [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 回答
117 浏览

kiba-etl - 有没有办法逐行或分批写入 Kiba CSV 目标,而不是一次全部写入?

基巴真的很帅!

我正在尝试在我的 Rails 应用程序中设置一个 ETL 流程,我将在其中将大量数据从我的 SQL DB 转储到 CSV 文件中。如果我自己实现这一点,我会使用类似的东西find_each一次加载 1000 条记录并将它们分批写入文件。有没有办法使用 Kiba 做到这一点?根据我的理解,默认情况下,所有rows来自 Source 的信息都会传递到 Destination,这对我的情况来说是不可行的。

0 投票
1 回答
53 浏览

kiba-etl - 非专业版是否支持数据库处理?

我是 Ruby 新手,想做一个概念证明并与 Apache Camel 进行 ETL 项目比较。

不清楚与 Pro 版本在数据库支持方面的差异。那么,使用(非 Pro)Kiba 进行数据库处理可以做什么?

似乎所有文档代码片段都是文件示例......

0 投票
1 回答
183 浏览

ruby - 如何使用 Kiba-ETL 转换嵌套的 JSON 有效负载?

我想使用 Kiba-ETL 将嵌套的 JSON 有效负载转换为关系表。这是一个简化的伪 JSON 有效负载:

如何将此有效负载转换为两个表:

  • 预订
  • services(每项服务都属于一个预订)

Kiba::Common::Transforms::EnumerableExploder我在 wiki、blog 等的帮助下阅读了关于产生多行的信息 。

您会通过产生多行(预订和多项服务)来解决我的用例,还是会实施一个Destination接收整个预订并调用一些子目的地(即创建或更新服务)?

0 投票
2 回答
205 浏览

ruby-on-rails - 我应该使用 Rails 来保持一致性吗?(对于 ETL 项目)

语境

  • 我是 Ruby 和所有爵士乐的新手,但我对开发并不陌生。
  • 我正在接管一个基于 2 个用于 Web 和 API 的 rails/puma 存储库的项目。
  • 我正在使用Kiba为后端数据处理应用程序构建一个新的存储库,它将通过预定的作业运行。
  • 此外,稍后我将与其他开发人员一起加入,所以我想通过设计来制作一些可维护的东西。

我的问题:我应该在那个 ETL 项目上使用 Rails 吗?

使用它意味着我们可以应用与其他 repos 相同的文件夹结构,使用相同的 RSpec 等等。在我看来,Rails 改变了像 Hash 这样的类的行为方式。

同时,它似乎给将在 CLI 上运行并且可能仅包含十几个文件的项目带来了不必要的复杂性。

0 投票
1 回答
80 浏览

ruby - Is there an obvious way to reduce rows when using Kiba?

Firstly - Thibaut, thank you for Kiba. It goes toe-to-toe with 'enterprise' grade ETL tools and has never let me down.

I'm busy building an ETL pipeline that takes a numbers of rows, and reduces them down into a single summary row. I get the feeling that this should be a simple thing, but I'm a little stumped on how to approach this problem.

We have a number of CDR's from a voice switch, and need to condense them under some simple criteria into a a handful of summary records. So, the problem is; I have many thousands of records coming in from a Source, and need to transform them into only a few records based on some reduce criteria.

Kiba is really simple when there's a one-to-one Source -> Destination ETL, or even a one-to-many Source -> Destination with the new enumerable exploder in V3, but I don't see a clear path to many-to-one ETL pipelines.

Any suggestions or guidance would be greatly appreciated.

0 投票
1 回答
69 浏览

kiba-etl - 如何在 Kiba 中实现本地 DB + 外部 API 源

我正在尝试在Rails 应用程序的上下文中在Kiba中实现以下 ETL 作业:

  • 对于给定的本地数据库记录
  • 使用远程应用程序 API (Evernote)搜索其名称
  • 对于使用 API 找到的每条记录,获取此记录上使用的所有标签的 GUID,并将其合并到一个数组中
  • 使用相同的 API,检索所用标签的完整列表,以便从 GUID 中获取标签
  • 根据内部业务逻辑处理这些标签(保留、忽略、替换)
  • 将这些标签保存在本地数据库记录中

我的问题是:您将如何对本示例中的进行建模?

起点是本地数据库记录,但真正的数据来自对 API 的两次调用(1/ 搜索返回的记录和 2/ 完整标签列表)。

谢谢!

0 投票
1 回答
102 浏览

kiba-etl - 如何记录 ETL 作业的“当前状态”?

我在 Rails 后台作业中运行 Kiba ETL 管道。我想在作业运行时向用户提供一些状态。实现这一目标的最佳方法是什么?

我可以以某种方式使用一些变量吗?

或者我应该在每一步之后将状态更新保存在数据库中(一次在源中,每次转换一次,一次在目标中)?每次转换一次似乎需要大量额外的数据库写入,而且从转换与数据库对话似乎有点“脏”。

谢谢!

0 投票
1 回答
33 浏览

kiba-etl - 推荐使用 Kiba 实现“rescue-ensure”类功能的方法?

我们有一个 Kiba 管道,我们需要在作业结束后执行一些任务,无论是否有错误(整个管道不会失败,我们只是有几个验证错误或类似错误)。

这就是文档所说的:

:warning: 如果在它们之前发生错误,则不会调用后处理器。 https://github.com/thbar/kiba/wiki/Implementing-pre-and-post-processors

这是推荐的方法吗:

谢谢!

PS是什么意思:

如果在它们之前发生错误,则不会调用后处理器。

这是否意味着如果错误发生并且没有被救出?

0 投票
1 回答
49 浏览

kiba-etl - 如何过滤提取器中的数据?

我有一个长时间运行的管道,其中包含一些失败的项目(在流程结束时未加载的项目,因为它们未能通过数据库验证或类似的东西)。

我想重新运行管道,但只处理上次运行时导入失败的项目。

我有一个系统可以检查每个项目 ID(我从外部来源收到的)。我在我的装载机中执行此检查。如果我已经在数据库中拥有该项目 ID,我将跳过在数据库中加载/插入该项目。

这很好用。但是,它很慢,因为我对这些项目中的每一个都进行了提取转换加载,然后才在加载时查询数据库(每个项目一个查询)并比较项目 ID。

我想尽快过滤掉这些记录。如果我在变压器中做,我只能按项目再做一次。看起来提取器可能是这个地方,或者我可以将记录分批传递给转换器,然后过滤+分解(第一个)转换器中的项目。

这里有什么更好的方法?

我也在考虑我的提取器的可重用性,但我想我可以接受一个提取器既提取又过滤的事实。我认为最好的解决方案是能够链接多个提取器。然后我会有一个提取数据和另一个过滤数据。

编辑:也许我可以做这样的事情:

我想这可以工作吗?

0 投票
1 回答
113 浏览

ruby - 有没有办法在 Kiba 作业结束时返回一些数据?

如果有一种方法可以从 Kiba ETL 运行中获取某种返回对象,那就太好了,这样我就可以使用其中的数据来返回有关管道运行情况的报告。

我们有一个每 10 分钟运行一次的作业,平均处理 20 到 50k 条记录,并将它们压缩为摘要记录,其中一些是创建的,而一些是更新的。问题是,如果不翻阅大量的日志文件,就很难知道发生了什么,而且很明显,日志对最终用户也很有用。

当管道运行时,有没有办法用任意数据填充某种结果对象?例如

  • 在源代码中找到 25.7k 行
  • 该转换器丢弃了 782 条记录
  • 插入 100 条记录
  • 更新了 150 条记录
  • 20 条记录有错误(在这里)
  • 该记录具有最高的统计数据
  • 1200 条记录属于此 VIP 客户
  • 等等

最后,使用该数据发送电子邮件摘要、填充网页、呈现一些控制台输出等。

目前,我现在可以看到这个工作的唯一方法是在设置期间发送一个对象,并在它流经源、转换器和目的地时对其进行变异。运行完成后,之后检查变量并对现在存在的数据进行处理。

这是应该怎么做,还是有更好的方法?

编辑

只是想补充一点,我不想在post_process块中处理这个,因为管道通过许多不同的媒介使用,我希望每个用例都处理自己的反馈机制。对于 ETL 管道来说,它也更干净(imo),不必担心它在哪里使用,以及该使用场景的反馈期望是什么......