在ETL的工具Kettle中使用了循环遍历的一个案例,这个类似Java的for 循环遍历一样。

开发背景:数据库中存放的表数据table A和Table B,同时进行读取这些表的行数,或者读取通用的配置,这样才会使用Kettled的循环遍历功能。

在这里写一个测试的案例,主要实现的功能是遍历table a中的数据,在日志中输出。

整体流程如下:

kettle java里面循环替换 kettle循环执行转换_Kettle循环遍历


这是一个Kettle 的作业,第一个转换内容是查询的表数据,同时复制到记录上。

kettle java里面循环替换 kettle循环执行转换_数据_02


表输入中的语句为:`select * from hbp_record –hbp_record 代表的查询的表名。

值得注意的是:在这里只是为了测试循环遍历的整个流程,整个转换在使用时使用的应该是配置文件,通用的配置文件。

第二个 遍历获取功能是一个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);//循环控制变量
    /**
    TABLENAME 这里写死了,hbp_record 代表了需要查询的表,
    prevRow.get(0).getString("TABLES","")//这是通用版的
    */
    parent_job.setVariable("TABLENAME","HBP_RECORD");
    true;
}

第三步:检验字段的值

这个步骤代表类似Java中的for循环语句,进行循环遍历数据使用的,配置信息如下:

kettle java里面循环替换 kettle循环执行转换_数据库_03

第四步:转换2具体的步骤如下:

kettle java里面循环替换 kettle循环执行转换_kettle java里面循环替换_04

第五步:再次使用Javascript的脚步验证
主要功能是:进行数据的累加,遍历执行表的数据
代码如下:

var list_Tables =parent_job.getVariable("tables").replace("[","").replace("]","").split(",");
var size = new Number(parent_job.getVariable("size"));
var i = new Number(parent_job.getVariable("i"))+1;
if(i<size){
    parent_job.setVariable("TABLENAME", list_Tables[i]);
}
parent_job.setVariable("i",i);
true;

备注:

kettle java里面循环替换 kettle循环执行转换_数据_05


针对上图表,个人认为这是一个循环,相当于一下代码

for(int i=0;i<size;i++){
     遍历数据
}

这就是主要一个Kettle的循环遍历的流程,由于本人只是初学者,文章中有部分都是自己的理解,如果有问题欢迎各位大神指出,促进自我的学习