您的位置:首页 > 其它

Kettle的循环遍历

2016-01-11 10:31 183 查看
在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的循环遍历的流程,由于本人只是初学者,文章中有部分都是自己的理解,如果有问题欢迎各位大神指出,促进自我的学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: