1. 概述
1.1 应用场景
本文适用于新增数据的场景,若数据被修改、删除,需参见文档:数据比对
更多数据同步方案请参见:数据同步方案概述
1.2 方案简介
在数据同步时,为了保证数据时效性,有时我们需要对数据定时进行增量更新,比如每天将新增的一部分数据(来源表)更新至目标数据表中。
数据的增量更新可以根据用户的实际数据情况分为三种:
场景 | 更新方式 |
---|---|
来源表有时间戳字段 | 定时同步(本文第二章) |
来源表没有时间戳字段,但是有唯一标识 | 定时同步(本文第三章) |
来源表没有时间戳字段,并且没有唯一标识 | 实时同步(本文第四章) |
本文示例可参见:https://demo.finedatalink.com/ 「数据增量同步更新」
2. 来源表有时间戳
若来源表有时间戳,可以使用「参数赋值」节点获取目标表时间戳最大值,再使用「数据同步」节点获取增量数据做增量更新。
2.1 示例说明
来源表为 demo_ods_huabeicaiwu ,目标表为 dw_caiwu ,都包含时间戳「订单生成时间」。如下图所示:
若目标表中「订单生成时间」的最大值,小于来源表的「订单生成时间」,说明来源表存在新增数据,需要将新增数据同步到目标表中。
2.2 获取目标表最晚时间
使用「参数赋值」节点,取出目标表中「订单生成时间」的最大值,将其设置为 time 参数。如下图所示:
select max(订单生成时间) from `demo2`.`dw_caiwu`
2.3 将新增的数据更新至目标表中
1)拖入一个「数据同步」节点,与「参数赋值」节点相连。
2)「数据同步」节点中,将来源表「订单生成时间」大于 time 参数的数据取出,同步到目标表中。如下图所示:
select * from `demo1`.`demo_ods_huabeicaiwu` where 订单生成时间 > '${time}'
3)由于同步的数据是新增数据,追加写入数据即可;逻辑主键可不设置,为空表示直接追加写入数据。如下图所示:
注:写入方式更多介绍请参见:数据同步-写入方式
4)可设置定时任务的执行频率,例如若希望每天将新增数据同步到目标表中,可设置一天执行一次。
点击右上角「调度计划」按钮,设置执行频率。如下图所示:
3. 来源表无时间戳但有唯一标识
适用场景:来源表有主键或逻辑主键,但是不能通过时间戳进行增量更新。
注:用户根据实际情况修改 SQL 语句。
3.1 示例说明
来源表为 jdy_order ,目标表为 order_mubiao 。
由于来源表中没有时间字段,或者时间字段不能作为更新标识,但有逻辑主键 orderid 字段。如下图所示:
增量同步方案说明:
使用「参数赋值」节点获取目标表内唯一标识 orderid。
再获取来源表中存在但是目标表中没有的 orderid (也就是需要同步至目标表的新增数据)对应的数据,将这部分数据使用「数据同步」节点同步至目标表,完成增量更新。
3.1 获取目标表中唯一标识字段
使用「参数赋值」节点,获取目标表 order_mubiao 内唯一标识 orderid,将其作为参数。如下图所示:
3.2 将新增数据更新至目标表
1)拖入一个「数据同步」节点,与「参数赋值」节点相连。
2)「数据同步」节点中,获取来源表中存在但是目标表中没有的 orderid (也就是需要同步至目标表的新增数据)对应的数据,将这部分数据使用「数据同步」节点同步至目标表,完成增量更新。如下图所示:
3)由于同步的数据是新增数据,追加写入数据即可;逻辑主键可不设置,为空表示直接追加写入数据。如下图所示:
注:写入方式更多介绍请参见:数据同步-写入方式
4)可设置定时任务的执行频率,例如若希望每天将新增数据同步到目标表中,可设置一天执行一次。
点击右上角「调度计划」按钮,设置执行频率。如下图所示: