環境說明:
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進行循環操作的基本思路。