粤磊 informatica powercenter学习笔记(六)

  缓慢变化维的处理

DW的经典四大特点就是  : 面向主题,集成,反映历史变化,数据相对稳定。
为了反映历史变化,比如我们常见的组织维度的年度变更,财务成本中心的变更都需要对 组织表或成本中心表先做判断,如果变更的记录在目标表中存在就更新,如果目标表中没有,我们就插入。

其实这个问题,如果直接在DB中,用高级的SQL语句也可实现:

ENV;ORACLE  T1,TARGET
DROP TABLE INFO.TARGET CASCADE CONSTRAINTS;

CREATE TABLE INFO.TARGET
(
  SS_ID    VARCHAR2(5 BYTE),
  SS_NAME  VARCHAR2(72 BYTE),
  MEMO     VARCHAR2(4 BYTE)
)
TABLESPACE USERS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;

DROP TABLE INFO.T2 CASCADE CONSTRAINTS;

CREATE TABLE INFO.T2
(
  SS_ID    VARCHAR2(5 BYTE),
  SS_NAME  VARCHAR2(72 BYTE),
  MEMO     VARCHAR2(4 BYTE)
)
TABLESPACE USERS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;

以上两张表,TARGET是目标表,我们根据T1表里的SS_ID来更新TARGET表里数据。如果SS_ID存在就做UPDATE,反之做INSERT操作。

Merge into target t2
Using t1
On ( t1.ss_id=t2.ss_id)
When matched then
Update
Set t2.memo=t1.memo
When not matched then
Insert
Values(t1.ss_id,t1.ss_nm,t1.memo);

如果用INFORMATICA如何来实现呢,INFORMATICA用一套标准的组件来实现这一功能:

上图组件如下:
1 SOURCE的定义 T1
2 SQOUCE QUALIFER
3 EXPERESSION
4 LOOKUP组件查找目标表TARGET


6 ROUTER组件



7UPDATESTRAGE组件

8目标表TARGET



理一下INFORMATICA的ETL处理过程:
从最新的维度表里读取数据,用EXPERESSION,SOURCEQUALIDFER来规范下维度表的列名及数据,用LOOKUP组件与数据库中的维度表根据SS_ID做比对,如果找到两个ID表为2,找到一个标为1,用ROUTER函数LOOKUPROW的行数来做把结果分为两部分,UPDATE组和INSERT组,   用UPDATESTRAGE来根据对应的组来做UPDATE和INSERT,插入目标表TARGET。

作者: vzyuelei9   发布时间: 2010-12-07

用Router来实现Merge语句?

作者: kelsoncong   发布时间: 2010-12-08

哈哈,居然在这个地方捡到32个PUB币,纪念一下!

作者: kelsoncong   发布时间: 2010-12-08