编辑: 的 Kiba 2完全支持您的需求。看看 发行说明 强> 。
在目前发布的Kiba中,变换不能超过一行 - 它可以是1或0。
我正在构建的Kiba Pro产品包括一个多线程运行器(通过副作用而不是实际目标),允许转换产生任意数量的行,这正是您所关注的。
但是,如果没有Kiba Pro,这里有许多可以提供帮助的技术。
第一种可能性是将您的ETL脚本拆分为2.基本上,您可以在要对文章进行规范化的步骤中剪切它,并在此处放置目标。然后在第二个ETL脚本中,您将使用能够将行分解为多个的源。这是我认为在你的情况下我建议的。
如果这样做,您可以使用简单的Rake任务来调用ETL脚本作为序列,或者您也可以使用 post_process 如果你愿意,可以调用下一个(我更喜欢第一种方法,因为它可以更容易地运行一个或另一个)。
post_process
另一种方法(但对于当前场景来说过于复杂)将是声明相同的源N次,但仅产生给定的数据子集,例如:
pre_process do field_count = number_of_exploded_columns # extract from CSV? end (0..field_count).each do |shard| source MySource, shard: shard, shard_count: field_count end
在里面 MySource 你只会有条件地产生这样的结果:
MySource
yield row if row_index % field_count == shard
这就是我想到的两种模式!
我肯定会推荐第一个开始使用,更简单。