kettle使用中常常需要针对某些条件进行循环控制,如下介绍使用循环的方法:
实现循环主要涉及循环变量初始化;判断条件;计数器的累加。本次举例从表中或者文本中读取每一行数据进行循环.
读取文本:读取某个表的数据进行循环(也可以读取某个文件进行循环):
--比如查询某个表某列值
SELECT 'aaa' as id from dual
union all
SELECT 'bbb' as id from dual
union all
SELECT 'ddd' as id from dual
初始化参数(JS脚本):获取前一个转换传递的值
var prevRow=previous_result.getRows();//获取上一个传递的结果,数据库中查询的结果集,或者文本结果集(结果集对象)
//prevRow.size() 表示结果集的的数量
if (prevRow == null &&(prevRow.size()=0))
{
false;
}else{
//初始化变量 tables,size,i 都是自定义变量名称。供后续使用
parent_job.setVariable("tables", prevRow);//ArrayList存储表名变量,以数组形式保存入
parent_job.setVariable("size", prevRow.size());//存储执行表的总数量
parent_job.setVariable("i",new Number(-1));//循环控制变量
true;
}
检验字段的值:循环控制器,用于判断是都继续循环的条件
计数累加器:
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("TABLE_NAME", prevRow.get(i).getString("id","id"));//根据字段名获取值,获取的值赋值给TABLE_NAME。
parent_job.setVariable("i",i);
true;
}else{
false;
}
实现逻辑:根据自己的需求在转换中实现自己的逻辑即可。