ETL_Informatica Powercenter缓慢变化维

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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等操作即可

关于这一步就不详细解释了。

相关文档
最新文档