在ETL的工具Kettle中使用了循环遍历的一个案例,这个类似Java的for 循环遍历一样。
开发背景:数据库中存放的表数据table A和Table B,同时进行读取这些表的行数,或者读取通用的配置,这样才会使用Kettled的循环遍历功能。
在这里写一个测试的案例,主要实现的功能是遍历table a中的数据,在日志中输出。
整体流程如下:
这是一个Kettle 的作业,第一个转换内容是查询的表数据,同时复制到记录上。
表输入中的语句为:`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循环语句,进行循环遍历数据使用的,配置信息如下:
第四步:转换2具体的步骤如下:
第五步:再次使用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;
备注:
针对上图表,个人认为这是一个循环,相当于一下代码
for(int i=0;i<size;i++){
遍历数据
}
这就是主要一个Kettle的循环遍历的流程,由于本人只是初学者,文章中有部分都是自己的理解,如果有问题欢迎各位大神指出,促进自我的学习