我有很多字段都需要相同的重新编码,是否有一个转换允许我指定需要相同映射的所有字段,而不是必须为每个字段创建一个Value Mapper转换?我正在使用Kettle Spoon 4.4
答案 0 :(得分: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;
}
}
不要忘记在Java Script步骤中检查Compatibility mode?
,否则一旦使用新标准,您将再次出现javascript错误,不允许更改字段值(请参阅如何在http://wiki.pentaho.com/display/EAI/Modified+Java+Script+Value)