初次使用kettle

业务需求

  最近进行的项目所在的公司上有一套综合计划系统,数据库建立在Oracle上。需要定期的从综合计划系统取得相应的数据,转移到我们项目上的mysql数据里。具体的需求如下

  •  要求提供定时服务传送功能,默认每月定期传送一次,可修改
  •    从综合计划系统传送过来的数据,需要在数据填报系统中建立相应的数据库表,用于接收
  •    组织机构表传送过来后,建议在我方关系数据库中建立组织机构对应表,用于对方单位ID与我方单位ID关联
  •    数据插入关系数据库表原则:以数据所属单位、月度或季度作为唯一判断依据,如果存在,则数据直接覆盖,否则新增该数据

解决步骤

   因为大部分我们需要的表都带有后缀,表的后缀为当年的年份,如今年是2018年,那么后缀为”_2018”。所以我们需要一个变量来动态的标识当前的年份,拼接在我们所需要获取的表名上,得到需要的数据。

   首先创建一个转换用来设置变量

   
 

对获取系统信息进行设置

这样就可以得到一个nowTime的变量值,然后编辑javascript脚本,得到我们所需要的各个变量

脚本代码如下:

 1 //Script here
 2 
 3 Date.prototype.Format = function (fmt) {
 4     var o = {  
 5         "M+": this.getMonth() + 1, //月份   
 6         "d+": this.getDate(), //
 7         "h+": this.getHours(), //小时   
 8         "m+": this.getMinutes(), //
 9         "s+": this.getSeconds(), //
10         "q+": Math.floor((this.getMonth() + 3) / 3), //季度   
11         "S": this.getMilliseconds() //毫秒   
12     };  
13     if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));  
14     for (var k in o)  
15     if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));  
16     return fmt;  
17 }  
18 var nowDate = new Date(nowTime.getTime());  
19 var dtNew=nowDate.Format("yyyy");
20 var monthStr1 = new Date(nowDate.getTime()-30*24*60*60*1000).Format("yyyyMM");
21 var monthStr2 = new Date(nowDate.getTime()-30*24*60*60*1000*2).Format("yyyyMM");
22 var monthNum = nowDate.getMonth()+1;
23 var yearNum = nowDate.getFullYear();
24 var seasonNum = parseInt((monthNum-1)/3);
25 if(seasonNum==0){
26     yearNum = yearNum-1;
27     seasonNum =4;
28 }
29 var seasonNum2 = seasonNum -1;
30 var yearNum2 = yearNum;
31 if(seasonNum2 ==0){
32     yearNum2 = yearNum2-1;
33     seasonNum2 = 4;
34 }
35 
36 var seasonStr1 = yearNum + (3*seasonNum <10? "0"+3*seasonNum : ""+3*seasonNum);
37 var seasonStr2 = yearNum2 + (3*seasonNum2 <10? "0"+3*seasonNum2 : ""+3*seasonNum2);

设置完js脚本之后,可以对设置变量进行编辑

至此,变量设置的转换已经完成,下面可以进行数据获取的转换,以他们的部门表MLK_FLAG为例

创建一个基本的部门表信息的获取转换,考虑到后面的每次更新回同步上上个月或者上上个季度的数据,所以不能每次都进行插入操作,所以输出选择 插入/选择

创建完的转换如图所示

对表输入进行编辑,这里需要用到前面设置的变量,因为我们的表名和条件是需要动态变化的

其他条件或者变量的调用跟这个类似,就不一一赘述了

然后对 插入/更新进行编辑

至此,一个数据获取的转换完成,剩下的就是将变量设置和数据转换放到一个作业里

在对应的转换里选取对应的生成的转换即可。然后在start里设置循环的日期间隔,然后启动即可周期自动的从对应的表中获取数据。

其他的至于kettle的环境搭建,数据库的连接等基础知识网上的介绍较多,这里就不作说明了。

猜你喜欢

转载自www.cnblogs.com/lplshermie/p/9051473.html