反馈已提交

网络繁忙

数据同步-写入方式

  • 文档创建者:Roxy
  • 历史版本:26
  • 最近更新:Wendy123456 于 2025-08-04
  • 1. 概述

    1.1 版本

    FineDataLink版本
    功能说明
    4.0.181)移除了「比对字段」

    2)写入方式「直接将数据写入目标表」,更新为「追加写入数据」

    4.0.28
    • 调整「写入方式」和「字段映射」的顺序

    • 写入方式优化,分为三种:直接将数据写入目标表清空目标表,再写入数据基于标识字段,追加/更新/删除数据

    4.0.29
    • 主键冲突策略中主键相同,停止写入并报错修改为主键相同,记录为脏数

    • 写入方式为「清空目标表,再写入数据」时逻辑优化

    4.1.9.1写入方式基于标识字段,追加/更新/删除数据修改为「基于标识字段,新增/修改/删除数据」
    4.2.7.4
    • 新增「事务控制」功能

    • 写入方式选择「清空目标表,再写入数据」时,新增清表方式和主键冲突策略

    • 写入方式选择直接将数据写入目标表」时,主键冲突策略名称更新

    1.2 功能简介

    本文介绍「数据同步」设置写入方式或者使用「数据转换-DB表输出」设置写入方式时配置项说明。

    1.2.1 写入方式

    「写入方式」界面如下图所示:

    16.png

    写入方式有三种:

    注:部分数据源支持分区写入。详情请参见:读取、创建、写入分区表

    写入方式
    说明效果示例
    直接将数据写入目标表目标表无物理主键且未配置逻辑主键映射:直接将数据写入目标表不同写入方式效果说明

    目标表有物理主键或已配置逻辑主键映射:基于主键比对数据行的差异:主键相同、主键不同

    1)主键不同的数据行:追加写入

    2)主键相同的数据行,提供三种写入策略:

    • 更新数据:主键相同时更新数据,新数据行覆盖旧数据行

    • 记为脏数据:主键相同时记为脏数据,冲突的数据行不写入

    • 忽略冲突:主键相同时忽略冲突,冲突的数据行不写入

    清空目标表,再写入数据

    1)提供两种清表方式

    • TRUNCATE:直接清空表数据,速度较快,无数据删除记录

    • DELETE:逐行删除表数据,速度一般,有数据删除记录

    2)支持配置主键冲突策略,避免锁表情况

    基于标识字段,新增/修改/删除数据

    1)目标表无物理主键:写入方式中勾选了「更新」或「删除」时,「主键映射」处不允许为空,需设置逻辑主键

    2)目标表有物理主键或已配置逻辑主键映射,识别数据行的标识:新增、修改、删除:

    • 新增的数据行:新增

    • 修改的数据行:更新

    • 删除的数据行:删除

    1.2.2 事务控制

    • 定时任务写入数据库时支持失败回滚,即任务执行失败后不会对目标表产生影响。

    • 定时任务写入数据库时支持前置处理和后置处理,并支持将这些处理逻辑与核心写入操作一起封装为事务,一同支持失败回滚。

    1750837674212638.png

    2. 写入方式说明

    2.1 直接将数据写入目标表

    1750839663142990.png

    2.1.1 主键映射

    建立「来源端-目标端」的数据行对应关系,设置步骤如下图所示:

    18.png

    1)目标表中若存在物理主键/自动建表配置了主键,将直接根据目标表物理主键,自动生成主键映射行以确定数据唯一性。

    2)目标表中若无物理主键:

    • 目标表是自动建表生成的:自动建表时,在「字段映射」处可以手动设定单个或多个字段为物理主键,写入方式Tab中,主键映射处自动显示已设置好的物理主键。

    • 目标表是已存在表:「主键映射」处,支持选择字段作为逻辑主键映射以确定数据唯一性;若不设置逻辑主键,直接追加写入数据。

    2.1.2 主键冲突策略

    注:目标端为 Hive 时,不支持「主键冲突策略」。

    1750839755346161.png

    满足以下任一条件,需要选择「主键冲突策略」:

    • 目标表存在物理主键。

    • 目标表不存在物理主键,但配置了逻辑主键。

    主键冲突策略有三种:

    • 更新数据:主键相同时更新数据,新数据行覆盖旧数据行。

    • 记为脏数据:主键相同时记为脏数据,冲突的数据行不写入。

    • 忽略冲突:主键相同时忽略冲突,冲突的数据行不写入。

    2.2 清空目标表,再写入数据

    目标端为简道云时,请参见:简道云输出算子

    2.2.1 4.2.7.4 之前版本

    1750840016973398.png

    直接先把目标表清空掉,然后再写入数据;有无主键均可以选择。

    4.0.29 以及之后的版本:

    1)当来源表没有主键时,目标表存在主键,进行清表重写时,先清空目标表,再对目标表进行写入;

    2)如果此时来源表存在两条主键相同的数据,后一条会覆盖前一条的记录;

    2.2.2 4.2.7.4 及之后版本

    1750839875769778.png

    设置项
    说明
    清表方式提供两种清表方式

    1)TRUNCATE:

    • 优势:直接清空表数据,速度较快

    • 劣势:无法使用事务控制功能,详情请参见本文第三章内容;清表时,若有其他系统读写或者占用这张表,会导致数据库锁表

    2)DELETE:

    • 劣势:逐行删除表数据,速度一般

    • 优势:支持使用事务控制功能,详情请参见本文第三章内容

    • 应用场景:清表全写时,期望减少目标库数据的空档期,以及避免清表全写时,清表成功,写数失败

    主键映射
    • 当目标表存在物理主键时,则从配置的字段映射中,自动选择物理主键映射键入,且不可修改

    • 若目标表不存在物理主键,则由用户从配置好的字段映射关系中,选择逻辑主键映射

    主键冲突策略

    当来源表无主键,目标表有主键时,数据写入目标表时依然会存在主键冲突情况,所以需要设置主键冲突策

    • 更新数据:主键相同时更新数据,新数据行覆盖旧数据行

    • 记为脏数据:主键相同时记为脏数据,冲突的数据行不写入

    • 忽略冲突:主键相同时忽略冲突,冲突的数据行不写入

    2.3 基于标识字段,新增/修改/删除数据

    2.3.1 功能说明

    注1:目标端为 Hive 时,不支持该写入方式。

    注2:新增/更新/删除可勾选任意一个或多个。

    写入方式:

    写入方式勾选「删除时,可选择物理删除/逻辑删除:

    • 逻辑删除:不实际删除数据,标记删除数据。

    • 物理删除:实际删除数据。

    两种删除方式的具体效果可参见:物理删除和逻辑删除的区别

    标识字段/标识值:

    1)通过标识字段和标识值筛选出需要新增/更新/删除的数据。

    2)若使用「数据比对+DB表输出算子」实现数据的处理,「DB表输出算子中的标识字段则自动读取 fdl_comparison_type 作为标识字段,且自动读取标识字段的值作为标识值。

    3)表输出只选择新增/更新/删除其中一个时,「标识字段」可不填,不填则对读取的所有数据进行新增或更新或删除。

    主键映射:

    详情请参考本文 2.1 节说明。

    1)出现条件:写入方式中勾选了「更新」或「删除」。

    2)写入方式中勾选了「更新」或「删除」时,「主键映射」处不允许为空。

    2.3.2 最佳实践

    1)通常数据比对+DB 表输出结合使用,实现数据的增删改;详情参见:数据比对典型示例

    2)单个数据同步节点使用场景:

    • 用户希望将筛选出的数据,只做新增/更新/删除操作。

    • 用户数据已经有了标识字段和标识值,需要对数据进行新增/更新/删除操作。

    详情请参见:数据同步-基于标识字段,新增/更新/删除数据

    3. 事务控制

    3.1 应用场景

    1)用户在定时同步向目标库写入数据时,希望可以将单次当前来源端的所有数据,放到同一个事务内装载:

    • 要么都成功,正常提交事务,更改目标表数据。

    • 要么都失败,事务回滚,对目标表不产生影响。

    2)在定时任务同步完成后,可以将当次写入的统计数据写到自定义的表中,以方便后续校验数据。

    3.2 使用限制

    1)4.2.7.4 及之后版本,目标端为 Oracle、Greenplum、MySQL、SQL Server、PostgreSQL 时,支持使用「事务控制功能。4.2.8.2 及之后版本,来源端 为 KingBaseES(SqlServer模式)、KingBaseES(MySQL模式)时,也支持使用「事务控制功能。

    2)当写入方式选择「清空目标表,再写入数据」时:

    • 清表方式为 TRUNCATE 时,只有 PostgreSQL、Greenplum 支持使用事务控制」功能。

    • 清表方式为 DELETE 时,支持事务控制的数据库,均支持开启「写入事务控制」。

    3.3 功能说明

    定时任务写入数据库时支持前置处理和后置处理,并支持将这些处理逻辑与核心写入操作一起封装为事务,一同支持失败回滚。界面如下图所示:

    18.png

    事务控制配置项如下所示:

    若来源端选择了并行取数 ,去向端开启「事务控制,默认进行并行取数。

    事务控制功能示例请参见:事务控制示例

    功能
    说明
    前置 SQL 

    1)应用场景:删除目标表中XX时间段内的数据,删除后,再进行写入

    2)支持使用「@temp_tbl_nm_full」引用装载时使用的中间表名,可以使用此参数定义SQL查询,其他事务中引用此表名参数时,值为空字符串

    后置 SQL 

    1)应用场景:使用「后置SQL」做装载后检查,检查最终结果是否有异常;或者来记录增量时间戳,还可以用来统计表中的总/新增数据量,以及记录 etl 完成时间

    2)支持使用「@temp_tbl_nm_full」引用装载时使用的中间表名,可以使用此参数定义SQL查询,其他事务中引用此表名参数时,值为空字符串

    主键冲突策略

    开启「事务控制」按钮后,或者目标端为 Gbase 8A 时,主键冲突策略只能选择:

    • 更新数据:主键相同时更新数据,新数据行覆盖旧数据行

    • 运行报错:主键相同时记为脏数据,冲突的数据行不写入

    支持使用的参数:

    参数说明
    @temp_tbl_nm_full带有引号和完整SCHEMA的中间表名
    @temp_schema_nm无引号的中间SCHEMA名
    @temp_tbl_nm 无引号的中间表名
    @target_tbl_nm_full 带有引号和完整SCHEMA的目标表名
    @target_schema_nm无引号的目标SCHEMA名
    @target_tbl_nm 无引号的目标表名

    4. 注意事项

    比如来源表和目标表都有 D 列的部分数据为 NULL:

    设置「写入方式」为追加写入且 A、B、C、D 都是逻辑主键,如下图所示:

    运行后:若 D 列不为 NULL,若主键冲突则覆盖目标表数据;若 D 列为 NULL,若主键冲突则不会遵循覆盖逻辑,会追加写入。



    附件列表


    主题: 数据开发-定时任务
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持