DMETL插入更新功能的使用介绍
1. 插入更新更能介绍:
属于表目的组件的一个功能选项,经常用在无数据删除的情形下:目的侧不存在删除的、只有插入、更新的情况。
2. 配置方法如下图:
设置查找列
3. 插入更新使用要点
插入更新功能,有的情况下执行效率十分低下,要高效的使用起来需要注意。
原因:查找列须是主键或唯一索引。
下面以4个例子说明使用方法
(1)
查找列非主键、无索引
源表:
CREATE TABLE TEST_T1
(
"ID" NUMERIC(13,0) primary key,
"MSISDN_1" VARCHAR(20),
"MSISDN_2" VARCHAR(20),
"MSISDN_3" VARCHAR(20),
"CALLDATE" DATE,
"CALLTIME" TIME(0),
"DURATIONTIME" INT,
"ATTACH_1" VARCHAR(100),
"ATTACH_2" VARCHAR(100),
"CALLTYPE" INT,
"LY" INT
) ;
目的表:
CREATE TABLE TEST_T2
(
"ID" NUMERIC(13,0),
"MSISDN_1" VARCHAR(20),
"MSISDN_2" VARCHAR(20),
"MSISDN_3" VARCHAR(20),
"CALLDATE" DATE,
"CALLTIME" TIME(0),
"DURATIONTIME" INT,
"ATTACH_1" VARCHAR(100),
"ATTACH_2" VARCHAR(100),
"CALLTYPE" INT,
"LY" INT ) ;
执行转换的效率,在没有大字段的情况下,速度仅仅只有数百条每秒,而且越来越慢,如下图:
(2)查找列非主键,有索引(非唯一)
目的表:
CREATE TABLE TEST_T2
(
"ID" NUMERIC(13,0),
"MSISDN_1" VARCHAR(20),
"MSISDN_2" VARCHAR(20),
"MSISDN_3" VARCHAR(20),
"CALLDATE" DATE,
"CALLTIME" TIME(0),
"DURATIONTIME" INT,
"ATTACH_1" VARCHAR(100),
"ATTACH_2" VARCHAR(100),
"CALLTYPE" INT,
"LY" INT ) ;
create index idx_2 on TEST_T2(id);
执行转换发现效率依然很低,无改进。
(3)查找列是主键
CREATE TABLE TEST_T2
(
"ID" NUMERIC(13,0) primary key,
"MSISDN_1" VARCHAR(20),
"MSISDN_2" VARCHAR(20),
"MSISDN_3" VARCHAR(20),
"CALLDATE" DATE,
"CALLTIME" TIME(0),
"DURATIONTIME" INT,
"ATTACH_1" VARCHAR(100),
"ATTACH_2" VARCHAR(100),
"CALLTYPE" INT,
"LY" INT ) ;
执行转换发现效率有显著提高;
(4)查找列有唯一索引
CREATE TABLE TEST_T2
(
"ID" NUMERIC(13,0) ,
"MSISDN_1" VARCHAR(20),
"MSISDN_2" VARCHAR(20),
"MSISDN_3" VARCHAR(20),
"CALLDATE" DATE,
"CALLTIME" TIME(0),
"DURATIONTIME" INT,
"ATTACH_1" VARCHAR(100),
"ATTACH_2" VARCHAR(100),
"CALLTYPE" INT,
"LY" INT ) ;
create unique index idx_1 on TEST_T2(id);
执行转换发现,速度同样很快。
小结:
在目的表查找列不是主键或者唯一索引情况下,DMETL无法确定数据的唯一性,会对每条数据先在目的表上先执行一次update,没更新再插入该条数据。
如果目的表查找列是主键或者唯一索引,那么可以直接判定该条数据是否已经存在,无需先update,效率固然比上种情况高很多。