kettle循环取结果集进行处理方法一(使用js)

需求

循环取结果集中的一行,再根据单个结果进行处理
此处实例:从test库取id字段结果集,存储(id,2 x id)到set_value表中
此处使用js脚本
方法二(不使用js):https://blog.csdn.net/weixin_44135544/article/details/103522740

前提

test表:
kettle循环取结果集进行处理方法一(使用js)_第1张图片
set_value表:
kettle循环取结果集进行处理方法一(使用js)_第2张图片

具体步骤

第一步:
新建转换get_id_rows:
kettle循环取结果集进行处理方法一(使用js)_第3张图片
第二步:
新建作业:
kettle循环取结果集进行处理方法一(使用js)_第4张图片
按图所示连接各个组件
第一个js:

var prevRow=previous_result.getRows(); # 获取上一步的结果集
if (prevRow == null &&(prevRow.size()=0))
{
    false;

}else{
    parent_job.setVariable("size", prevRow.size()); # 结果集行数
    parent_job.setVariable("i",0); # 设置一个变量,用于循环结果集
    parent_job.setVariable("V_ID",prevRow.get(0).getString("id","")); # 根据变量名取结果集中的数据
    true;
}

检验字段的值 组件设置:
kettle循环取结果集进行处理方法一(使用js)_第5张图片
执行自己想要的转换或sql://此处仅仅将id和2倍的id存到set_value表中
kettle循环取结果集进行处理方法一(使用js)_第6张图片
第二个js:

var prevRow=previous_result.getRows();
var size = new Number(parent_job.getVariable("size")); # 总行数
var i = new Number(parent_job.getVariable("i"))+1; # 变量i加一
if(i<size){
parent_job.setVariable("V_ID",prevRow.get(i).getString("id","id")); # 设置结果集的下一行数据
}
parent_job.setVariable("i",i); # 将+1后的i再赋值给变量i
true;

又转到检验组件,判断是否循环完毕,没有继续循环,完毕结束。

测试:

运行结果:
kettle循环取结果集进行处理方法一(使用js)_第7张图片
查看set_value表:
kettle循环取结果集进行处理方法一(使用js)_第8张图片
实现所需功能。

你可能感兴趣的:(Kettle)