kettle 分页抽数

1】 分页

2】变量设置 == 全局/局部

3】查询总数据量,并设置变量

  SELECT
count(1) total_page
  FROM
dmlog_policy t
  WHERE  1=1 
      and t.trans_status in ('0','3') 
      and contractid between ${fromContractId} and ${toContractId}
  and riskCode = ${riskCode}
      -- 过滤掉大团单
      -- and not exists (select 1 from big_policy a where a.contractid= t.contractid)

4】js增加判断 == 是否继续/结束 false退出

var subject="自定义日志输出";
//实例化工厂类
var logFactory = new org.pentaho.di.core.logging.LogChannelFactory();
//实例化日志channel对象
var log= logFactory.create(subject);
//日志输出
log.logMinimal("-------------分页判断-------------------");



var currPage = parent_job.getVariable("curPage");// 从job获取当前页数值(当前第几页)
var page_size = parseInt(parent_job.getVariable("pageSige")); // 分页条数
var total_page = parent_job.getVariable("TOTAL_PAGE"); // 当前线程总数
var riskcode = parent_job.getVariable("riskCode"); // 当前迁移险种

log.logMinimal("-------------currPage:" + currPage + ",page_size:" + page_size + ",total_page:" +total_page+ ",riskcode:"+ riskcode+"-------------------");


if(total_page == null || total_page == undefined || total_page == ""){
	// 总数为空的时候,直接返回错误
    false;
}else{
    total_page = parseInt(total_page);
}
if(currPage == null || currPage == undefined || currPage == ""){ 
    // 当前页为空的时候,直接返回错误
    false;
}else{
	var nextCurrPage = parseInt(currPage)+1;
}


//超过100次循环会堆栈内存溢出,故限制在100次之内
if( (currPage*page_size) <  total_page && nextCurrPage<=100 ){
	parent_job.setVariable("curPage",(parseInt(currPage)+1));
    true;
}else{
	false;
}  

补充1】
条件:检验字段的值

参考文章:https://my.oschina.net/jgy/blog/908272

posted @ 2020-09-25 14:40  五字妹妹实在是棒  阅读(1217)  评论(0)    收藏  举报
返回顶部