【问题标题】:Pentaho ETL : Modified Javascript Step "SKIP_TRANSFORMATION" transformation Constant work logicPentaho ETL : Modified Javascript Step "SKIP_TRANSFORMATION" 转换常量工作逻辑
【发布时间】:2015-07-19 09:45:34
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: pentaho etl kettle spoon pdi


    【解决方案1】:
    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);
    

    这里,field 是来自上一步/源的数据字段。取大约 5-10 个数据,仅用于 POC。

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

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


    您也可以阅读我的blog

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

    【讨论】:

    • 我无法从解释中理解。正如你所说,让我做POC,然后再来。你在哪里找到这个解释?除了wiki link,您还有其他在线文档/帮助链接吗?
    • @Ganit 我也没有从 Pentaho wiki 找到太多信息。我的回答完全基于我上面解释的理解。我还在blog 中记录了它。希望它有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    相关资源
    最近更新 更多