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表。
图1
表/视图选择的数据集是普通表,增量表比普通表多两列CDC_ID和CDC_OPT(图4),用来记录对源表的操作。当对源表进行插入、更新、删除时,目的表中记录会相应地更改。
本文以增加MD5增量表为例,进行增量演示(该示例可在DMETL示例库中找到,或按如下步骤创建):
1. 创建数据源及目的表
在数据集DMETL_SAMPLE 库下添加表DEPARTMENT_T1、DEPARTMENT_T2(图2),在表DEPARTMENT_T1 处添加MD5 增量表(图3~5):
图 2 DEPARTMENT_T1、DEPARTMENT_T2表结构
图3
图4
图 5 DEPARTMENT_T1表的MD5增量表DEPARTMENT_T1_MD5_CDC
2. 创建转换
转换名称:“增量表演示”
图6
图7 转换流程图
图7中源表及目的表分别选择第一步中创建的MD5_CDC表及T2表。
3. 往源表插入、更新数据,执行转换
第一步中创建表后,并没有往表里添加记录
图8
接下来,往T1表中增加、更新记录:
图9
执行图7所示的转换后,浏览三张表分别得到如图所示结果:
图10
增量表:为了方便做增量抽取。增量抽取只抽取自上次抽取以来数据库中要抽取的表中变化的数据,将捕获的变化数据写入到对应的CDC表(增量表)中。在ETL 使用过程中,增量抽取较全量抽取应用更广。如何捕获变化的数据是增量抽取的关键。对捕获方法一般有两点要求:①准确性,能够将业务系统中的变化数据按一定的频率准确地捕获到;②性能,不能对业务系统造成太大的压力,影响现有业务。本文以MD5增量为例,对增量抽取流程做了简单介绍,实际使用中请考虑系统特性,选择合适的增量抽取方式。