我搜索了很多,我注意到大多数方法都是使用job或subjob来实现循环。
我认为这是废物系统来源吗?这是一个好方法吗?
我在程序员中编写代码并知道循环语法,如'while','for','foreach'和一些特定的迭代器,由于某种原因我需要使用pentaho kettle ETL工具来完成我的工作,我注意到了kettle提供了脚本工具--javascript让开发人员编写javascript代码或java代码。
我认为如果我们应该使用javascript步骤而不是job或subjob来实现循环功能?因为在大多数情况下我只需要迭代一个小数据流,还有其他方法可以简单地实现循环函数吗?
为什么Kettle没有实现像'iterator'这样的步骤?是否可以通过kettle developer API实现迭代器?
提前致谢。
答案 0 :(得分:0)
Pentaho Data Integration使用基于流的设计,这意味着您可以定义流经转换或作业的流中每条记录会发生什么。在大多数情况下,这已经取代了你的基本for / while循环,并带来了高度并行化的额外好处,因为转换中的所有步骤同时运行。
影响整个记录集(例如分组,排序,聚合)的操作只需一步支持,因此您再也不会真正看到循环,它是隐含的。
很少,您需要在Javascript步骤中使用循环来组合未知数量的字段,解析默认步骤阻塞的无效JSON / XML或使用其他动态结构。
作业和子作业用于控制流程和组件的可重用性。它们允许您指定在哪些条件下以哪种顺序运行哪些转换。 您可以在其中实现循环,但通常最好将数据分组并将其传递给子工作或批量转换。
我的经验是,如果您的第一个解决方案涉及循环,那么您还不能很好地理解基于流的选项。通常会绘制一个拆分所有案例的流程图,让您对Spoon中的转换情况有一个很好的了解。
如果你在一个你想要使用循环的地方的问题中添加一个例子,或许我可以展示如何在没有循环的情况下实现它。
我对this other question的回答是用于迭代构造JSON对象的Javascript步骤的示例。你会注意到它在没有编写任何循环语法的情况下完成了它的工作,因为JS步骤本身已经为通过它的每一行运行。