Kettle实现数据库的增量同步
本操作基于kettle 9.1.0.0-324版本实现
业务背景
当前需要实现把生产环境数据库同步到测试环境中来,当生产环境新增数据时,uat会自动获取新增的数据(第一次为全量同步)
实现效果
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZghw6ga-1670925467599)(Kettle.assets/image-20221213164943527.png)]](https://i-blog.csdnimg.cn/blog_migrate/37eb47c329a3d4b0fdbefa235bea6c07.png)
实现步骤
1. 准备表数据
新建一个Excel文件,在其中加入以下内容
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lkeZBLgz-1670925467600)(Kettle.assets/image-20221213165712187.png)]](https://i-blog.csdnimg.cn/blog_migrate/5ec1054c4dfeb45587dc7725a3204050.png)
字段说明
| 字段 | 说明 |
|---|---|
| TAR_TB | 目标数据库标表(需要同步的数据库标) |
| SOURCE_TB | 数据源表(数据来源的表格) |
| PRIMARY_KEY | 当前表主键(可有可无) |
| SYN_TB_NAME | 同步数据表(用来保存数据库增量同步记录的表) |
| TIME_FLAG | 数据库必须包含的字段,也就是当前记录插入或者更新的时间 |
2. 新建作业
文件——》新建——》作业
分别加入Start、转换、作业、成功四个节点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3bBml3T-1670925467601)(Kettle.assets/image-20221213170805116.png)]
2.1 获取Excel表格中的数据
2.1.1 新建一个转换
文件——》新建——》转换
加入Excel输入以及设置变量
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L7UxfpnI-1670925467602)(Kettle.assets/image-20221213170850955.png)]](https://i-blog.csdnimg.cn/blog_migrate/ff4fc80d4a36ac7863d2dd2c8b93fb65.png)
2.1.2 在输入里面加入Excel输入
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxrXnctE-1670925467603)(Kettle.assets/image-20221213171034974.png)]](https://i-blog.csdnimg.cn/blog_migrate/70b334b830760652549236b4ff54dcfb.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7HhfhlGC-1670925467604)(Kettle.assets/image-20221213171215917.png)]](https://i-blog.csdnimg.cn/blog_migrate/a17fe55825869f27a1fd3a2429c6716c.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wxLMUFR0-1670925467605)(Kettle.assets/image-20221213171250308.png)]](https://i-blog.csdnimg.cn/blog_migrate/be5bc21796e5c74ea3b89cf9556d4d25.png)
2.1.3 关联Get Data From Excel节点
双击Get Data From Excel节点,然后选择刚才配置的Excel读取转换
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZHk25Ku-1670925467605)(Kettle.assets/image-20221213171554351.png)]](https://i-blog.csdnimg.cn/blog_migrate/93013a4de95608cea75343d5d29d0aee.png)
2.2 配置Synchronize Data节点内容
2.2.1 新建作业
文件——》新建——》作业
加入 Start、转换、转换、JavaScript、转换*2、SQL、成功
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpRNnaYC-1670925467606)(Kettle.assets/image-20221213172350883.png)]](https://i-blog.csdnimg.cn/blog_migrate/3d46993953af55aa4fe20c9c644e0bca.png)
2.2.2 配置Get Variable Of Tables
文件——》新建——》转换
加入从结果获取记录、设置变量
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQRq2aQL-1670925467608)(Kettle.assets/image-20221213173425321.png)]](https://i-blog.csdnimg.cn/blog_migrate/54f8c2d6f9987a90840b7e97b34f17a4.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBglh1h4-1670925467608)(Kettle.assets/image-20221213173550445.png)]](https://i-blog.csdnimg.cn/blog_migrate/2fb68d6013241ad7eba66f5bf2b191a0.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dKG4UmOw-1670925467609)(Kettle.assets/image-20221213173655894.png)]](https://i-blog.csdnimg.cn/blog_migrate/5a02f88ba922776fab14ff9d4291c122.png)
2.2.3 关联配置的转换,步骤同2.1.3
2.2.4 配置Get Last Synchronize Date节点
文件——》新建——》转换
加入表输入、设置变量
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FqGFV4C5-1670925467610)(Kettle.assets/image-20221213174007090.png)]](https://i-blog.csdnimg.cn/blog_migrate/5bede08d7ff00dc67fee3a6c9d79730e.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cnMhxLdD-1670925467610)(Kettle.assets/image-20221213174242574.png)]](https://i-blog.csdnimg.cn/blog_migrate/33ef2b38897e17ee4912deec97df2e20.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ZnM6AGV-1670925467610)(Kettle.assets/image-20221213174311647.png)]](https://i-blog.csdnimg.cn/blog_migrate/6822ccde035b0ed4921e77a4564760fd.png)
增量同步记录数据库表SQL
DROP TABLE IF EXISTS `dis_service_syn_records`;
CREATE TABLE `dis_service_syn_records` (
`id` bigint(100) NOT NULL AUTO_INCREMENT,
`syn_table_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '同步表名',
`last_syn_date` datetime NULL DEFAULT NULL COMMENT '上一次同步日期',
`error` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '错误日志记录',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自服务单据数据同步表' ROW_FORMAT = Dynamic;
2.2.5 关联配置的转换,步骤同2.1.3
2.2.6 判断之前是否有同步记录
Judge Full Or Incremental节点为一个JavaScript脚本(相关知识点可以自行了解),逻辑思路很简单,就是根据同步表名去查询增量同步记录表中是否含有相对应的记录,有的话就增量,没有的话就将数据全部同步即可
脚本——》JavaScript
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VIEzSYuh-1670925467611)(Kettle.assets/image-20221213174609558.png)]](https://i-blog.csdnimg.cn/blog_migrate/951e3fc5509cec40053d0855b1ccea60.png)
2.2.7 同步全部
Full lnsertion节点
文件——》新建——》转换
加入表输入、表输出
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLJfUrvV-1670925467611)(Kettle.assets/image-20221213175124744.png)]](https://i-blog.csdnimg.cn/blog_migrate/a7819da386c3c00c98719571566d7ec4.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WVsuf8cg-1670925467612)(Kettle.assets/image-20221213175224970.png)]](https://i-blog.csdnimg.cn/blog_migrate/f8303a76e99dd76c714019fd91cc5ef1.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-agjfjqMM-1670925467612)(Kettle.assets/image-20221213175310854.png)]](https://i-blog.csdnimg.cn/blog_migrate/847e7cf7f58afebe70ef668bd64b6f9c.png)
2.2.8 同步新增部分
Incremental lnsertion节点
文件——》新建——》转换
加入表输入、表输出
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SA7xUxnF-1670925467613)(Kettle.assets/image-20221213175355781.png)]](https://i-blog.csdnimg.cn/blog_migrate/0309a8a5809242418d66588892cc337b.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gGncSpWZ-1670925467613)(Kettle.assets/image-20221213175526354.png)]](https://i-blog.csdnimg.cn/blog_migrate/0c61f0e70d7b7b41e15a377c904fcf27.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iq1YcOrL-1670925467614)(Kettle.assets/image-20221213175310854.png)]](https://i-blog.csdnimg.cn/blog_migrate/c3753e7193350b88e906851924f99380.png)
2.2.9 同步增量记录表
Logging节点
脚本——》SQL
直接插入更新的数据即可
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ljUJZcZ3-1670925467614)(Kettle.assets/image-20221213175644087.png)]](https://i-blog.csdnimg.cn/blog_migrate/eeea48b93a91469e3cc5a4c0b357e0f0.png)
点击执行即可

本文介绍如何使用Kettle实现数据库的增量同步,包括全量同步和增量同步的配置过程。适用于需要将生产环境数据同步到测试环境的场景。
1856

被折叠的 条评论
为什么被折叠?



