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下载地址。
在使用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下载地址。
相关文章推荐
- Kettle批量操作流程使用(二)---多个数据源单表批量操作
- PowerDesigner中使用vbscript访问对象进行批量操作
- 企业所使用的最常见的销售操作流程(11i OM)
- 在Linux系统中,批量添加用户的操作流程
- 今天操作公司的数据库,出现单个用户使用的情况,解决方案如下
- Dojo 1.6 最新官方教程: 如何使用dojo.query 进行DOM查询和批量操作
- 使用ADO.NET下的SqlBulkCopy类执行批量复制操作
- 使用pssh进行并行批量操作
- linux svn 批量操作文件 及 各命令使用详解
- 使用JdbcTemplate进行批量操作
- java程序使用纯JDBC方式操作SQLServer2005数据库(无需配置数据源)
- 使用Spring实现多数据源操作
- Android 中使用ListView和CheckBox进行批量操作
- Vxworks 开发工具的使用操作流程
- sql server操作,使用insert进行批量数据操作
- 使用JDBC的CachedRowSet实现将数据源中的数据读取到内存中进行离线操作
- 使用BatchPreparedStatementSetter 完成批量插入数据的操作
- 在Linux系统中,批量添加用户的操作流程
- 不同的数据源,不同的数据操作流程——记录下最近的项目心得
- 使用jdk的executorservice+future来执行批量操作,节省处理时间