一、DMETL4增量比对法数据同步,是指借用转换中的增量比对组件实现数据同步的一种同步方式,是一种通过读取源表和目的 表后进行增量比对,计算出增量数据的方法。技术说明如下:
1. 增量比对法数据同步实质上也是数据比较类同步,跟MD5比较法、影子表同步法严格意义上属于一个类型,但是增量同步效率 高的多;
2. 增量比对法数据同步的核心关键技术就是排序和索引,排序后的源表、目的表排序进行比较的计算复杂度从传统的比较类的 m*n降到了m。
3. 对于第2点刚刚讲到的创建源表和目的表索引,理由在于:
(1) 在源表T1的连接列id上 创建索引,可以极大加快排序效率;
(2) 在目的表T2的连接列id上创建索引,不仅可以极大加快排序效率,也可以在增量比对的时候走索引连接,可以直接索引定位 到数据;
PS:可能有人说,建立索引不一定有用,因为数据的分布性(比如有 重复值)不一定会走索引,但是现实的情况是:有重复值的表的数据同步基本不存在,另外如果大部分连接列值重复,数据同步是无意义的。
4. 增量比对法数据同步,其增量耗时主要在:排序(s)、比对(m),总复杂度=s+m
二、实例操作、配置方法
1. 数据、环境准备
创建源表T1和目的表T2,并向源表插入一些数据,更新源表统计信息。
create table t1( --创建源表t1
id numeric(13,0),
MSISDN_1 varchar(20),
MSISDN_2 varchar(20),
MSISDN_3 varchar(20),
CALLDATE date,
CALLTIME timestamp,
DURATIONTIME int,
ATTACH_1 varchar(100),
ATTACH_2 varchar(100),
CALLTYPE int,
LY int
);
create index idx_t1_id on t1(id);--在源表连接列上创建索引
call INSERT_DATA(2000000) --插入200W数据,存储过程略
stat 100 on t1(id); --更新列统计信息
create table t2( --创建目的表t2
id numeric(13,0),
MSISDN_1 varchar(20),
MSISDN_2 varchar(20),
MSISDN_3 varchar(20),
CALLDATE date,
CALLTIME timestamp,
DURATIONTIME int,
ATTACH_1 varchar(100),
ATTACH_2 varchar(100),
CALLTYPE int,
LY int
);
create index idx_t2_id on t2(id);--再目的表连接列上创建索引
2. 先看看下图的总体转换配置图
3.新建数据源,这里新建一个本地数据源,数据库类型是DM7,如下图:
4. 在数据源中添加同步表,源表T1,目的表T2
5. 源表读取组件配置,使用的是普通表读取组件
6. 源表排序配置
7. 目的表的读取,也使用的表读取组件
8. 目的表读取上同样需要对连接列排序,排序规则和源的排序规则一致,都选择升序
9.从数据转换里拖出增量比对组件,用绿色的线连接,进行配置,如图:
注意:源表对应增量比对数据源,目的表对应增量比对数据目的,数据输入顺序要和上面表读取组件的排序规则一致,都选择升序
10. 添加连接列配置
11.配置更新比较列,这里配置了3个更新比较列,其他列都不是更新比较列,那么只有这3列发生数据变化才会被比较出不同,发生增量同步,其他列的数据变化都不会产生增量同步。
12. 配置T2的增量目的表,用绿色的线从增量比对组件连接到增量目的表上
13. 设置查找列
三、演示
1.首次全量同步数据,直接执行转换就可
2. 增量更新,修改一条数据的列值MSISDN_1
3. 增量删除,删除一条数据
3. 插入一台数据,增量更新
4. 试试在T1表更新一条数据的列值LY(非更新比较列),从目的表组件上看是没有I/D/U数据的,即:无增量数据
PS:从源节点T1、T2,增量比对组件上的速度值可以很明显的看出,这种增量方法效率是非常高的!