kettle 插入更新 数据增量_使用Kettle实现数据实时增量同步

本文详细介绍了如何使用Kettle实现数据实时增量同步,特别是时间戳增量回滚同步方法,通过中间表记录时间戳,确保同步的完整性和一致性。文章包括前期准备、作业流程、数据抽取比对更新等步骤,以及遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

2018-09-28: 示例job已上传至github,地址见文末

0. 前言

本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法。关于ETL和Kettle的入门知识大家可以阅读相关的blog和文档学习。

1. 时间戳增量回滚同步

假定在源数据表中有一个字段会记录数据的新增或修改时间,可以通过它对数据在时间维度上进行排序。通过中间表记录每次更新的时间戳,在下一个同步周期时,通过这个时间戳同步该时间戳以后的增量数据。这是时间戳增量同步。

但是时间戳增量同步不能对源数据库中历史数据的删除操作进行同步,我们可以通过在每次同步时,把时间戳往前回滚一段时间,从而同步一定时间段内的删除操作。这就是时间戳增量回滚同步,这个名字是我自己给取得,意会即可,就是在时间戳增量同步的同时回滚一定的时间段。

说明:

源数据表 需要被同步的数据表

目标数据表 同步至的数据表

中间表 存储时间戳的表

2. 前期准备

在两个数据库中分别创建数据表,并通过脚本在源数据表中插入500万条数据,完成后再以每秒一条的速度插入新数据,模拟生产环境。

源数据表结构如下:

CREATE TABLE `im_message` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`sender` varchar(45) COLLATE utf8_bin NOT NULL COMMENT '消息发送者:SYSTEM',

`send_time` datetime(6) NOT NULL,

`receiver` varchar(45) COLLATE utf8_bin NOT NULL COMMENT '消息接受者',

`content` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '消息内容',

`is_read` tinyint(4) NOT NULL COMMENT '消息是否被读取:0-未读;非0-已读',

`read_time` datetime DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `id_UNIQUE` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='消息表'

3. 作业流程

开始组件

建时间戳中间表

获取中间表的时间戳,并设置为全局变量

删除目标表中时间戳及时间戳以后的数据

抽取两个数据表的时间戳及时间戳以后的数据进行比对,并根据比对结果进行删除、新增或修改操作

更新时间戳

4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值