上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

时间:2024-04-01 13:43:11

DMETL实现了增量数据的同步。在源表上进行的增删改操作,可以通过增量数据抽取,同步到目的表中。在第一次将源表数据全量抽取到目的表中后,可以通过重复地执行增量数据抽取,将源表上的增删改操作产生的变化数据,无遗漏地同步到目的表中,从而实现源表和目的表的长期同步。由于不需要每次都同步全量数据,当全量数据巨大,而每次变化数据较少时,可以大幅提升数据同步的效率。

 

DMETL中“增量表读取“提供对已建立好的数据库数据源中增量表的数据读取功能,并且可以对数据读取列、数据行、缓存以及并发等选项的设置。

 

DMETL支持的增量有:

  • 触发器增量:是通过在基表上建立触发器,捕捉基表上发生的增删改操作,从而产生增量数据。触发器方式可以捕捉到插入和修改的大对象数据。

  • 影子表增量:是在数据源中,建立一张和基表结构相同的影子表。当基表上发生了增删改操作后,在增量数据集进行刷新操作时,通过比较基表和影子表的数据,从而获得增量数据。

  • MD5增量:通过将变化前后的数据进行MD5 散列处理,然后比对MD5 的散列值是否相同来实现。

  • 时间戳增量:通过一条记录修改的时间戳值或生成的时时间戳值来决定是否迁移。

  • Oracle CDC 增量方式:是“Oracle变化数据捕捉”(Changed Data Capture)的简称,利用了Oracle内建的存储函数和过程捕捉和发布变化数据,本质是分析日志的方式,获得Oracle 数据库中某张表上的数据变化,从而实现增量数据的抽取。

  • DMHS 增量:DMHS是“DM异构同步”的简称。DMHS工具通过解析数据库日志,在不同的数据库之间实现数据同步。

 

各种增量方式的比较和使用建议

增量方式

效率

通用性

使用建议

触发器

在表上进行增量抽取

一般情况下建议使用

影子表

较高

在表或视图上进行增量抽取

一般情况下建议使用,但比较列包含大对象类型时,效率较低

MD5

在表或视图上进行增量抽取

需要在大对象类型列上进行比较时可使用

时间戳

较高

在表或视图上进行增量抽取

需要修改时间戳列,因此需要数据库支持时间戳自动更新,或手工更新时间戳列

DMHS

DM数据库中,在表上进行增量抽取

需要安装DMHS工具。当对性能要求较高时建议使用

Oracle   CDC

Oracle数据库中,在表上进行增量抽取

sync方式不支持大对象类型列的比较。当对实时性要求较高时建议使用sync方式 ,hotlog方式可能有延时,但是对数据源的影响较小

表格 1

 

使用建议:

源库权限

是否要同步update和delete操作

数据量

建议(按优先级排列)

只读

1.   如果目的表上有主键或者唯一索引,可以使用全量抽取,然后在表目的上使用插入更新选项。

2.  每次同步前先删除目的表的数据,然后在进行全量同步。

1.  如果源表上有序列或者自增列可以使用带参数的sql查询进行同步,参见典型示例《基于变量实现断点续传和增量抽取》

2. 如果源是dmhs支持的数据库,则可以通过dmhs进行

1.  每次同步前先删除目的表的数据,然后在进行全量同步。

 

1. 如果源是dmhs支持的数据库,则可以通过dmhs进行

2. Oracle CDC (需要在源库上有oracle cdc的相关权限)

读写

不限

1. Oracle CDC

2.  触发器增量

3.  DMHS

1. 影子表增量

2. MD5增量

表格 2

 

注:数据量在100w以内的都可以认为是小表,超过100w的为大表。

 

添加增量表方式

 

通过工具栏的“数据读取“中的“增量表”选择的数据集,就可以在普通表上添加增量表。比如下图,是在普通表DEPARTMENT_T1上添加的MD5_CDC表。

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图1

 

表/视图选择的数据集是普通表,增量表比普通表多两列CDC_ID和CDC_OPT(图4),用来记录对源表的操作。当对源表进行插入、更新、删除时,目的表中记录会相应地更改。

 

本文以增加MD5增量表为例,进行增量演示(该示例可在DMETL示例库中找到,或按如下步骤创建):

 

1.    创建数据源及目的表

 

在数据集DMETL_SAMPLE 库下添加表DEPARTMENT_T1、DEPARTMENT_T2(图2),在表DEPARTMENT_T1 处添加MD5 增量表(图3~5):

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图 2 DEPARTMENT_T1、DEPARTMENT_T2表结构

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图3

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图4

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图 5 DEPARTMENT_T1表的MD5增量表DEPARTMENT_T1_MD5_CDC

 

2.    创建转换

转换名称:“增量表演示”

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图6

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图7 转换流程图

图7中源表及目的表分别选择第一步中创建的MD5_CDC表及T2表。

 

3.    往源表插入、更新数据,执行转换

 

第一步中创建表后,并没有往表里添加记录

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图8

 

接下来,往T1表中增加、更新记录:

 

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图9

 

执行图7所示的转换后,浏览三张表分别得到如图所示结果:

 

上海腾科教育干货分享之达梦数据库DMETL中的增量抽取初识

图10

 

增量表:为了方便做增量抽取。增量抽取只抽取自上次抽取以来数据库中要抽取的表中变化的数据,将捕获的变化数据写入到对应的CDC表(增量表)中。在ETL 使用过程中,增量抽取较全量抽取应用更广。如何捕获变化的数据是增量抽取的关键。对捕获方法一般有两点要求:①准确性,能够将业务系统中的变化数据按一定的频率准确地捕获到;②性能,不能对业务系统造成太大的压力,影响现有业务。本文以MD5增量为例,对增量抽取流程做了简单介绍,实际使用中请考虑系统特性,选择合适的增量抽取方式。