如何重新编码Kettle中的许多字段,所有字段都需要相同的重新编码

时间:2013-07-04 07:28:42

标签: pentaho kettle spoon

我有很多字段都需要相同的重新编码,是否有一个转换允许我指定需要相同映射的所有字段,而不是必须为每个字段创建一个Value Mapper转换?我正在使用Kettle Spoon 4.4

1 个答案:

答案 0 :(得分:3)

我不是Kettle上Java Scripting的忠实粉丝,但我不知道任何其他标准步骤可以达到你想要的效果。

您可以向流中添加“修改的Java脚本”步骤,并编写一个简单的代码来映​​射字段列(列)的值。要完成此操作,假设您的字段AB都有两个可能的值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;
    }
}

不要忘记在Java Script步骤中检查Compatibility mode?,否则一旦使用新标准,您将再次出现javascript错误,不允许更改字段值(请参阅如何在http://wiki.pentaho.com/display/EAI/Modified+Java+Script+Value

修改值(关闭兼容性)