1. 概述
数据同步-写入方式 文档中,介绍了三种写入方式:直接将数据写入目标表、清空目标表,再写入数据、基于标识字段,新增/修改/删除数据。
本文为您展示这三种写入方式的实际效果。
注:本文只是介绍三种写入方式的效果,实际数据更新场景中,应该选择的具体方案请参见:数据同步方案概述
2. 直接将数据写入目标表
2.1 目标表无物理主键且未配置逻辑主键映射
目标表无物理主键且未配置逻辑主键映射时,写入方式选择「直接将数据写入目标表」;该场景中,待写入数据不会影响目标表原有数据,只是将数据新增到目标表中。
2.1.1 场景模拟
待写入数据中,订单ID 为 10282 的数据与目标表订单ID 为 10282 的数据相同。
1)待写入数据如下图所示:
2)目标表数据如下图所示:
现希望将待写入数据增加到目标表中。
2.1.2 示例
1)新建定时任务,拖入「数据同步」节点,读取待写入数据。如下图所示:
2)数据去向与映射中,选择目标表。如下图所示:
3)写入方式选择直接将数据写入目标表(不设置主键映射)。如下图所示:
4)任务运行后,目标表数据如下图所示:
可看到待写入数据(红框内的数据)直接新增到目标表中;待写入数据中与目标表相同的数据(黄色标记的数据),也直接新增到目标表中。
2.2 目标表有物理主键或已配置逻辑主键映射
目标表有物理主键或已配置逻辑主键映射,将基于主键比对数据行的差异:
1)主键不同的数据行:将数据新增到目标表中。
2)主键相同的数据行,提供三种写入策略:
主键相同,覆盖目标表的数据(更新旧数据)
主键相同,忽略输入源的数据(忽略与目标表主键相同的新数据)
主键相同,记录为脏数据(将与目标表主键相同的新数据记为脏数据)
本节内容,适用于目标表数据需要更新的场景;可实现目标表数据的新增、更新。
2.2.1 场景模拟
1)待写入数据如下图所示:
2)目标表数据如下图所示:
2.2.2 示例
1)以「数据同步」节点为例,展示该场景的效果;「数据来源」与「数据去向与映射」Tab中,具体设置与 2.1.2 节相同,本节不再详细说明。
2)写入方式选择「直接将数据写入目标表」,主键映射处设置主键为「订单ID」,主键冲突策略选择「主键相同,覆盖目标表的数据」。如下图所示:
任务运行后,目标表数据如下图所示:
3)写入方式选择「直接将数据写入目标表」,主键映射处设置主键为「订单ID」,主键冲突策略选择「主键相同,忽略输入源的数据」。如下图所示:
任务运行后,目标表数据如下图所示:
4)写入方式选择「直接将数据写入目标表」,主键映射处设置主键为「订单ID」,主键冲突策略选择「主键相同,记录为脏数据」。如下图所示:
任务运行后,目标表数据如下图所示:
运行日志提示存在脏数据。如下图所示:
实际使用时,可设置「脏数据阈值」,使任务具备一定容错性。当任务运行时遇到脏数据,达到「脏数据阈值」前将继续执行定时任务,达到「脏数据阈值」后再报错。详情请参见:脏数据容忍
实际使用时,若希望看到详细的日志展示,可将日志级别设置为INFO,详情请参见:日志等级设置
3. 清空目标表,再写入数据
写入数据前,先清空目标表,再将数据写入。
注:该写入方式可能会造成目标表短暂不可用。
3.1 场景模拟
1)待写入数据如下图所示:
2)目标表数据如下图所示:
3.2 示例
1)以「数据同步」节点为例,展示该场景的效果;「数据来源」与「数据去向与映射」Tab中,具体设置与 2.1.2 节相同,本节不再详细说明。
2)写入方式选择「清空目标表,再写入数据」。如下图所示:
3)任务运行后,目标表数据如下图所示:
4. 基于标识字段,新增/修改/删除数据
该写入方式可实现数据的新增、修改、删除(这三种效果可单独实现也可组合实现)。
1)4.0.28 及之后版本,若用户为以下场景时(来源表和目标表都不是简道云数据):
没有标识字段,希望将筛选出的数据,做追加或者更新或者删除操作(无标识字段时仅允许选择一种操作类型)。
数据已经有了标识字段和标识值,需要对数据进行追加/更新/删除操作。
可通过「数据同步」节点实现,详情请参见:数据同步-基于标识字段,追加/更新/删除数据
2)该写入方式通常与 数据比对 算子配合使用,具体示例及效果请参见:数据比对典型示例