从Pentaho的JavaScript步骤的上一步读取数据

时间:2019-04-04 14:27:27

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

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

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

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

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)

有人可以帮我编写脚本吗?

3 个答案:

答案 0 :(得分:2)

您使问题复杂化了。

在回答之前,请记住一些内容,其中包含几个步骤以及这些步骤的组合,它们实现了令人难以置信的大量转换以形成可用的模式,这是最后一种手段是IS用户定义的Java表达式。

使用“值映射器”步骤。

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

enter image description here

答案 1 :(得分:1)

如果您要保留包含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 :(得分:0)

在上面的代码中,操作员分配错误。以下是我的JavaScript步骤中的工作脚本:

var new_rating = "Not assigned";
if (Rating == "Cold")
    {
    new_rating = "IBM";
    }
else if (Rating == "Warm")
    {
    new_rating = 'CTS';
    }
else if (Rating == "Hot")
    {
    new_rating = 'ATG';
    }