数据加载策略

Data Loading Strategy

数据加载策略是将数据写入目的地时,系统执行的写入方式与冲突解决方法的策略配置。

关于此功能

◎ 增量处理模式

在DataPipeline系统中,为了提升写入效率,我们将数据写入分成小的批次少量多次执行写入,为了提升写入效率,我们提供两种增量处理模式可供选择。

  • 全增量模式

    • 即将数据源的全部增量数据依次写入数据目的地,可以保证数据全局一致性。

  • 精简增量模式

    • 即在一个写入批次内,将同一主键的增量数据的最后一次变化同步至目的地,可以保证数据最终一致性。该模式需要数据源增量数据获取开启日志补全。

◎ 数据加载方式-有主键表

在将数据写入数据目的地的过程中,可以通过配置数据加载方式来变更数据目的地写入时提交的SQL语句类型,以变更数据加载方式。

当前版本支持的数据加载方式有:Insert、Update、Delete、Ignore(忽略)、Merge(Upsert)。

对于不同数据源的数据获取方式,DML获取存在限制:

数据源类型
数据获取方式
是否能获取DML
备注

MySQL

Binlog

Oracle

DataPipeline采集代理程序

Oracle

LogMiner

Db2

InfoSphere Data Replication

PostgreSQL

Wal2json

MS SQL Server

Change Tracking

TiDB

TiCDC

关系型数据库

JDBC

文件系统

文件系统客户端

-

不存在DML概念

消息队列

消息队列客户端

-

不存在DML概念

对于不同数据目的地类型,数据加载方式的处理会有不同

数据目的地类型
数据源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)

-

-

注:“-”代表对于该数据目的地类型的DML操作转换不支持或无适用场景。

◎ 主键冲突策略

当数据加载方式选择了insert,在向目的地数据写入过程中,可能会出现待写入数据主键与目的地已有数据主键相同的情况,insert语句将执行失败。遇到上述情况时,通过配置主键冲突策略,可以暂停数据任务或将数据写入错误队列后续处理来应对。

◎ 数据加载方式-无主键表

在将数据写入数据目的地的过程中,可以通过配置数据加载方式来变更数据目的地写入时提交的SQL语句类型,以变更数据加载方式。

当前版本支持的数据加载方式有:Insert、Ignore(忽略)。

操作步骤

  1. 在数据链路详情页-策略配置tab中找到数据加载策略。

  2. 选择增量处理模式。

  3. 为数据源的每种数据操作标识选择数据加载方式。

  4. 选择主键冲突策略

  5. 保存配置

◎ 场景说明:数据目的地拉链表配置

在配置数据目的地过程中,可以在数据目的地添加一列,将该列标识为联合主键,通过清洗脚本赋值,其中可以存储数据源DML标识数据。

在数据加载方式中配置中,选择insert,即可实现目的地拉链表数据写入。

◎ 场景说明:主键更新的场景

通常情况下,主键的Value在一张业务表中是极少更新的,但是针对一些特殊的业务场景,存在主键更新的情况,在DataPipeline的产品中,针对此种情况,在一些特定场景中提供了相应的支持。

支持的节点
支持的读取方式
支持的场景

MySQL

binlog

增量

Oracle

logminer,Agent,CDC

增量

IBM db2

CDC

增量

PostgreSQL

wal2json

增量

处理逻辑:会针对主键更新的Update,在目的地拆分成两步,delete 原主键,insert 新主键。

然后根据加载策略的执行逻辑,在目的地执行。可以支持消息队列做缓存的模式,也可以支持使用内存做缓存的模式,同时对于单一主键和联合主键也全都支持,都采用上述逻辑处理。

最后更新于

这有帮助吗?