1. 概述
1.1 版本
FineDataLink版本 | 功能说明 |
---|---|
- | - |
4.0.18 | 1)移除了「比对字段」 2)写入方式「直接将数据写入目标表」,更新为「追加写入数据」 |
4.0.28 |
|
4.0.29 |
|
4.1.9.1 | 写入方式「基于标识字段,追加/更新/删除数据」修改为「基于标识字段,新增/修改/删除数据」 |
1.2 功能简介
本文介绍「数据同步」设置写入方式或者使用「数据转换-DB表输出」设置写入方式时配置项说明。
「写入方式」界面如下图所示:
写入方式有三种:
注1:不同数据库支持的写入方式有部分限制,具体请参见:定时任务数据源功能限制说明
注2:4.1.3 及之后版本,目标表为 Hive、星环 TRANSWARP INCEPTOR 时,支持分区写入。详情请参见:读取、创建、写入分区表
写入方式 | 说明 | 效果示例 |
---|---|---|
直接将数据写入目标表 | 目标表无物理主键且未配置逻辑主键映射:直接将数据写入目标表 | 不同写入方式效果说明 |
目标表有物理主键或已配置逻辑主键映射:基于主键比对数据行的差异:主键相同、主键不同 1)主键不同的数据行:追加写入 2)主键相同的数据行,提供三种写入策略:
| ||
清空目标表,再写入数据 | 直接先把目标表清空掉,然后再写入数据;有无主键均可以选择 | |
基于标识字段,新增/修改/删除数据 | 1)目标表无物理主键:写入方式中勾选了「更新」或「删除」时,「主键映射」处不允许为空,需设置逻辑主键 2)目标表有物理主键或已配置逻辑主键映射,识别数据行的标识:相同、新增、修改、删除:
|
2. 直接将数据写入目标表
2.1 主键映射
建立「来源端-目标端」的数据行对应关系,设置步骤如下图所示:
1)目标表中若存在物理主键/自动建表配置了主键,将直接根据目标表物理主键,自动生成主键映射行以确定数据唯一性。
2)目标表中若无物理主键:
目标表是自动建表生成的:自动建表时,在「字段映射」处可以手动设定单个或多个字段为物理主键,「写入方式」Tab中,「主键映射」处自动显示已设置好的物理主键。
目标表是已存在表:「主键映射」处,支持选择字段作为逻辑主键映射以确定数据唯一性;若不设置逻辑主键,直接追加写入数据。
2.2 主键冲突策略
注:目标端为 Hive 时,不支持「主键冲突策略」。
满足以下任一条件,需要选择「主键冲突策略」:
目标表存在物理主键。
目标表不存在物理主键,但配置了逻辑主键。
主键冲突策略有三种:
主键相同,覆盖目标表的数据。
主键相同,忽略输入源的数据。
主键相同,记录为脏数据。
3. 清空目标表,再写入数据
直接先把目标表清空掉,然后再写入数据;有无主键均可以选择。
目标端为简道云时,不支持该写入方式。
4.0.29 以及之后的版本:
1)当来源表没有主键时,目标表存在主键,进行清表重写时,先清空目标表,再对目标表进行写入;
2)如果此时来源表存在两条主键相同的数据,后一条会覆盖前一条的记录;
4. 基于标识字段,新增/修改/删除数据
4.1 功能说明
注1:目标端为 Hive 时,不支持该写入方式。
注2:新增/更新/删除可勾选任意一个或多个。
标识字段/标识值:
1)通过标识字段和标识值筛选出需要新增/更新/删除的数据。
2)若使用「数据比对+DB表输出算子」实现数据,「DB表输出」算子中的标识字段则自动读取 fdl_comparison_type 作为标识字段,且自动读取标识字段的值作为标识值。
3)表输出只选择新增/更新/删除其中一个时,「标识字段」可不填,不填则对读取的所有数据进行新增或更新或删除。
主键映射:
详情请参考本文 2.1 节说明。
1)出现条件:写入方式中勾选了「更新」或「删除」。
2)写入方式中勾选了「更新」或「删除」时,「主键映射」处不允许为空。
4.2 最佳实践
1)通常数据比对+DB 表输出结合使用,详情参见:数据比对典型示例
2)单个数据同步节点使用场景:
用户希望将筛选出的数据,只做新增/更新/删除操作。
用户数据已经有了标识字段和标识值,需要对数据进行新增/更新/删除操作。
详情请参见:数据同步-基于标识字段,新增/更新/删除数据
5. 注意事项
比如来源表和目标表都有 D 列的部分数据为 NULL:
设置「写入方式」为追加写入且 A、B、C、D 都是逻辑主键,如下图所示:
运行后:若 D 列不为 NULL,若主键冲突则覆盖目标表数据;若 D 列为 NULL,若主键冲突则不会遵循覆盖逻辑,会追加写入。