1

我有许多字段都需要相同的重新编码,是否有一种转换可以让我指定所有需要相同映射的字段,而不是必须为每个字段创建一个值映射器转换?我正在使用水壶勺 4.4

4

1 回答 1

3

我不是 Kettle 上的 Java Scripting 的忠实粉丝,但我不知道有任何其他标准步骤可以满足您的要求。

您可以将修改后的 Java 脚本步骤添加到流中并编写简单的代码来映​​射字段(列)列表的值。为了实现这一点,假设您有字段A,并且B两者都有两个可能S的小值和B大值。要映射它们,您应该插入以下 javascript 代码:

// list of fields you wish to map
var fieldsToMap = ["A", "B"];
var tmpField;
var fieldIndex;

// for each field to map...
for (var i=0; i < fieldsToMap.length; i++) {
    //get the index of the field once you only have it's name
    fieldIndex = getInputRowMeta().indexOfValue(fieldsToMap[i]);
    //get the field
    tmpField = row.getValue(fieldIndex);
    //don't forget to trim as Kettle usually pads strings
    switch (trim(tmpField)) {
        case "S": 
            tmpField.setValue("Small"); 
            break;
        case "B": 
            tmpField.setValue("Big"); 
            break;
    }
}

不要忘记检查Compatibility mode?Java Script 步骤,否则一旦使用新标准,您将遇到 javascript 错误,您不能再更改字段值(请参阅如何修改值(关闭兼容性) http : //wiki.pentaho.com/display/EAI/Modified+Java+Script+Value )

于 2013-07-05T14:00:51.730 回答