通过JS控制Kettle循环抽取数据,最终结果:
重点讲JS部分:
步骤3-JavaScript设置初始循环值
//日志初始化部分
var subject="自定义日志输出";
//实例化工厂类
var logFactory = new org.pentaho.di.core.logging.LogChannelFactory();
//实例化日志channel对象
var log= logFactory.create(subject);
var prevRow=previous_result.getRows();//获取上一个传递的结果集
if (prevRow == null && (prevRow.size()=0))
{
false;
}else{
parent_job.setVariable("mdatas", prevRow);//ArrayList存储表名变量
parent_job.setVariable("size", prevRow.size());//存储执行表的总数量
parent_job.setVariable("i", 0);//循环控制变量
//注意,此处最好使用trim函数去掉空格
parent_job.setVariable("bdate", prevRow.get(0).getString("bdate","").trim());
log.logMinimal("XXXXXXXXXXXXXXXXXXXXXXXX-pre-bdate:"+prevRow);//日志输出
true;
}
步骤4-循环判断
步骤5-查询输出
步骤6-JS设置循环变量
var subject="自定义日志输出";
//实例化工厂类
var logFactory = new org.pentaho.di.core.logging.LogChannelFactory();
//实例化日志channel对象
var log= logFactory.create(subject);
//日志输出
var list_Tables =parent_job.getVariable("mdatas").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("bdate", list_Tables[i].toString().trim());
log.logMinimal("XXXXXXXXXXXXXXXXXXXXXXXX-bdate:"+list_Tables[i].toString()
+",size:"+parent_job.getVariable("size").trim());
//此处需使用trim函数去掉空格,以免导致无法查出数据
}
parent_job.setVariable("i",i);
log.logMinimal("XXXXXXXXXXXXXXXXXXXXXXXX-i:"+i);
true;