ETL_Informatica Powercenter缓慢变化维
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Informatica的缓慢变化维(Slowly Dimension)
作者:彭玉兴
MSN:j2eesky@ 第一种方式:keep most recent values in target
第二种方式:keep a full history of changes in the target
第三种方式:keep the current and previous values in the target
针对第一种方式,我们做如下实验:
创建源表
-- Create table
create table SDIMENSION_EMPLOYEE
(
NAME VARCHAR2(30) not null,
SEX VARCHAR2(10),
ADDRESS VARCHAR2(100),
GRADE VARCHAR2(100)
)
tablespace PM_USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 512
next 512
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate primary, unique and foreign key constraints
alter table SDIMENSION_EMPLOYEE
add constraint PK_NAME primary key (NAME)
using index
tablespace PM_USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 512K
next 512K
minextents 1
maxextents unlimited
pctincrease 0
);
插入几条数据
Insert into employee(‘张三’,’男’,’罗湖区’,’一年级’);
Insert into employee(‘李四’,’男’,’罗湖区’,’二年级’);
Insert into employee(‘小莉’,’女’,’罗湖区’,’三年级’);
Insert into employee(‘小红’,’女’,’罗湖区’,’二年级’);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 注意:此处以name为主键,主要是为了直观的体现
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 总体流程如下:
增加lookup组建和update组件
如下图:
Update组件:
其公式为:
Iif(isnull(name),dd_insert,iif((sex!=sex1 or address !=address1 or
grade!=grade1),dd_update,dd_reject)
其他设置:目标TESTYB的name字段要设置为主健,workflow的装载方式必须为Data Driven
第一种类型: keep most recent values in target
第一种类型的主要作用是:
保留大部分的历史记录,即,当其中的一小部分进行变化的时候,抽取全部维度数据(即使全量的维度表对于Informatcia也是很小的一部分数据),有更新的数据才进行替换。这样就可以节省时间,提高效率
那么Informatcia里面是怎样进行判断的呢?
事实上,这里封装了一个类似于模型的ETL流程,它内置了一个flag,然后根据flag的做如下判断:
ChangeFlag(变化标志):
IIF(NOT ISNULL(PM_PRIMARYKEY)
AND
(
DECODE(CUST_NAME,PM_PREV_CUST_NAME,1,0) = 0
OR
DECODE(CUSTOMER_STATE,PM_PREV_CUSTOMER_STATE,1,0) = 0
OR
DECODE(CUSTOMER_TYPE,PM_PREV_CUSTOMER_TYPE,1,0) = 0
OR
DECODE(CUSTOMER_ZIP,PM_PREV_CUSTOMER_ZIP,1,0) = 0
OR
DECODE(DISCOUNT_RATE,PM_PREV_DISCOUNT_RATE,1,0) = 0
OR
DECODE(FIRST_CONTACT,PM_PREV_FIRST_CONTACT,1,0) = 0
),TRUE,FALSE)
NewFlag:
IIF(ISNULL(PM_PRIMARYKEY),TRUE,FALSE)
通过判断目标表中的主键是否为空(加入目标表中不存在这样的数据的话,就没有这个主键),若为空,则插入。若不为空,则判断此条数据的其他字段是否有变化,若有变化,则进行数据更新。如图:
整个模型的ETL流程如下图所示:
至此,我们整个关于缓慢维度变化的第一种类型的运行机制,那么可以通过workfow来运行,并对源数据表的数据进行更新,来验证这个逻辑是否正确!
对于那一步,直接对源表数据进行Update,insert等操作即可
关于这一步就不详细解释了。