需求:
需要将端库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='要同步的数据表信息 '
数据示例:
二.任务配置示例
1.所有库表同步整体job
2.某表数据抽取子job
3.某表数据抽取job
4.某表数据同步
两个数据流,合并记录,包括new changed deleted 此处就新增以及更新进行进行处理。删除无法通过增量合并的方式进行处理。此处删除只是更新is_deleted字段,作为更新处理。配置如下:
端库的表数据输入
端库的库链接参数获取
中央库的表数据输入
合并记录
switch/case设置
表数据插入/更新 【表字段需要对应】tms为中央库
5.更新时间戳
三.kettle配置多端库多表同步中央库示例文件
附件请自提取
链接: https://pan.baidu.com/s/1GWw1... 提取码: xmsf
kettle中央库向多端分发数据示例见:
https://segmentfault.com/a/11...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。