数据加载策略
Data Loading Strategy
数据加载策略是将数据写入目的地时,系统执行的写入方式与冲突解决方法的策略配置。
关于此功能
◎ 增量处理模式
在DataPipeline系统中,为了提升写入效率,我们将数据写入分成小的批次少量多次执行写入,为了提升写入效率,我们提供两种增量处理模式可供选择。
全增量模式
即将数据源的全部增量数据依次写入数据目的地,可以保证数据全局一致性。
精简增量模式
即在一个写入批次内,将同一主键的增量数据的最后一次变化同步至目的地,可以保证数据最终一致性。该模式需要数据源增量数据获取开启日志补全。
◎ 数据加载方式-有主键表
在将数据写入数据目的地的过程中,可以通过配置数据加载方式来变更数据目的地写入时提交的SQL语句类型,以变更数据加载方式。
当前版本支持的数据加载方式有:Insert、Update、Delete、Ignore(忽略)、Merge(Upsert)。
对于不同数据源的数据获取方式,DML获取存在限制:
MySQL
Binlog
是
Oracle
DataPipeline采集代理程序
是
Oracle
LogMiner
是
Db2
InfoSphere Data Replication
是
PostgreSQL
Wal2json
是
MS SQL Server
Change Tracking
是
TiDB
TiCDC
是
关系型数据库
JDBC
否
文件系统
文件系统客户端
-
不存在DML概念
消息队列
消息队列客户端
-
不存在DML概念
对于不同数据目的地类型,数据加载方式的处理会有不同
关系型数据库
Insert
Insert
数据目的地插入数据
保证数据DML操作一致性
Update
-
-
Delete
-
-
Ignore
忽略数据源DML变化,数据目的地不做任何写入
过滤插入DML操作
Merge(Upsert)
在数据目的地进行merge写入
当数据目的地存在需要被插入的数据,使用upsert/merge语句写入,可以保证写入成功,避免主键冲突
Update
Insert
数据目的地插入数据,需在数据目的地表添加DML标识列,并通过清洗脚本将数据源DML内容写入至数据目的地该列
通常用于在数据目的地创建拉链表,分析数据变化过程
Update
数据目的地插入数据
保证数据DML操作一致性
Delete
-
-
Ignore
忽略数据源DML变化,数据目的地不做任何写入
过滤更新DML操作
Merge(Upsert)
在数据目的地进行merge写入
当数据目的地不存在需要被更新的数据,使用upsert/merge语句写入,可以将update转换为insert执行,提示写入效率
Delete
Insert
数据目的地插入数据,需在数据目的地表添加DML标识列,并通过清洗脚本将数据源DML内容写入至数据目的地该列
通常用于在数据目的地创建拉链表,分析数据变化过程;或在目的地同步删除标识,源端删除数据,目的地端标记删除
Update
数据目的地更新数据,需在数据目的地表添加DML标识列,并通过清洗脚本将数据源DML内容写入至数据目的地该列
在目的地同步删除标识,源端删除数据,目的地端标记删除
Delete
数据目的地删除数据
保证数据DML操作一致性
Ignore
忽略数据源DML变化,数据目的地不做任何写入
过滤删除DML操作
Merge(Upsert)
数据目的地更新数据,需在数据目的地表添加DML标识列,并通过清洗脚本将数据源DML内容写入至数据目的地该列
在目的地同步删除标识,源端删除数据,目的地端标记删除
消息队列
Insert
Insert
数据目的地插入数据
常用写入方式
Update
-
-
Delete
-
-
Ignore
忽略数据源DML变化,数据目的地不做任何写入
过滤删除DML操作
文件系统
Insert
Insert
数据目的地插入数据
常用写入方式
Update
-
-
Delete
-
-
Ignore
忽略数据源DML变化,数据目的地不做任何写入
过滤删除DML操作
Merge(Upsert)
-
-
◎ 主键冲突策略
当数据加载方式选择了insert,在向目的地数据写入过程中,可能会出现待写入数据主键与目的地已有数据主键相同的情况,insert语句将执行失败。遇到上述情况时,通过配置主键冲突策略,可以暂停数据任务或将数据写入错误队列后续处理来应对。
◎ 数据加载方式-无主键表
在将数据写入数据目的地的过程中,可以通过配置数据加载方式来变更数据目的地写入时提交的SQL语句类型,以变更数据加载方式。
当前版本支持的数据加载方式有:Insert、Ignore(忽略)。
PostgreSQL数据节点作为数据源时,不支持无主键数据表的UPDATE、DELETE数据DML变化。
操作步骤
在数据链路详情页-策略配置tab中找到数据加载策略。
选择增量处理模式。
为数据源的每种数据操作标识选择数据加载方式。
选择主键冲突策略
保存配置
◎ 场景说明:数据目的地拉链表配置
在配置数据目的地过程中,可以在数据目的地添加一列,将该列标识为联合主键,通过清洗脚本赋值,其中可以存储数据源DML标识数据。
在数据加载方式中配置中,选择insert,即可实现目的地拉链表数据写入。
当数据加载方式配置为update或delete时,执行更新或删除依赖数据目的地中存在带有和待写入数据主键相同的数据;如目的地不存在该条数据,update或delete操作将被提交至数据目的地节点,根据各个节点处理特性不同,部分目的地可以正常同步,部分目的地将报错暂停。
对于Greenplum数据目的地,Update或Delete语句由于数据库限制,可能会导致写入性能下降。
精简增量可以提升数据写入效率,但在对数据一致性要求高的场景中,请使用全增量模式。
根据数据任务所选数据映射不同,在数据任务执行过程中,部分数据加载方式不支持,如Kafka数据目的地仅支持“insert”。
◎ 场景说明:主键更新的场景
通常情况下,主键的Value在一张业务表中是极少更新的,但是针对一些特殊的业务场景,存在主键更新的情况,在DataPipeline的产品中,针对此种情况,在一些特定场景中提供了相应的支持。
MySQL
binlog
增量
Oracle
logminer,Agent,CDC
增量
IBM db2
CDC
增量
PostgreSQL
wal2json
增量
处理逻辑:会针对主键更新的Update,在目的地拆分成两步,delete 原主键,insert 新主键。
然后根据加载策略的执行逻辑,在目的地执行。可以支持消息队列做缓存的模式,也可以支持使用内存做缓存的模式,同时对于单一主键和联合主键也全都支持,都采用上述逻辑处理。
最后更新于
这有帮助吗?