Kettle批量操作流程使用(一)---单个数据源多表批量操作

    最近在工作上用到了kettle,目前这个开源的ETl工具相对来说比较火,用做数据抽取清洗工作很方便也很快捷。当然也还有不少的问题,比如使用过程中会发生闪退(测试了几个版本都存在),还有建好的Job和Transfer保存文件,然后再次打开的时候都是空白。抛开这些问题暂时不说,试用了一段时间以后,确实是解决了很多很大的问题。

    在使用kettle之前,自己生产了一个任务调度系统去完成ETl工作,不过使用起来还比较麻烦,对于批量的表,批量的数据源导入扩展性不是很好。而现在kettle的功能完全能满足我们目前的任务需求,同时kettle目前这么火没有理由不去接触kettle。

    我们的需求是这样,目前我们的业务系统在线上部署了1000多个独立用户节点,而这1000多个节点的数据表结构基本上都相同,因此我们想要在kettle完成的一个工作就是,编写一个流程完成1000多个用户节点,1000多张表的数据抽取。如果一个表维护一个任务,那总共要维护1000*1000个任务,如果一个用户节点维护一个任务,那总共要维护1000多个任务。而基于各个节点的业务表结构基本一样这个特点,我们想要的是只维护一个任务,完成1000多个用户节点和1000多个表的数据抽取。基于这个需求,我们分三个步骤完成了前期调研测试。在此将三个步骤测试过程和结果放在这里,期待高手能给出更好的解决思路和方法。本实验测试环境的源数据库:Postgres,目标数据库:Postgres(正式环境将采用GreenPlum)

   (1)单个数据源多表批量操作:每次只连接一个数据源,把表名作为变量,维护一个任务抽取一个用户节点的所有数据

   (2)多个数据源单标批量操作:动态链接多个数据源,每个数据源只对一个表做数据抽取

   (3)多个数据源多表批量操作:动态链接多个数据源,每个数据源所有表做数据抽取

下面是单个数据源多表批量操作:

 

1.1  新建获取表名Transfer

1) 新建Transfer所需的三个步骤分别是表输入、字段选择、复制记录到结果,并保存到文件:getTables.ktr如下图所示:

     

       

2) 设置表输入的参数,添加数据库链接,和从PG抽取表名的脚本,如下图

   

3) 将脚本中抽取的数据选择字段作为变量保存到下一个步骤,因为这里只有一个tablename,所以只要设置tablename就可以了,并且不用改名,如下图:

   

4) 将选择的字段保存到结果中,此步骤不用设置

5) 将上述操作按照步骤联结起来并保存,则完成当前Transfer设置

 

1.2  新建获取结果Transfer

1)新建Transfer,包含如下两个步骤,并保存为getResults,如图所示:

     

2)设置从结果获取记录的数据,将上一个transfer设置到结果的值取出来如下图所示:

3)设置变量,将上一步取出来的结果,设置到变量中,为后续的操作从变量中读取数据,这里讲读取出来的tablename设置为TABLENAME,如图所示:

4)将两个过程联结起来,并保存,完成当前的transfer设置,如下图所示

1.3  新建抽取数据Transfer

1) 新建一个transfer,包含数据表输入和表输出两个步骤,并命名为getDatas,如下图所示:

          

2) 添加表输入的数据库链接,如下图所示:

3) 设置源数据库数据获取脚本,因为这个步骤需要依赖上一个步骤设置的变量,因此这里的脚本的表名用${TABLENAME},即上一步设置的表名,并将替换SQL语句里的变量打钩。

4) 设置表输入的数据库链接信息

5) 设置表输入的其他属性信息,主要是设置目标模式和目标表,目标模式为public可省略,表是从前面传入的变量名设置为${TABLENAME},并勾选批量插入,如下图:

        

6) 将两个步骤联结起来并保存:

 

1.4  创建数据抽取子Job

1) 因为数据抽取的流程是需要获取第一个Transfer的表名,而第一个数据表名是一个列表,因此需要将数据抽取流程单独建立一个job,job包含如下三个步骤:

         

2) 设置第一个转换属性,将其关联到getResult转换即可,为了方便区分相应的改下名字:

 

3) 设置第二个转换属性,将其关联到getDatas转换即可

4) 将三个步骤联结起来,完成自job设置

1.5  创建数据抽取整个流程Job

1)  创建整体数据抽取的Job,该job包含三个部分,如下如所示:

2)  设置转换步骤的属性,将其关联到getTables

  

3)  设置子Job属性,将其关联到jobDatas,并在高级中将一次执行一个结果勾选,如下图:

4)  将各个步骤联结起来,完成整个job创建,如下图所示:

最后点击执行,即可全流程按照获取的表名一个表的数据获取。上传的东西不知道哪儿去了

 

 

 

 

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值