Pentaho ETL : Modified Javascript Step "SKIP_TRANSFORMATION" transformation Constant work 逻辑

Pentaho ETL : Modified Javascript Step "SKIP_TRANSFORMATION" transformation Constant work logic

为什么 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;
}

提前致谢。

trans_Status=CONTINUE_TRANSFORMATION;

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

trans_Status=SKIP_TRANSFORMATION;

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

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

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

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

这里,字段是来自前面step/source的数据字段。取一些5-10个数据,只是为了POC。

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

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


您也可以阅读我的blog

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