Kettle实现数据库的增量同步
kettle实现两个Mysql数据库的增量同步
Kettle实现数据库的增量同步
本操作基于kettle 9.1.0.0-324版本实现
业务背景
当前需要实现把生产环境数据库同步到测试环境中来,当生产环境新增数据时,uat会自动获取新增的数据(第一次为全量同步)
实现效果
实现步骤
1. 准备表数据
新建一个Excel文件,在其中加入以下内容
字段说明
字段 | 说明 |
---|---|
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输入
以及设置变量
2.1.2 在输入里面加入Excel输入
2.1.3 关联Get Data From Excel节点
双击Get Data From Excel
节点,然后选择刚才配置的Excel读取转换
2.2 配置Synchronize Data
节点内容
2.2.1 新建作业
文件——》新建——》作业
加入 Start、转换、转换、JavaScript、转换*2、SQL、成功
2.2.2 配置Get Variable Of Tables
文件——》新建——》转换
加入从结果获取记录、设置变量
2.2.3 关联配置的转换,步骤同2.1.3
2.2.4 配置Get Last Synchronize Date节点
文件——》新建——》转换
加入表输入、设置变量
增量同步记录数据库表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
2.2.7 同步全部
Full lnsertion节点
文件——》新建——》转换
加入表输入、表输出
2.2.8 同步新增部分
Incremental lnsertion节点
文件——》新建——》转换
加入表输入、表输出
2.2.9 同步增量记录表
Logging节点
脚本——》SQL
直接插入更新的数据即可
点击执行即可
更多推荐
所有评论(0)