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进行循环操作的基本思路。