背景:通过kettle循环遍历数据中的所有的表,并且对每张表执行转换
效果预览:
获取表名【转换】:
初始化循环条件【JavaScript脚本】:
// 获取上一个传递的结果
var prevRow=previous_result.getRows();
// 空值判断
if (prevRow == null || prevRow.size()==0)
{
false;
}else{
parent_job.setVariable("tablenames", prevRow); // ArrayList 存储表名变量,以数组形式保存入 tablenames
parent_job.setVariable("size", prevRow.size()); // 主要是用来确认循环的总次数
parent_job.setVariable("i", 0); // 初始化循环控制变量 i
// prevRow.get(0).getString("tablenames","") 表示获取 tablenames[0],并设置给变量 TABLENAME
parent_job.setVariable("TABLENAME",prevRow.get(0).getString("tablenames",""));
true;
}
判断循环是否结束【检验字段的值】:
判断表中是否有可操作数据【计算表中记录数】:
插入新旧ID到中间表【转换】:
更新循环条件【JavaScript脚本】:
// 获取 tablename,并转换成数组
var list_Tables =parent_job.getVariable("tablenames").replace("[","").replace("]","").split(",");
// 获取总的循环次数('获取表名'的结果集总数)
var size = new Number(parent_job.getVariable("size"));
// i++
var i = new Number(parent_job.getVariable("i"))+1;
// 判断循环是否结束,此处必须加对 i 的判断,因为最后一次循环会因 i 值会导致数组下标越界
if(i<size){
parent_job.setVariable("TABLENAME", list_Tables[i]);
}
// 更新i
parent_job.setVariable("i",i);
true;