kettle通過日期循環方式作業


環境說明:

kettle:6.5

jdk: openjdk 1.8

os: windows 7

操作目標:

數據庫中需要按月份增量(增量默認1個月,可以修改為自定義N個月)抽取數據,即2018-01-01為開始時間,2029-12-31為結束時間,一個月一個月的通過sql抽取數據到對應表分區,分區字段為yyyy-MM-01。 也可以通過cli傳參傳入開始、結束時間任意抽取一段時間內數據。

實現思路:

通過傳入開始、結束時間並通過js對開始時間進行循環。

實現步驟:

總體結構:

 

job和參數定義:

 

初始化節點:

 

 

 js代碼內容:

var startTime = getVariable('startTime', null);
var endTime = getVariable('endTime', null);


//        yy / yyyy - 06 / 2006
//        MM / MMM / MMMMM - 11 / Nov / November
//        d / dd  - 1 / 01
//        E / EEEE - Tue / Tuesday
//        hh / HH - 11 / 23
//        m / mm - 5 / 05
//        s / ss - 8 / 08

startTime = startTime + " 00:00:00";
endTime = endTime + " 23:59:59"

setVariable("startTime", startTime, "r");
setVariable("endTime", endTime, "r");

var startTime1 = startTime;
var endTime1 = str2date(startTime, "yyyy-MM-dd HH:mm:ss");
endTime1 = dateAdd(endTime1,"m",1);
endTime1 = dateAdd(endTime1,"ss",-1);
endTime1 = date2str(endTime1, "yyyy-MM-dd HH:mm:ss");

setVariable("startTime1", startTime1, "r");
setVariable("endTime1", endTime1, "r");

 循環判定節點:

 

 

 

循環自增節點:

js節點代碼:

var startTime = getVariable('startTime', null);
var startDate = str2date(startTime, "yyyy-MM-dd HH:mm:ss");
startDate = dateAdd(startDate, "m", 1);
var startTime = date2str(startDate, "yyyy-MM-dd") + " 00:00:00"
setVariable("startTime", startTime, "r");

var startTime1 = startTime;
var endTime1 = str2date(startTime, "yyyy-MM-dd HH:mm:ss");
endTime1 = dateAdd(endTime1,"m",1);
endTime1 = dateAdd(endTime1,"ss",-1);
endTime1 = date2str(endTime1, "yyyy-MM-dd HH:mm:ss");

setVariable("startTime1", startTime1, "r");
setVariable("endTime1", endTime1, "r");

 日志節點:

 

 

 

作業節點:

 

通過把startTime1和endTime1傳入sql作為控制SQL查詢時間段的變量完成循環操作。

 

 

 

此為通過javascript進行循環操作的基本思路。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM