使用kettle实现Mysql到oracle数据迁移-数据抽取
2020-03-14 本文已影响0人
小超人爱小土豆
业务背景:
简化叙述,需要将公有云上的多个mysql数据库,抽取到内网某oracle单库中。
具体实现过程
1.由于之前没怎么用过etl工具,但是通过查阅资料发现kettle简单易上手,所以就是用kettle作为此次抽取的etl tools,刚开始是想先实验一下,将云上的单个库中的单张表作为抽取对象抽取到oracle中。
(1)表输入中要定义步骤名,选择你连的mysql数据库(首次选择数据库连接,需要新建数据库连接),再在sql中写上你要导出的表字段。
表输入配置
数据库新建连接
(2)编辑表输出,选择或新建数据库连接(就是你本地的oracle数据库),选择对应的业务表。
表输出
如果mysql跟oracle上两张表个别字段不一致,还可以通过配置定义表字段的对应关系。
字段对应关系配置
当两边都配置好之后点击运行这个转换,bingo,数据就抽取下来了。
2.由于此次抽取的特点是多库多表数据量大,所以通过这种单一运行转换的方式效率极低,所以想通过循环执行的方式来代替这种单一抽取模式。前提需要说明,所有的目标表跟本地库中的表,字段大致相同,所以我采用模板方式。
其中的演化过程就不说了,说一下最后的结果。
批量数据抽取
启动和结束没有什么好说的,说一下最关键的两个转换:
获取同步表名_dm,这个转换主要是将我需要抽取的表信息都获取到(也就是oracle库中所有要抽取的表信息),主要是为了获取表名。
获取到了表名之后,通过循环表名,一个接一个的先执行清空oracle表数据,再执行抽取实际抽取操作。数据抽取_dm到判断标量这里使用了恒定执行,而不是绿色的成功执行,是因为在循环过程中,如果有抽取失败的话,会停止执行。清空操作前面加了写日志也是为了方便查看具体是那个表出现了报错。最后当循环结束之后,执行操作结束。
这是第一次写抽取的总结,还有很多不够完善的地方,但后续如果大家有什么不明白的可以找我,我会尽力帮助大家答疑。