Kettle实现数据库的增量同步

本操作基于kettle 9.1.0.0-324版本实现

业务背景

当前需要实现把生产环境数据库同步到测试环境中来,当生产环境新增数据时,uat会自动获取新增的数据(第一次为全量同步)

实现效果

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据

实现步骤

1. 准备表数据

新建一个Excel文件,在其中加入以下内容

用kettle将mysql推送至kafka kettle同步数据库增加字段_ci_02

字段说明

字段

说明

TAR_TB

目标数据库标表(需要同步的数据库标)

SOURCE_TB

数据源表(数据来源的表格)

PRIMARY_KEY

当前表主键(可有可无)

SYN_TB_NAME

同步数据表(用来保存数据库增量同步记录的表)

TIME_FLAG

数据库必须包含的字段,也就是当前记录插入或者更新的时间

2. 新建作业

文件——》新建——》作业

分别加入Start、转换、作业、成功四个节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X3bBml3T-1670925467601)(Kettle.assets/image-20221213170805116.png)]

用kettle将mysql推送至kafka kettle同步数据库增加字段_ci_03

2.1 获取Excel表格中的数据

2.1.1 新建一个转换

文件——》新建——》转换

加入Excel输入以及设置变量

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_04

2.1.2 在输入里面加入Excel输入

用kettle将mysql推送至kafka kettle同步数据库增加字段_ci_05

用kettle将mysql推送至kafka kettle同步数据库增加字段_java_06

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_07

2.1.3 关联Get Data From Excel节点

双击Get Data From Excel节点,然后选择刚才配置的Excel读取转换

用kettle将mysql推送至kafka kettle同步数据库增加字段_ci_08

2.2 配置Synchronize Data节点内容

2.2.1 新建作业

文件——》新建——》作业

加入 Start、转换、转换、JavaScript、转换*2、SQL、成功

用kettle将mysql推送至kafka kettle同步数据库增加字段_java_09

2.2.2 配置Get Variable Of Tables

文件——》新建——》转换

加入从结果获取记录、设置变量

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_10

用kettle将mysql推送至kafka kettle同步数据库增加字段_java_11

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_12

2.2.3 关联配置的转换,步骤同2.1.3
2.2.4 配置Get Last Synchronize Date节点

文件——》新建——》转换

加入表输入、设置变量

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据库_13

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据库_14

用kettle将mysql推送至kafka kettle同步数据库增加字段_ci_15

增量同步记录数据库表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

用kettle将mysql推送至kafka kettle同步数据库增加字段_java_16

2.2.7 同步全部

Full lnsertion节点

文件——》新建——》转换

加入表输入、表输出

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_17

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_18

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_19

2.2.8 同步新增部分

Incremental lnsertion节点

文件——》新建——》转换

加入表输入、表输出

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据库_20

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据库_21

用kettle将mysql推送至kafka kettle同步数据库增加字段_数据_22

2.2.9 同步增量记录表

Logging节点

脚本——》SQL

直接插入更新的数据即可

用kettle将mysql推送至kafka kettle同步数据库增加字段_ci_23

点击执行即可