需求:
将中央库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='要同步的数据表信息 '

表中数据示例:
image.png

image.png

二.配置的任务示例
1.最终分发执行任务
image.png

2.各终端库的数据分发子job

image.png

3.中央库到某终端的所有表数据分发job

image.png

4.根据表名将中央库数据同步到端

对应上文步骤三

image.png

5.中央库到某终端的所有表数据分发job中的设置变量

image.png

6.在每一个循环部分job的设置

image.png
image (1).png

三.所有配置完整附件
永久有效,请自提取

链接: https://pan.baidu.com/s/1cokT... 提取码: bi4u 复制这段内容后打开百度网盘手机App,操作更方便哦

kettle的git地址:
https://github.com/pentaho/pentaho-kettle

下载安装指导文章贴:https://www.jianshu.com/p/c76...


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

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