資料量數以千萬計時,初次一次性抽取曆史資料容易出現卡死,針對這種情況可以使用循環年份抽取,并且加入增量程式使得後續抽取增量化!
整體流程:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iMllTZ2YGZ0cjY0UGZmJGMhRWNwkzNidDN3QTNhljZi9CXyITOwYTMwIzLcVGbjlGdyF2LcNHZh9GbwV3Lc12bj5CbzNnbx5ia0cXMldjd282Lc9CX6MHc0RHaiojIsJye.png)
1、擷取年份極值(擷取曆史有資料的年份最大最小值)
擷取日期:
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、檢測字段值(從最小年份開始循環抽取資料)
4、擷取目标表上次同步最大時間(設定目标庫上次同步完的最大時間)
上次同步最大月份:
5、檢驗異常預警情況統計(資料條件控制)
資料來源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;