问题标签 [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.
kiba-etl - 有没有办法逐行或分批写入 Kiba CSV 目标,而不是一次全部写入?
基巴真的很帅!
我正在尝试在我的 Rails 应用程序中设置一个 ETL 流程,我将在其中将大量数据从我的 SQL DB 转储到 CSV 文件中。如果我自己实现这一点,我会使用类似的东西find_each
一次加载 1000 条记录并将它们分批写入文件。有没有办法使用 Kiba 做到这一点?根据我的理解,默认情况下,所有rows
来自 Source 的信息都会传递到 Destination,这对我的情况来说是不可行的。
kiba-etl - 非专业版是否支持数据库处理?
我是 Ruby 新手,想做一个概念证明并与 Apache Camel 进行 ETL 项目比较。
不清楚与 Pro 版本在数据库支持方面的差异。那么,使用(非 Pro)Kiba 进行数据库处理可以做什么?
似乎所有文档代码片段都是文件示例......
ruby - 如何使用 Kiba-ETL 转换嵌套的 JSON 有效负载?
我想使用 Kiba-ETL 将嵌套的 JSON 有效负载转换为关系表。这是一个简化的伪 JSON 有效负载:
如何将此有效负载转换为两个表:
- 预订
- services(每项服务都属于一个预订)
Kiba::Common::Transforms::EnumerableExploder
我在 wiki、blog 等的帮助下阅读了关于产生多行的信息 。
您会通过产生多行(预订和多项服务)来解决我的用例,还是会实施一个Destination
接收整个预订并调用一些子目的地(即创建或更新服务)?
ruby-on-rails - 我应该使用 Rails 来保持一致性吗?(对于 ETL 项目)
语境
- 我是 Ruby 和所有爵士乐的新手,但我对开发并不陌生。
- 我正在接管一个基于 2 个用于 Web 和 API 的 rails/puma 存储库的项目。
- 我正在使用Kiba为后端数据处理应用程序构建一个新的存储库,它将通过预定的作业运行。
- 此外,稍后我将与其他开发人员一起加入,所以我想通过设计来制作一些可维护的东西。
我的问题:我应该在那个 ETL 项目上使用 Rails 吗?
使用它意味着我们可以应用与其他 repos 相同的文件夹结构,使用相同的 RSpec 等等。在我看来,Rails 改变了像 Hash 这样的类的行为方式。
同时,它似乎给将在 CLI 上运行并且可能仅包含十几个文件的项目带来了不必要的复杂性。
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.
kiba-etl - 如何在 Kiba 中实现本地 DB + 外部 API 源
我正在尝试在Rails 应用程序的上下文中在Kiba中实现以下 ETL 作业:
- 对于给定的本地数据库记录
- 使用远程应用程序 API (Evernote)搜索其名称
- 对于使用 API 找到的每条记录,获取此记录上使用的所有标签的 GUID,并将其合并到一个数组中
- 使用相同的 API,检索所用标签的完整列表,以便从 GUID 中获取标签
- 根据内部业务逻辑处理这些标签(保留、忽略、替换)
- 将这些标签保存在本地数据库记录中
我的问题是:您将如何对本示例中的源进行建模?
起点是本地数据库记录,但真正的数据来自对 API 的两次调用(1/ 搜索返回的记录和 2/ 完整标签列表)。
谢谢!
kiba-etl - 如何记录 ETL 作业的“当前状态”?
我在 Rails 后台作业中运行 Kiba ETL 管道。我想在作业运行时向用户提供一些状态。实现这一目标的最佳方法是什么?
我可以以某种方式使用一些变量吗?
或者我应该在每一步之后将状态更新保存在数据库中(一次在源中,每次转换一次,一次在目标中)?每次转换一次似乎需要大量额外的数据库写入,而且从转换与数据库对话似乎有点“脏”。
谢谢!
kiba-etl - 推荐使用 Kiba 实现“rescue-ensure”类功能的方法?
我们有一个 Kiba 管道,我们需要在作业结束后执行一些任务,无论是否有错误(整个管道不会失败,我们只是有几个验证错误或类似错误)。
这就是文档所说的:
:warning: 如果在它们之前发生错误,则不会调用后处理器。 https://github.com/thbar/kiba/wiki/Implementing-pre-and-post-processors
这是推荐的方法吗:
谢谢!
PS是什么意思:
如果在它们之前发生错误,则不会调用后处理器。
这是否意味着如果错误发生并且没有被救出?
kiba-etl - 如何过滤提取器中的数据?
我有一个长时间运行的管道,其中包含一些失败的项目(在流程结束时未加载的项目,因为它们未能通过数据库验证或类似的东西)。
我想重新运行管道,但只处理上次运行时导入失败的项目。
我有一个系统可以检查每个项目 ID(我从外部来源收到的)。我在我的装载机中执行此检查。如果我已经在数据库中拥有该项目 ID,我将跳过在数据库中加载/插入该项目。
这很好用。但是,它很慢,因为我对这些项目中的每一个都进行了提取转换加载,然后才在加载时查询数据库(每个项目一个查询)并比较项目 ID。
我想尽快过滤掉这些记录。如果我在变压器中做,我只能按项目再做一次。看起来提取器可能是这个地方,或者我可以将记录分批传递给转换器,然后过滤+分解(第一个)转换器中的项目。
这里有什么更好的方法?
我也在考虑我的提取器的可重用性,但我想我可以接受一个提取器既提取又过滤的事实。我认为最好的解决方案是能够链接多个提取器。然后我会有一个提取数据和另一个过滤数据。
编辑:也许我可以做这样的事情:
我想这可以工作吗?
ruby - 有没有办法在 Kiba 作业结束时返回一些数据?
如果有一种方法可以从 Kiba ETL 运行中获取某种返回对象,那就太好了,这样我就可以使用其中的数据来返回有关管道运行情况的报告。
我们有一个每 10 分钟运行一次的作业,平均处理 20 到 50k 条记录,并将它们压缩为摘要记录,其中一些是创建的,而一些是更新的。问题是,如果不翻阅大量的日志文件,就很难知道发生了什么,而且很明显,日志对最终用户也很有用。
当管道运行时,有没有办法用任意数据填充某种结果对象?例如
- 在源代码中找到 25.7k 行
- 该转换器丢弃了 782 条记录
- 插入 100 条记录
- 更新了 150 条记录
- 20 条记录有错误(在这里)
- 该记录具有最高的统计数据
- 1200 条记录属于此 VIP 客户
- 等等
最后,使用该数据发送电子邮件摘要、填充网页、呈现一些控制台输出等。
目前,我现在可以看到这个工作的唯一方法是在设置期间发送一个对象,并在它流经源、转换器和目的地时对其进行变异。运行完成后,之后检查变量并对现在存在的数据进行处理。
这是应该怎么做,还是有更好的方法?
编辑
只是想补充一点,我不想在post_process
块中处理这个,因为管道通过许多不同的媒介使用,我希望每个用例都处理自己的反馈机制。对于 ETL 管道来说,它也更干净(imo),不必担心它在哪里使用,以及该使用场景的反馈期望是什么......