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)多个数据源单标批量操作:动态链接多个数据源,每个数据源只对⼀个表做数据抽取
greenplum数据库(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转换即可,为了⽅便区分相应的改下名字:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论