【问题标题】:Read data from previous step in JavaScript step in Pentaho从 Pentaho 的 JavaScript 步骤中的上一步读取数据
【发布时间】:2019-04-04 14:27:26
【问题描述】:

我在 csv 文件中有一个名为 Account Rating 的列,我正在使用 Modified Java Script Value 步骤使用评级列创建一个新列。 我想关注新专栏:

Account Rating   New_Rating
---------------------------
Cold             ABC
Warm             DEF
Hot              XYZ

我在 Java Script 步骤中尝试了以下脚本:

var rating = getInputRowMeta().getString("Account Rating");
var new_rating = "Not assigned";

if (rating === 'Cold')
    new_rating = 'ABC';
else if (rating === 'Warm')
    new_rating = 'DEF';
else if (rating === 'Hot')
    new_rating = 'XYZ';

当我执行它时,我收到以下错误:

Can't find method org.pentaho.di.core.row.RowMeta.getString(string)

谁能帮我写剧本?

【问题讨论】:

    标签: javascript pentaho pentaho-spoon pentaho-data-integration


    【解决方案1】:

    如果你想保留Field Name包含SPACE并且不能用作JavaScript变量名,那么你可以修改你的原始代码,首先从RowMetaInterface 对象,然后从该索引中获取对应的值:

    var mapping = {
        'Cold' : 'ABC'
    ,   'Warm' : 'DEF'
    ,   'Hot' : 'XYZ' 
    };
    
    var idx = getInputRowMeta().indexOfValue("Accounting Rating");
    var rating = row[idx];
    var new_rating = mapping[rating] || 'Not assigned';
    

    更多信息:https://help.pentaho.com/Documentation/6.0/0R0/0V0/010/000/020/010

    【讨论】:

      【解决方案2】:

      你把问题复杂化了。

      在回答之前,记住一些事情,有几个步骤和步骤组合,可以实现数量惊人的转换以生成可用的模式,最后的手段是用户定义的 Java 表达式。

      使用“值映射器”步骤。

      在这里,我使用数据网格来生成冷热数据,并使用映射步骤。如果您的用例仅针对这 3 个单词,那么这应该适合,如果您需要更强大的功能,您可能需要更多步骤,甚至可能需要一个脚本,但是请记住...... Javscript 是最后的选择。

      【讨论】:

      • 感谢您的解释,我正在进行另一个复杂的转换,这只是我正在尝试的示例转换。这将使我了解Modified Java Script Value 步骤的工作原理。具有整数或数字的转换使用 JavaScript 按预期工作,但不是这个。
      • 整件事是什么?也许我可以帮忙。
      猜你喜欢
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多