DMETL插入更新功能的使用介绍

1. 插入更新更能介绍:

属于表目的组件的一个功能选项,经常用在无数据删除的情形下:目的侧不存在删除的、只有插入、更新的情况。

2. 配置方法如下图:

DMETL插入更新功能的使用介绍

设置查找列

DMETL插入更新功能的使用介绍

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 ) ;

执行转换的效率,在没有大字段的情况下,速度仅仅只有数百条每秒,而且越来越慢,如下图:

DMETL插入更新功能的使用介绍

(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 ) ;

执行转换发现效率有显著提高;

DMETL插入更新功能的使用介绍

(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,效率固然比上种情况高很多。