2017-05-05 80 views
0

我搜索了很多,我注意到有大部分的方式是使用工作或subjob来实现循环。pentaho水壶有多少种类型的回路?

我认为这是一个废物系统的来源?这是一个好方法?

由于某些原因,我需要使用pentaho水壶ETL工具来完成我的工作,我在程序员中编写代码并知道循环语法,如'while','for','foreach'和某些特定的迭代器。通知水壶提供的脚本工具 - JavaScript让开发人员编写JavaScript代码或Java代码。

我想如果我们应该使用javascript步骤而不是job或subjob来实现循环功能?因为在大多数情况下我只需要迭代一个samll数据流,还有其他方法可以简单地实现循环函数吗?

为什么水壶没有实现像“迭代器”这样的一些步骤?是否有可能通过壶开发人员API实现迭代器?

在此先感谢。

回答

0

Pentaho数据集成使用基于流的设计,这意味着您可以定义流经过转换或作业的每个记录中发生的情况。在大多数情况下,这已经替代了您的基本for/while循环,并且还具有高度并行化的额外优势,因为转换中的所有步骤都同时运行。

影响整组记录(如分组,排序,聚合)的操作在单个步骤中受支持,因此您再也不会看到循环,这是隐含的。

很少,您需要在Javascript步骤中组合一个未知数量字段的循环,解析默认步骤阻塞或使用其他动态结构的无效JSON/XML。

作业和子作业用于组件的控制流和可重用性。他们让您指定在哪些条件下以哪种顺序运行哪些转换。 你可以在其中实现循环,但是最好是将数据分组,然后将其传递给批处理中的子作业或转换。

我的经验是,如果你的第一个解决方案涉及到一个循环,你还不够了解基于流的选项。通常绘制一张分解所有案例的流程图,可以让您对转型在Spoon中看起来像什么有一个公平的概念。

如果你添加一个例子到你想要使用循环的地方的问题上,也许我可以展示如何在没有循环的情况下实现它。

我对this other question的回答是一个用于迭代构建JSON对象的Javascript步骤的示例。你会注意到它在没有我编写任何循环语法的情况下完成了它的工作,因为JS步骤本身已经为通过它的每一行运行。