天天看點

Kettle循環抽取資料做增量

資料量數以千萬計時,初次一次性抽取曆史資料容易出現卡死,針對這種情況可以使用循環年份抽取,并且加入增量程式使得後續抽取增量化!

整體流程:

Kettle循環抽取資料做增量

1、擷取年份極值(擷取曆史有資料的年份最大最小值)

Kettle循環抽取資料做增量

擷取日期:

2、擷取時間範圍(通過切分獲得曆史年份最大最小值)

var prevRow=previous_result.getRows();
var listv=previous_result.getRows().toString().split("~");//切分為數組
if (prevRow == null && (prevRow.size()==))
{
false;
  
}else{
    parent_job.setVariable("startTime",listv[].substr(,));//最小年份
    parent_job.setVariable("endTime", listv[].substr(,));//最大年份 
    
	true;
}
           

3、檢測字段值(從最小年份開始循環抽取資料)

Kettle循環抽取資料做增量

4、擷取目标表上次同步最大時間(設定目标庫上次同步完的最大時間)

Kettle循環抽取資料做增量
Kettle循環抽取資料做增量

上次同步最大月份:

5、檢驗異常預警情況統計(資料條件控制)

Kettle循環抽取資料做增量
Kettle循環抽取資料做增量

資料來源veh_is_warning:

select sum() yjs
,t.jyrq tjrq,nvl(t.jcxdh,'NA') jcxdh,nvl(t.jyjgbh,'NA') jyjgbh,
nvl(t.glbm,'NA') glbm,nvl(t.fzjg,'NA') fzjg, 
nvl(t.yjlx,'NA') yjlx,
--t.hpzl,t.hphm,d.hphm,
nvl(d.cllx,'NA') cllx
from veh_is_warning t 
left join vehicle d on t.hphm=d.hphm
where t.yjzt=
and to_char(t.jyrq,'yyyy')='${startTime}'
and to_char(t.jyrq,'yyyymmdd')>='${P_MAXUPDATERQ}'
group by 
t.jyrq,t.jcxdh,t.jyjgbh,t.glbm,t.fzjg, 
t.yjlx,
--t.hpzl,t.hphm,d.hphm,
d.cllx
           

6、控制循環次數

var size = new Number(parent_job.getVariable("endTime"));
var i = new Number(parent_job.getVariable("startTime"))+;
  
if(i<=size){
	parent_job.setVariable("startTime", i);
}else
{
 parent_job.setVariable("startTime", );//控制退出
parent_job.setVariable("endTime", );//控制退出
}
 
true;
           

繼續閱讀