需求:
将中央库tms 的部分或者所有表数据定时分发到端库A B C D E 等库的表中。表中数据量较大【单表500百万以上数据】,因此需要进行增量同步。
解决方案:
为保证分发时端库数据的完整性,需要以端库需要同步的所有表为一个整体,同步完成后再进行下一个端库表数据的同步。
步骤如下:
一.获取所有要同步的库链接列表信息
二.获取某端库A中所有要进行分发的列表信息
三.分发时,获取库链接表中定义的库A更新时间d_time,与端库A中表1的update_time进行比较,删除表1中大于d_time时间的数据。获取中央库tms的表1中更新更新时间大于d_time的数据,同步到端库A的表1中
四.重复步骤三,同步所有端库A下所有要同步的表的数据。更新库链接表中定义的库A更新时间d_time为当前时间now().
五.重复步骤二 三 四直到所有端库数据均同步完成
示例:
一.表说明
// 要同步的端库链接信息表
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.最终分发执行任务
2.各终端库的数据分发子job
3.中央库到某终端的所有表数据分发job
4.根据表名将中央库数据同步到端
对应上文步骤三
5.中央库到某终端的所有表数据分发job中的设置变量
6.在每一个循环部分job的设置
三.所有配置完整附件
永久有效,请自提取
链接: https://pan.baidu.com/s/1cokT... 提取码: bi4u 复制这段内容后打开百度网盘手机App,操作更方便哦
kettle的git地址:
https://github.com/pentaho/pentaho-kettle
下载安装指导文章贴:https://www.jianshu.com/p/c76...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。