1

需求:
需要将端库A B C D中的一部分表数据同步更新到中央库tms中,定时执行该同步任务,数据量500万+,需要进行增量同步
解决方式:
一.获取所有要同步的端库连接信息列表
二.获取单个表1上次同步的时间t_time,查询所有端库中更新时间update_time在t_time之后的数据,更新/插入中央库的表1中。所有端库的表1数据同步完之后,更新表1的更新时间t_time为中央库中表1的最新更新时间
三.重复步骤二,将要同步的表所有端库表数据同步到中央库

完整示例:
一.示例表信息

// 端库连接表信息
CREATE TABLE `t_kettle_jdbc` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `jdbc_name` varchar(128) DEFAULT NULL COMMENT '连接名称',
  `jdbc_host` varchar(128) DEFAULT NULL COMMENT '主机名',
  `jdbc_username` varchar(128) DEFAULT NULL COMMENT '用户名',
  `jdbc_password` varchar(128) DEFAULT NULL COMMENT '密码',
  `jdbc_database` varchar(128) DEFAULT NULL COMMENT '数据库名称',
  `jdbc_port` varchar(128) DEFAULT NULL COMMENT '端口',
  `database_update_time` datetime DEFAULT NULL COMMENT '中央库到端分发更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='要同步的数据库连接 '

//  要同步的表及同步时间信息表
CREATE TABLE `t_kettle_table` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `table_name` varchar(128) DEFAULT NULL COMMENT '要同步的表名称',
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='要同步的数据表信息 '

数据示例:
image.png

image.png

二.任务配置示例
1.所有库表同步整体job
image.png

2.某表数据抽取子job
image.png

3.某表数据抽取job
image.png

4.某表数据同步
两个数据流,合并记录,包括new changed deleted 此处就新增以及更新进行进行处理。删除无法通过增量合并的方式进行处理。此处删除只是更新is_deleted字段,作为更新处理。配置如下:
image.png
端库的表数据输入
image.png
端库的库链接参数获取
image.png
中央库的表数据输入
image.png
合并记录
image.png
switch/case设置
image.png
表数据插入/更新 【表字段需要对应】tms为中央库
image.png

5.更新时间戳
image.png

三.kettle配置多端库多表同步中央库示例文件
附件请自提取
链接: https://pan.baidu.com/s/1GWw1... 提取码: xmsf

kettle中央库向多端分发数据示例见:
https://segmentfault.com/a/11...


一片秋叶一树春
47 声望3 粉丝

贪君子之财,好美景之色,行正义之事,了前生之愿,爱此生之人!!!!!