在 Pentaho ETL Kettle 中,我想一步访问前一行。让我们将数据流声明为 myMat:
我的垫子:
col0 col1
row0: 15 a
row1: 10 b
row2: 24 hi
row3: 11 bye
我想使用这个计算:
newNumber= myMat[i][0] + myMat[i-1][0]
你知道在水壶里有什么方法吗?
Analytic Query
你也可以用step来做这种事情。不过,您需要在数据集中有一个分组字段。如果您想将整个集合作为一个组进行处理,请Add Constants
在插入的分析查询步骤之前放置一个步骤,例如一个 1,然后按此分组。
无论哪种方式,如果您想在计算中使用它,您将不得不处理 NULL。您的组的第一行的 LAG 1 将始终为 NULL。如果您只想将其映射到 0,您可以通过一个If field values is null
步骤来执行此操作。下面是它的样子:
但是,G 戈登是正确的。您应该根据您要解决的问题考虑这是否真的有意义。
您可以通过在您处理的每一行之间存储状态来在自定义 Java 或 JavaScript 步骤中执行此类操作。然而...
不保证流的顺序。此外,您可以同时并行处理多行。因此,正如您可以想象的那样,这种计算可能会出现问题。你想达到什么目的?几乎可以肯定有更好的方法。