历史版本6 :数据同步方案概述 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

在进行数据处理过程中,为了保证数据的时效性,数据更新就显得至关重要,只有数据有时效,才能被持续的应用在业务中。

本文根据用户的数据结构和更新需求,整理了一些在 FineDataLink 中常用的数据更新方式,方便用户更好的进行数据处理和维护。

本文示例可参见:https://demo.finedatalink.com/ 「02场景案例>更新专题」

2. 增量更新编辑

2.1 来源表有时间戳

若来源表有时间戳,可以使用参数赋值获取目标表时间戳最大值,再使用数据同步获取增量数据做增量更新。

例如数仓调度方案设置DW层任务中,需要将 FDLDemo 数据库中 demo_ods_huabeicaiwu 来源数据表新增的数据同步至 FRDemo 数据库的 dw_caiwu 目标数据表中。

由于来源数据表demo_ods_huabeicaiwu包含时间戳订单生成时间,因此可以判断 dw_caiwu 数据中最晚的订单生成时间是否晚于demo_ods_huabeicaiwu 数据表的订单时间,将满足条件的数据取出并通过数据同步同步至 dw_caiwu 目标数据表中。

使用参数赋值,取出dw_caiwu中最晚订单生成时间,并将其设置为 time 参数,如下图所示:

新建数据同步节点,将demo_ods_huabeicaiwu数据取出,并使用time参数,如果demo_ods_huabeicaiwu数据中「订单生成时间」晚于 dw_caiwu 数据中最晚订单时间,则将这部分新增的数据同步至 dw_caiwu 数据表中,如下图所示:

2.2 来源表无时间戳但有唯一标识

也就是来源表有主键或逻辑主键,但是不能通过时间戳进行增量更新。

例如需要将 FDLDemo 数据库中 jdy_order 来源数据表新增的数据同步至 FRDemo 数据库的 order_mubiao 目标数据表中。

由于 jdy_order 来源数据表时间字段不能作为更新标识,并且该数据表有主键 orderid 字段,因此使用使用参数赋值获取目标表 order_mubiao 内唯一标识 orderid ,再获取来源表中存在但是目标表中没有的 orderid (也就是需要同步至目标表的新增数据)对应的数据,将这部分数据使用数据同步,同步至目标数据库 order_mubiao ,完成增量更新。

来源表数据结构如下图:

使用参数赋值获取目标表 order_mubiao 内唯一标识 orderid,将其作为参数,如下图所示:

再获取来源表中存在但是目标表中没有的 orderid (也就是需要同步至目标表的新增数据)对应的数据,将这部分数据使用数据同步,同步至目标数据库 order_mubiao ,完成增量更新。

2.3 来源表没有时间戳和唯一标识

建议使用数据管道进行实时增量更新,详情参见:数据管道概述

3. 全量更新编辑

对于全量更新的数据,直接使用数据同步清空目标表数据,再写入数据,如下图所示:

4. 比对更新编辑

详细示例参见:简道云数据定时取数至数据库

4.1 来源表数据仅新增和修改

来源表数据仅新增或者修改,但是不会存在数据删除,此时推荐使用比对更新。

例如本文 2.2 节中的 jdy_order 来源数据表,可以根据主键 orderid,遇到有更新的数据( jdy_order中orderid 数据和 order_mubiao 中相同,但是数据内容不同时), jdy_order 中的数据会覆盖order_mubiao 目标数据表中的数据,实现更新jdy_order来源表中修改的数据,同时jdy_order来源表中新增的数据也会被同步至 order_mubiao 目标数据表中,如下图所示:

4.2 来源表数据存在新增、修改和删除

当来源数据表存在新增修改同时也会有删除的情况

  • 对于新增和修改的数据:使用数据同步,对通过主键字段对比更新,若字段数据相同则来源表最新数据覆盖目标数据库的数据;

  • 对于删除的数据,使用数据转换中的比对删除功能,比对并在目标数据表中标记在来源数据表中被删除的数据;

其中更新新增和修改的数据可以参考本文 4.1 节。

标记删除的数据则使用数据转换,例如想要对 jdy_order 来源表中删除的 orderid=10372 的数据在目标表 order_mubiao 中标记任务执行时间,如下图所示:

可以进入数据转换编辑界面,DB表输入中取出 jdy_order 来源表,然后使用比对删除,设置比对字段为唯一的主键 orderid,然后设置逻辑删除,即不会直接将数据从目标数据表删除,而是对数据进行标记,如果来源表中存在orderid,但是目标表中不存在,此时使用逻辑删除的方式,对于标识字段 deleteTime 标记为${deletetime},如下图所示:

这个${deletetime}我们使用参数设置,将其设置当天,也就是如果来源表中存在orderid,但是目标表中不存在,在定时更新的时候目标数据库中的deleteTime字段会写入当前更新时间作为删除标记,如下图所示: