Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Pentaho中处理期间更改字段值/变量_Pentaho_Kettle - Fatal编程技术网

在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");
}

请添加您尝试过的代码。请添加您尝试过的代码。非常感谢您,阿菲尔“参数”完成了任务,您的解决方案比我的方法更优雅。非常感谢您,阿菲尔“参数”完成了任务,您的解决方案比我的方法更优雅。