访问Kettle中的上一行

时间:2013-06-28 07:23:47

标签: etl kettle

在Pentaho ETL Kettle中我想一步到达上一行。 让我们将数据流声明为myMat:

myMat:

      col0  col1
row0: 15    a
row1: 10    b
row2: 24    hi
row3: 11    bye

我想用这个计算:

newNumber= myMat[i][0] + myMat[i-1][0]

你知道在水壶里有什么办法吗?

2 个答案:

答案 0 :(得分:1)

您也可以使用Analytic Query步骤执行此类操作。但是,您需要在数据集中使用分组字段。如果要将整个集合作为一个组进行处理,请在分析查询步骤之前插入一个Add Constants步骤,例如只需一个1,然后按此组进行分组。

无论哪种方式,如果你想在计算中使用它,你将不得不处理NULL。组中第一行的LAG 1将始终为NULL。如果您只想将其映射到0,则可以使用If field values is null步骤进行映射。这可能是它的样子:

Sum of previous row

然而,G Gordon是对的。您应该根据您尝试解决的问题来考虑这是否真的有意义。

答案 1 :(得分:0)

通过在处理的每一行之间存储状态,您可以在自定义Java或JavaScript步骤中执行此类操作。然而...

无法保证流的顺序。此外,您可以同时并行处理多个行。所以,你可以想象,这种计算可能会有问题。你想要达到的目标是什么?几乎肯定有更好的方法。