kettle分页迁移数据

介绍

基于kettle开发的ETL数据迁移功能,具有分页功能,理论可稳定迁移大表。 kettle做数据库数据迁移的时候,如果数据库中的表过大(几十G,甚至更大),为避免kettle 出现OOM,笔者画了一个分页、增量的数据迁移流程。不过存在限制:增量更新需要数据库有最近更新时间字段

个人网上也搜了好久,始终没有找到完美的流程。最后笔者结合网上不完整的,自行画出了这个流程。

个人开发环境

kettle7.0
mysql8.0

软件架构

该流程表面可能对一些人来说有点复杂:一共8个文件,其中2个Job,6个转换。2个job中1个主job,1个子job。
1、数据迁移.kjb 主job
Alt
2、抽取表子任务.kjb 子job
Alt
3、job结束时间.ktr 记录主job结束时间
Alt
4、创建目标库表结构.ktr 创建表
Alt
5、总页数与每页大小设置.ktr 分页设置
Alt
6、获取表名称.ktr 获取需要迁移的表名字
Alt
7、表名称变量设置.ktr 设置一些变量
Alt
8、表数据抽取.ktr 用于同步表数据
Alt

安装教程

1、直接把8个文件拖到kettle客户端中
2、demo数据源,demo数据库中有分页配置表、记录主job结束的时间
Alt
3、demo2数据源
Alt
4、开发时设置为共享数据源(共享后字体变粗)
Alt
5、注意:配置数据源demo,demo2(名字不要改,因为流程中有段java代码直接根据名获取数据源,具体自行查看流程)
6、数据表说明:
ff_table:需要下发的数据表
pagesize:每页大小
push: 记录任务结束时间。(下次启动任务会根据上次任务结束的时间,做增量更新)
Alt
7、注意:trans、job中 配置中有 替换变量、执行每个输入行之类的勾选,请留意

使用说明

1、返回主job界面,运行
Alt
2、日志
Alt
3、结果,由于ff_table中就配置三张表,故只迁移了3张表
Alt
就这样吧 有些trans可合并,自行优化

项目源码本人详见个人码云地址:
https://gitee.com/jsuny/kettle-etl

发布了2 篇原创文章 · 获赞 2 · 访问量 32

猜你喜欢

转载自blog.csdn.net/qq_31524719/article/details/104045224