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。
希望这个解释能有所帮助,希望我是正确的:)
为什么 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。
希望这个解释能有所帮助,希望我是正确的:)