粤磊 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。
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