kettle关于动态参数循环的方法


前言

kettle的转换本身是不支持循环处理的,需要结合作业功能和变量来实现循环传参。


图中工程,通过校验值的方法以达到循环的作用。

示例流程

  1. 初始化变量
    初始化变量的目的是为了后面更清晰地调用变量。


  1. 获取token
    通过一个转换,读取表或文件的方式获取参数,发起rest请求,来获取所有的token。


  1. 获取记录条数等信息
    获取上一个转换任务所返回出来的记录,通过JavaScript获取记录的一些元信息,并作为后面循环用的条件。
var prevRow=previous_result.getRows();//获取上一个传递的结果
if (prevRow == null &&(prevRow.size()=0))
{
    false;
}else{
    parent_job.setVariable("tables", prevRow);//ArrayList存储表名变量,以数组形式保存入table1,table2
    parent_job.setVariable("size", prevRow.size());//存储执行表的总数量
    parent_job.setVariable("i", 0);//循环控制变量
    parent_job.setVariable("token", prevRow.get(0).getString("token", ""));
    true;
}


  1. 检验变量是否满足条件
    检验变量是否满足条件,如果满足就循环,不满足就结束任务


  1. 获取当前list下的值并进入下一个处理
    通过JavaScript将当前i变量为下标指向的记录取出,并设置入变量,然后交给下一个任务组处理。
var prevRow=previous_result.getRows();
var size = new Number(parent_job.getVariable("size"));
var i = new Number(parent_job.getVariable("i"))+1;
if(i<size){
    parent_job.setVariable("token", prevRow.get(i).getString("token", ""));;
}
parent_job.setVariable("i",i);
true;


  1. 循环中继续处理

  2. 不满足条件后跳出循环
    当变量i被反复处理,不满足条件以后,就可以跳出循环了。


示例文件

  1. 百度网盘: 链接:https://pan.baidu.com/s/1cQiPw6SgBBsKq5dnqZNjDQ
    提取码:6666
  2. 本地下载:小屋下载区

参考资料

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - kettle关于动态参数循环的方法


欢迎来到我的小屋