您的位置:首页 > 其它

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

2018-02-11 15:22 274 查看
    最近在工作上用到了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创建,如下图所示:



最后点击执行,即可全流程按照获取的表名一个表的数据获取。上面的Job和Transfer下载地址。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ETL Kettle 批量操作