1. 概述
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
4.0.5 | - |
4.1.7.3 | 支持 HANA 作为写入数据源 |
4.1.8.1 | 配置管道任务-选择数据来源 步骤中生成的分组表,不支持 DDL |
4.1.8.2 | 管道任务支持写入神通数据库 |
4.1.11.2 | YMatrix 作为目标端时,支持无主键同步 |
4.1.11.5 | 若来源表支持主键,字段映射默认选中来源表的主键和 Not Null |
点击展开更多 | |||||||||||||||||||||||||||||
|
1.2 功能简介
「选择去向」步骤中,需要设置实时同步数据要存放的位置、目标表是否追加时间戳字段(数据变化时间)、来源端表结构变化,目标端是否跟随变化等。如下图所示:
2. 注意事项
数据管道使用 Greenplum 或者 Greenplum(并行装载)作为目标表时,都是用的 COPY 装载模式,需要在目标数据库先创建 fdl_temp 模式用来存放临时表,因此需要给该数据连接账号赋予在对应数据库创建模式的权限。详情参见:配置Greenplum数据源
4.0.29 及之后版本,Greenplum、Greenplum(并行装载)作为目标端同步优化:当数据通过COPY装载失败时,重新使用JDBC装载,重新装载再失败时,识别为脏数据,并正常记录,以保证数据正常。
3. 操作步骤
3.1 数据源&库
设置实时同步数据要存放的位置。管道任务支持的目标端请参见:数据管道支持的数据源类型
目标数据表结构(表名和字段名)和来源表一致:首次数据同步会清空目标数据表数据,然后全量同步数据,此后增量同步。
目标数据库没有和来源表一样的数据表,则直接在目标数据库新建数据表。
3.2 源端删除数据
1)两种方式说明如下:
目标端执行物理删除:来源表删除数据,目标表中也会直接删除。
目标端执行逻辑删除:来源表删除数据,目标表将新增一个名称为_fdl_marked_deleted的布尔型字段(字段默认为false),用于记录数据删除状态。来源数据表删除了一条数据,此时同步至目标表,目标表不进行物理删除,而是将_fdl_marked_deleted字段更新为 true 。
4.1.7.2 及之后版本,目标表选择已存在表且已存在表包含「_fdl_marked_deleted」字段时,支持使用源端逻辑删除功能;4.1.7.2 及之后版本,若未开启逻辑删除&目标表为已存在表&目标表包含「_fdl_marked_deleted」字段时,该字段后续将传空值。
若目标端执行「逻辑删除」,说明如下:
目标表 | 逻辑删除功能说明 |
---|---|
自动建表 | 目标表映射增加「_fdl_marked_deleted」字段,同步时标记逻辑删除 |
已存在表:目标表不包含_fdl_marked_deleted字段 | 同步类型选择存量+增量:目标表映射增加「_fdl_marked_deleted」字段,同步时标记逻辑删除 同步类型选择仅增量同步:目标表映射增加「_fdl_marked_deleted」字段,同步时将历史数据「_fdl_marked_deleted」字段值改为 false,并为新数据标记逻辑删除 |
已存在表:目标表包含_fdl_marked_deleted字段 | 同步类型选择存量+增量:直接使用「_fdl_marked_deleted」字段,同步时标记逻辑删除 同步类型选择仅增量同步:直接使用「_fdl_marked_deleted」字段,同步时不处理历史数据逻辑删除字段,为新数据标记逻辑删除 |
2)需注意:
开启逻辑删除时,4.0.23 版本进行数据初始化全表更新,对目标端清表重写,大大提升了数据同步效率。
如果后续有和目标表表中已存在主键相同的数据重新写入,不插入新数据,而是更新该数据,并将之前已经标记为删除的数据标记为未删除。
GaussDB 数据库及 PostgreSQL9.4 以下(含9.4)版本数据库,不支持「目标端执行逻辑删除」。
3.3 同步时标记时间戳
勾选「同步时标记时间戳」按钮,所有目标表将新增一个名称为_fdl_update_timestamp的长整型字段,以毫秒级时间戳的形式记录数据在数据库中实际新增和更新的时间(数据库所在时间)。
需注意:
勾选「目标端执行逻辑删除」和「同步时标记时间戳」后默认作用在该管道任务的所有数据表,不支持仅设置管道任务中的一张表。
时间戳同步在数据完全同步后执行。若数据量较大,数据同步过程中时间戳可能暂时为空。
若开启「同步时标记时间戳」,说明如下:
目标表 | 说明 | |
---|---|---|
自动建表 | 目标表映射增加「_fdl_update_timestamp」字段,同步时传入时间戳 | |
已存在表 - 目标表没有「_fdl_update_timestamp」字段 | 同步类型选择存量+增量:目标表映射增加「_fdl_update_timestamp」字段,同步时传入时间戳 同步类型选择仅增量同步:目标表映射增加「_fdl_update_timestamp」字段,同步时补齐历史数据时间戳,并为新数据传入时间戳 | |
已存在表 - 目标表包含「_fdl_update_timestamp」字段 4.1.7.2 及之后版本支持 | 同步类型选择存量+增量:直接使用「_fdl_update_timestamp」字段,同步时传入时间戳 同步类型选择仅增量同步:直接使用「_fdl_update_timestamp」字段,同步时不处理历史数据时间戳,为新数据传入时间戳 |
若未开启「同步时标记时间戳」&目标表包含「_fdl_update_timestamp」字段,该字段后续将传空值。
示例:
管道任务中勾选了「同步时标记时间戳」、选择目标端执行逻辑删除,如果来源数据库数据表「S订单」中删除了一条订单 ID 为 10257 的数据,如下图所示:
在目标数据表中,订单 ID 为 10257 的数据不会被删除,而是将对应「_fdl_marked_deleted」字段修改为 true,同时「_fdl_update_timestamp」字段时间戳修改为删除字段的时间戳,如下图所示:
注:「目标端执行逻辑删除」、「同步时标记时间戳」功能仅在管道任务新建和暂存状态时可进行配置,运行中、暂停状态的任务不允许调整配置。
3.4 同步源表结构变化
在使用管道任务进行数据实时同步过程中,源端表结构可能因业务调整等原因发生变动,如增删表、增删字段、修改字段名称、修改字段类型等,此时希望在目标侧的表可以自动同步这些源端的调整。
详情参见:同步源表结构变化
注:选择数据来源 步骤中配置的分组表,不支持「同步源表结构变化」功能。
若未开启「同步源表结构变化」,则若来源数据结构发生了变化,管道任务执行方式如下所示:
操作 | 「关闭」同步源表结构变化 | 字段映射配置变化 | 目标表结构变化 | 目标表数据变化 |
---|---|---|---|---|
删除表 | 继续同步其他表。 | 无变化。 | 无变化,修改全部忽略。 | 被删除表在后续同步中将没有新数据写入。 |
重命名表 | 原名称对应的表删除,继续同步其他表。 | 原名称表在后续同步中将没有新数据写入。 | ||
删除字段 | 继续同步其他字段。 | 被删除字段在后续同步中传NULL值。 | ||
新增字段 | 忽略新增字段,继续同步其他字段。 | 无变化,仍然按照原来的字段配置情况进行同步。 | ||
修改字段名称 | 识别为原名称表字段删除,同删除字段逻辑。 | 被重命名字段在后续同步中传NULL值。 | ||
修改字段类型 | 忽略类型同步,如果类型不匹配,作为脏数据处理。 | 无变化,仍然按照原来的字段配置情况进行同步。 |
3.5 设置无主键同步
若某些数据源的业务表没有主键,用户也不知道这些表作为来源表该标记什么字段作为逻辑主键。此时对无主键的表,无需标记逻辑主键,也可以实现数据的实时同步。
需要注意的是,勾选了无主键同步后,在管道进行数据同步时,会自动使用目标表所有可用字段作为逻辑主键并配置到任务中,并使用逻辑主键作为更新和删除时的比对字段。
即将目标表所有能进行比对的字段都用来比对,但是不区分源端对完全相同数据中部分数据的操作。
对于目标端的主键设置和同步逻辑请参见:目标端主键设置逻辑
4.1.1 及之后版本,「选择去向」步骤中,数据源为 Oracle/GP/SQLServer 数据库时,支持无主键同步;4.1.11.2 及之后版本,「选择去向」步骤中,数据源为 YMatrix 数据库时,支持无主键同步。
勾选「无主键同步」,如下图所示:
场景说明:
源端有 5 条相同数据,第一次启动目标端也会有 5 条相同数据。
源端相同数据删除其中一条、多条,目标端都是全部删除。
源端相同数据再增加相同的一条或多条数据,目标端数据无变化。
源端多条相同数据只修改一其中条,目标端相同数据全部修改。
源端多条相同数据修改多条,按照改动顺序,源端第一次修改的数据,目标端对应的那个字段也全部同时修改;之后修改的数据,按照最新数据新增。
若该步骤设置了同步源表结构变化,则:
字段新增:与其他 DDL 相同,目标字段新增,新增的这个字段不标记物理主键或逻辑主键。
字段删除:如果删除字段在目标侧对应是逻辑主键,任务将报错终止。
如果删除字段在目标侧对应是物理主键,由于此时数据同步将一直违反主键非空的规则,故将任务报错中止。