Pentaho ETL:修改了Javascript步骤“SKIP_TRANSFORMATION”转换常量工作逻辑

时间:2015-07-19 09:45:35

标签: pentaho etl kettle spoon pdi

为什么SKIP_TRANSFORMATION仅在将CONTINUE_TRANSFORMATION分配给trans_Status时才有效?我无法在wiki link

中找到相关信息
//Not working (not getting skipped)
if (sequence_value%2==0){
    trans_Status = SKIP_TRANSFORMATION;
}
//Working (checked from an online example)
trans_Status = CONTINUE_TRANSFORMATION;
if (sequence_value%2==0){
    trans_Status = SKIP_TRANSFORMATION;
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

trans_Status=CONTINUE_TRANSFORMATION;

它的作用是,它读取所有传入的行并对其进行处理并将其移至下一步。它是默认的。

trans_Status=SKIP_TRANSFORMATION;

它从已处理的行中读取数据并拒绝它。

但是在过滤结果(如你的问题中)的情况下情况会有所不同。为了根据特定条件过滤或拒绝行,trans_Status应首先拥有所有已处理行的副本。一旦变量可用,基于条件的 SKIP_TRANSFORMATION 将拒绝/过滤条件。这基本上是问题中情景的原因。在你的情况下(不使用CONTINUE_TRANSFORMATION),trans_Status没有找到任何存储/处理过的变量来应用条件。

理解(我假设)的最佳方法是在JS步骤中使用以下片段:

if(field == "BB"){      //condition to filter the rows          
     trans_Status=SKIP_TRANSFORMATION;     //filter rows on condition
}
Alert(field);

此处,字段是来自上一步/来源的数据字段。拿一些5-10个数据,仅供POC使用。

一旦预览 JS脚本,您会发现最初会提醒所有源值(字段列)。但是一旦所有行都被预览或处理,那么SKIP_TRANSFORMATION将起作用并拒绝所有行,最终为您提供所有被拒绝的行。

因此,最后,如果您在JS中应用了任何条件,并且您想要使用这些CONSTANTS。您可能需要确保首先处理所有行并将其存储到trans_Status变量中(最好的方法是使用CONTINUE_TRANSFORMATION)然后放置所有条件。

你也可以在同一时间阅读我的blog

希望这个解释有所帮助,并希望我是正确的:)