1. 概述编辑
1.1 版本
| FineDataLink 版本 | 功能变动 |
|---|---|
| 4.0.5 | - |
| 4.1.1 | Oracle、GP、SQLServer 数据源作为源表,支持无主键同步,详情参见本文 3.4 节 |
选择管道任务数据来源后,需要选定需要同步至的目标数据库的具体位置。
2. 注意事项编辑
数据管道使用 GreenPlum 或者 Greenplum(并行装载)作为目标表时,都是用的 COPY 装载模式,需要在目标数据库先创建 fdl_temp 模式用来存放临时表,因此需要给该数据连接账号赋予在对应数据库创建模式的权限。
3. 操作步骤编辑
3.1 选择目标数据库
点击下一步进入「选择去向」界面,选定目标数据库,如下图所示:
目标数据表数据结构(表名和字段名)和来源表一致:首次数据同步会清空目标数据表数据,然后全量同步数据,此后增量同步。
目标数据库没有和来源表一样的数据表,则直接在目标数据库新建数据表。

注::GreenPlum 和 Greenplum(并行装载)作为目标端时,需要数据库用户具有CREATE SCHEMA和CREATE TABLE权限。数据装载时,将新建名为fdl_temp的模式用于存放临时表。
3.2 设置时间戳和逻辑删除标识字段
注:开启逻辑删除时,4.0.23 版本进行数据初始化全表更新,对目标端清表重写,大大提升了数据同步效率。
接下来设置「源端删除数据」为「目标端执行逻辑删除」,如下图所示:
如果选择「目标端执行物理删除」,则来源表删除的数据同步至目标表中会直接删除;
如果选择「目标端执行逻辑删除」,则所有同步目标表将新增一个名称为_fdl_marked_deleted 的布尔型字段(字段默认为false),用于记录数据删除状态。来源数据表删除了一条数据,此时同步至目标表,目标表不进行物理删除,而是将_fdl_marked_deleted 字段更新为 true 。
注:如果后续有和目标表表中已存在主键相同的数据重新写入,不插入新数据,而是更新该数据,并将之前已经标记为删除的数据标记为未删除。

注1:GaussDB数据库及PostgreSQL9.4以下(含9.4)版本数据库,不支持「目标端执行逻辑删除」。
注2:勾选「目标端执行逻辑删除」和「同步时标记时间戳」后默认作用在该管道任务的所有数据表,不支持仅设置管道任务中的一张表。
注3:时间戳同步在数据完全同步后执行。若数据量较大,数据同步过程中时间戳可能暂时为空。
勾选「同步时标记时间戳」,所有目标表将新增一个名称为_fdl_update_timestamp 的长整型字段,以毫秒级时间戳的形式记录数据在数据库中实际新增和更新的时间(数据库所在时间)。
点击下一步进入表字段映射阶段,如下图所示:

勾选了「同步时标记时间戳」,来源表中的数据进行了新增和更新,则该字段会写入「数据入库时间戳」和「数据更新时间戳」。
例如来源数据库数据表「S订单」中删除了一条订单ID 为10257的数据,如下图所示:

在目标数据表中,订单ID 为10257的数据不会被删除,而是将对应「_fdl_marked_deleted」字段修改为 true,同时「_fdl_update_timestamp」字段时间戳修改为删除字段的时间戳,如下图所示:

注:「目标端执行逻辑删除」、「同步时标记时间戳」功能仅在管道任务新建和暂存状态时可进行配置,运行中、暂停状态的任务不允许调整配置。
3.3 设置同步源表结构变化
在使用管道任务进行数据实时同步过程中,源端表结构可能因业务调整等原因发生变动,如增删表、增删字段、修改字段名称、修改字段类型等,此时希望在目标侧的表可以自动同步这些源端的调整。
详情参见:同步源表结构变化
若未开启「同步源表结构变化」,则若来源数据结构发生了变化,管道任务执行方式如下所示:
| 操作 | 「关闭」同步源表结构变化 | 字段映射配置变化 | 目标表结构变化 | 目标表数据变化 |
|---|---|---|---|---|
| 删除表 | 继续同步其他表。 | 无变化。 | 无变化,修改全部忽略。 | 被删除表在后续同步中将没有新数据写入。 |
| 重命名表 | 原名称对应的表删除,继续同步其他表。 | 原名称表在后续同步中将没有新数据写入。 | ||
| 删除字段 | 继续同步其他字段。 | 被删除字段在后续同步中传NULL值。 | ||
| 新增字段 | 忽略新增字段,继续同步其他字段。 | 无变化,仍然按照原来的字段配置情况进行同步。 | ||
| 修改字段名称 | 识别为原名称表字段删除,同删除字段逻辑。 | 被重命名字段在后续同步中传NULL值。 | ||
| 修改字段类型 | 忽略类型同步,如果类型不匹配,作为脏数据处理。 | 无变化,仍然按照原来的字段配置情况进行同步。 |
3.4 设置无主键同步
若某些数据源的业务表没有主键,用户也不知道这些表作为源表该标记什么字段作为逻辑主键。此时对无主键的表,无需标记逻辑主键,也可以实现数据的实时同步。
勾选「无主键同步」,如下图所示:
需要注意的是,勾选了无主键同步后,在管道进行数据同步时,会自动使用目标表所有可用字段作为逻辑主键并配置到任务中,并使用逻辑主键作为更新和删除时的比对字段。
即将目标表所有能进行比对的字段都用来比对,但是不区分源端对完全相同数据中部分数据的操作。
源端在完全相同的多条数据中改一条,目标端相同数据全改。
对于目标端的主键设置和同步逻辑请参见:目标端主键设置逻辑

若该步骤设置了同步源表结构变化,则:
字段新增:与其他 DDL 相同,目标字段新增,新增的这个字段不标记物理主键或逻辑主键。
字段删除:如果删除字段在目标侧对应是逻辑主键,任务将报错终止。
如果删除字段在目标侧对应是物理主键,由于此时数据同步将一直违反主键非空的规则,故将任务报错中止
4. 后续操作编辑
详情参见:配置管道任务-表字段映射

