在Pentaho中处理期间更改字段值/变量
给定输入:在Pentaho中处理期间更改字段值/变量,pentaho,kettle,Pentaho,Kettle,给定输入: PAYLOAD|ROWNUM|TYPE 1234 | 1|user aaa | 2|data bbb | 3|data ccc | 4|data 5678 | 5|user ddd | 6|data aaa | 7|data 结果应该如下所示: USER|DATA 1234|aaa 1234|bbb 1234|ccc 5678|ddd 5678|aaa 我已经尝试将这些值放入外部作业中定
PAYLOAD|ROWNUM|TYPE
1234 | 1|user
aaa | 2|data
bbb | 3|data
ccc | 4|data
5678 | 5|user
ddd | 6|data
aaa | 7|data
结果应该如下所示:
USER|DATA
1234|aaa
1234|bbb
1234|ccc
5678|ddd
5678|aaa
我已经尝试将这些值放入外部作业中定义的(全局)变量中,但没有效果。“用户”字段中的值将在文件中更改多次
我尝试的代码使用了一个MJSV步骤
var varNameUserId = "var.user_id";
if(TYPE == "user") {
setVariable(varNameUserId, PAYLOAD, "r");
}
var varNameUserId = "var.user_id";
var varUserId = getVariable(varNameUserId, "xxx");
var USER = varUserId;
在另一个MJSV步骤中
var varNameUserId = "var.user_id";
if(TYPE == "user") {
setVariable(varNameUserId, PAYLOAD, "r");
}
var varNameUserId = "var.user_id";
var varUserId = getVariable(varNameUserId, "xxx");
var USER = varUserId;
最后,“文本输出”步骤将所有内容写入文件
有任何提示/想法/建议吗?(使用Kettle 5.0.1进行测试)
我省略了行数,因为它与你的问题无关
不要忘记在转换设置中注册名为“currUser”的参数。
最后一步还将删除列类型
JS步骤代码:
if(TYPE == "data") {
USER = getVariable("currUser",0);
} else {
USER = PAYLOAD;
setVariable("currUser",PAYLOAD,"p");
}
JS步骤的设置:
if(TYPE == "data") {
USER = getVariable("currUser",0);
} else {
USER = PAYLOAD;
setVariable("currUser",PAYLOAD,"p");
}
- 字段名:用户
- 类型:字符串
- 替换值:Y
if(TYPE == "data") {
USER = getVariable("currUser",0);
} else {
USER = PAYLOAD;
setVariable("currUser",PAYLOAD,"p");
}
(使用水壶5.0.1进行测试)
我省略了行数,因为它与你的问题无关
不要忘记在转换设置中注册名为“currUser”的参数。
最后一步还将删除列类型
JS步骤代码:
if(TYPE == "data") {
USER = getVariable("currUser",0);
} else {
USER = PAYLOAD;
setVariable("currUser",PAYLOAD,"p");
}
JS步骤的设置:
if(TYPE == "data") {
USER = getVariable("currUser",0);
} else {
USER = PAYLOAD;
setVariable("currUser",PAYLOAD,"p");
}
- 字段名:用户
- 类型:字符串
- 替换值:Y
if(TYPE == "data") {
USER = getVariable("currUser",0);
} else {
USER = PAYLOAD;
setVariable("currUser",PAYLOAD,"p");
}
请添加您尝试过的代码。请添加您尝试过的代码。非常感谢您,阿菲尔“参数”完成了任务,您的解决方案比我的方法更优雅。非常感谢您,阿菲尔“参数”完成了任务,您的解决方案比我的方法更优雅。