1. 概述
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
4.1.5.2 | - |
4.1.5.5 | 若「写入方式」设置为直接将数据写入目标表,在设置主键冲突策略中,支持设置「主键相同,覆盖目标表数据」 |
4.1.8.1 | 修复:多个数据同步节点并行执行时,如果使用事务输出至Oracle,并发写入同一张表时,执写入数据无异常。 |
4.1.10.2 |
|
4.1.11.1 | Greenplum 使用事务输出算子时,如果去向表有主键且写入方式为冲突覆盖,并行装载阶段速度会大幅上升 |
1.2 应用场景
1)用户在定时同步向目标库写入数据时,希望可以将单次当前来源端的所有数据,放到同一个事务内装载:
要么都成功,正常提交事务,更改目标表数据;
要么都失败,事务回滚,对目标表不产生影响。
2)在定时任务同步完成后,可以将当次写入的统计数据写到自定义的表中,以方便后续校验数据。
1.3 功能简介
定时任务写入数据库时支持失败回滚,即任务执行失败后不会对目标表产生影响。
定时任务写入数据库时支持前置处理和后置处理,并支持将这些处理逻辑与核心写入操作一起封装为事务,一同支持失败回滚。
1.4 前提条件
使用该算子需要增加 FineDB 配置,在 fine_conf_entity 数据表中增加配置。
请联系技术支持操作,技术支持联系方式:前往「服务」,选择「在线支持」、电话「400-811-8890」。
2. 使用限制
支持范围 | 写入方式 | 主键映射 | 主键冲突策略 |
---|---|---|---|
Oracle | 直接将数据写入目标表(4.1.5.2 开始支持) 清空目标表,再写入数据(4.1.5.2 开始支持) 基于标识字段,追加/更新/删除数据(4.1.10.2 开始支持) | 已配置物理主键:直接使用物理主键 未配置物理主键:支持选择字段作为逻辑主键(4.1.10.2 开始支持) | 主键相同,覆盖目标表的数据(4.1.10.2 开始支持) 主键相同,忽略目标表的数据(不支持) 主键相同,节点运行报错 |
Greenplum 数据源(Greenplum 仅支持并行装载模式) | 直接将数据写入目标表 清空目标表,再写入数据 基于标识字段,追加/更新/删除数据(4.1.10.2 开始支持) | 已配置物理主键:直接使用物理主键 未配置物理主键:支持选择字段作为逻辑主键 | 主键相同,覆盖目标表的数据 主键相同,忽略目标表的数据(不支持) 主键相同,节点运行报错 |
Gbase8a (4.1.10.2 开始支持) | 直接将数据写入目标表 清空目标表,再写入数据 基于标识字段,追加/更新/删除数据 | 未配置物理主键:支持选择字段作为逻辑主键 | 主键相同,覆盖目标表的数据 主键相同,忽略目标表的数据(不支持) 主键相同,节点运行报错 |
当前支持在「数据同步-写入方式」和「数据转换-DB表输出(事务)」算子中使用。
若设置直接将数据写入目标表,在设置主键冲突策略中,支持设置「主键相同,节点运行报错」和「主键相同,覆盖目标表数据」。
3. 功能说明
3.1 事务控制
事务控制配置项如下所示:
功能 | 说明 |
---|---|
前置 SQL | 支持使用「@temp_tbl_nm_full」引用装载时使用的中间表名,可以使用此参数定义SQL查询,其他事务中引用此表名参数时,值为空字符串。 |
后置 SQL | 支持使用「@temp_tbl_nm_full」引用装载时使用的中间表名,可以使用此参数定义SQL查询,其他事务中引用此表名参数时,值为空字符串。 |
支持使用的参数:
参数 | 说明 |
---|---|
@temp_tbl_nm_full | 带有引号和完整SCHEMA的中间表名 |
@temp_schema_nm | 无引号的中间SCHEMA名 |
@temp_tbl_nm | 无引号的中间表名 |
@target_tbl_nm_full | 带有引号和完整SCHEMA的目标表名 |
@target_schema_nm | 无引号的目标SCHEMA名 |
@target_tbl_nm | 无引号的目标表名 |
3.2 并行取数
4.1.10.2 以及之后的版本,若来源端选择了并行取数(3.2.4节),去向端选择事务输出,默认进行并行取数。
4. 操作步骤
例如用户需要将数据同步到 Oracle 时支持失败回滚,并需要在同步成功时,记录本次装载的最大时间到指定的数据表中,以便进行增量同步或者数据校验。
4.1 读取数据
新增定时任务,在数据转换节点中新增 DB 表输入算子,设置数据来源,如下图所示:
点击数据预览即可看到读取数据,如下图所示:
4.2 设置写入数据库前置后置
新增 DB表输出(事务) 算子,设置输出数据库的相关信息,如下图所示:
设置写入方式、主键并在事务控制下设置前置 SQL 和后置 SQL,如下图所示:
由于示例想要在同步成功时,记录本次装载的最大时间到指定的数据表中,因此设置后置 SQL:
INSERT INTO "ANONYMOUS"."duandian"(TIME)
SELECT MAX(合同签约时间) AS TIME FROM @temp_tbl_nm_full;
注1:SQL 含义为将本次执行数据表的最大「合同签约时间」从中间表中取出,并写入至指定的数据表「duandian」的 TIME 字段中。
注2:中间表与目标表字段相同,作为写入数据回滚的中间存放表,此处@temp_tbl_nm_full 为引用中间表。
4.3 运行任务
运行任务后,若执行成功,即可看到将指定数据同步写入至目标数据库,如下图所示:
同时最大合同签约时间写入指定的 duandian 表中,如下图所示:
若执行失败,则该批量数据均不会被写入指定数据库,实现失败回滚。