Datastage 实现缓慢变化维实例

浏览: 3646

前言:

本文主要讲解用Datastage 实现缓慢变化维具体步骤,以(Type 2 SCD 保存多条记录,增加时间戳或有效标示区分)为实现目标,至于缓慢变化维理论以及代理键好处都不一一列举。理论部分推荐以下博客去了解:

缓慢变化维完全解决方案

缓慢变化维的处理

环境信息:

版本:IBM InfoSphere DataStage V11.3.1

操作系统:linux redhat 6.4

概念:

缓慢变化维定义

  Dimension is a term in data management and data warehousing thatrefers to logical groupings of data such as geographical location,customer information, or product information.

  Slowly Changing Dimensions (SCD) are dimensions that have datathat slowly changes.

百度百科中是这样定义的:在维度建模的数据仓库中,有一个概念叫Slowly ChangingDimensions,中文一般翻译成“缓慢变化维”,经常被简写为SCD。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题

数据仓库中缓慢变化维三种类型:


Type 1 SCD :新数据覆盖旧数据

Type 2 SCD :保存多条记录,增加时间戳或有效标示区分

Type 3 SCD :它只能保存两次变化记录.适用于变化不超过两次的维度。

实现内容:

以客户维表为例:当客户所属单位名称发生变更时候,我们对客户维表的记录。及保留历史数据,并要求对时间戳和有效标示做处理。

设计思路:

1.利用Change Capture 控件对数据源和已经生成的维表DM_PBI_CUSTOMER_D 做对比,利用字段Changecode,分别获取新增,更新,删除动作的数据。

Changecode用以表示数据变化的情况(0:Copy 1:Insert 2:Delete 3:Edit)。

2.利用Transformer Stage控件将对应的数据进行分流,并在对应的 Oracle_Connector 做相应的操作。

3:注意:

其中利用Copy控件获取的源数据和LookUp更新的数据 通过主键获取对应的代理键   更新相应的标示,同时对新更新的数据进行插入。

4:在控件中增加代码:采用 ORCHESTRATE.parameter_name即绑定变量参数。

具体实现:

自定义SQL:

本案例采用缓慢变化     Type 2 SCD    其中字段含义如下:其中生效日期默认为 系统Sysdate  失效日期默认为 9999-12-31 其中代理键为CUSTOMER_KEY,数据由序列号生成。

Clipboard Image.png


其中如果源库发生删除数据则需要对目标表DM_PBI_CUSTOMER_D 做对应更新删除标示,更新有效标示和失效日期等动作。

UPDATE DM_PBI_CUSTOMER_D D
SET DEL_FLAG = 'Y',
END_DATE = SYSDATE ,
D.VALID_FLAG = 0 ,
D.LAST_UPDATE_DATE=ORCHESTRATE.LAST_UPDATE_DATE
WHERE D.CUSTOMER_ID = ORCHESTRATE.CUSTOMER_ID

对新录入的数据进行插入:

INSERT INTO DM_PBI_CUSTOMER_D
(CUSTOMER_KEY,
CUSTOMER_ID,
CUSTOMER_NAME,
BENIFITERTYPE,
ORG_CODE,
AREA_NAME,
AREA_LEVEL,
FINANCING_COST,
ISPLATFORM,
CARDTYPE,
CARDNO,
TELEPHONE,
FAX,
ELECTRONIC_MAIL,
POSTCODE,
ADDRESSCONTENT,
START_DATE,
END_DATE,
VALID_FLAG,
DEL_FLAG,
LAST_UPDATE_DATE)
VALUES
(DIM_CUSTOMER_S.NEXTVAL,
ORCHESTRATE.CUSTOMER_ID,
ORCHESTRATE.CUSTOMER_NAME,
ORCHESTRATE.BENIFITERTYPE,
ORCHESTRATE.ORG_CODE,
ORCHESTRATE.AREA_NAME,
ORCHESTRATE.AREA_LEVEL,
ORCHESTRATE.FINANCING_COST,
ORCHESTRATE.ISPLATFORM,
ORCHESTRATE.CARDTYPE,
ORCHESTRATE.CARDNO,
ORCHESTRATE.TELEPHONE,
ORCHESTRATE.FAX,
ORCHESTRATE.ELECTRONIC_MAIL,
ORCHESTRATE.POSTCODE,
ORCHESTRATE.ADDRESSCONTENT,
ORCHESTRATE.START_DATE,
ORCHESTRATE.END_DATE,
ORCHESTRATE.VALID_FLAG,
ORCHESTRATE.DEL_FLAG,
ORCHESTRATE.LAST_UPDATE_DATE);

对更新的数据,同时实现对表已有数据进行更新对更新数据进行加载

begin 
UPDATE DM_PBI_CUSTOMER_D D
SET VALID_FLAG = 0,
END_DATE = SYSDATE,
D.LAST_UPDATE_DATE = ORCHESTRATE.LAST_UPDATE_DATE
WHERE D.CUSTOMER_KEY = ORCHESTRATE.CUSTOMER_KEY;


INSERT INTO DM_PBI_CUSTOMER_D
(CUSTOMER_KEY,
CUSTOMER_ID,
CUSTOMER_NAME,
BENIFITERTYPE,
ORG_CODE,
AREA_NAME,
AREA_LEVEL,
FINANCING_COST,
ISPLATFORM,
CARDTYPE,
CARDNO,
TELEPHONE,
FAX,
ELECTRONIC_MAIL,
POSTCODE,
ADDRESSCONTENT,
START_DATE,
END_DATE,
VALID_FLAG,
DEL_FLAG,
LAST_UPDATE_DATE)
VALUES
(DIM_CUSTOMER_S.NEXTVAL,
ORCHESTRATE.CUSTOMER_ID,
ORCHESTRATE.CUSTOMER_NAME,
ORCHESTRATE.BENIFITERTYPE,
ORCHESTRATE.ORG_CODE,
ORCHESTRATE.AREA_NAME,
ORCHESTRATE.AREA_LEVEL,
ORCHESTRATE.FINANCING_COST,
ORCHESTRATE.ISPLATFORM,
ORCHESTRATE.CARDTYPE,
ORCHESTRATE.CARDNO,
ORCHESTRATE.TELEPHONE,
ORCHESTRATE.FAX,
ORCHESTRATE.ELECTRONIC_MAIL,
ORCHESTRATE.POSTCODE,
ORCHESTRATE.ADDRESSCONTENT,
ORCHESTRATE.START_DATE,
to_date('9999-12-31','yyyy-mm-dd'),
ORCHESTRATE.VALID_FLAG,
ORCHESTRATE.DEL_FLAG,
ORCHESTRATE.LAST_UPDATE_DATE);
end;

控件设置:

a)Change Capture 设置如下:

Explicit Keys , All Values:用户显示定义KeyAfter中其余所有字段为Value,除了用户显示排除的字段。

Clipboard Image.png


b)Transformer Stage 设置如下:利用Transformer Stage控件将对应的数据进行分流,并把更新相应的时间戳已经标示

Clipboard Image.png

c)其中利用Copy控件获取的源数据和LookUp更新的数据通过主键获取对应的代理键更新相应的标示,同时对新更新的数据进行插入。

Clipboard Image.png

实现效果:

源数据:

Clipboard Image.png

如果字段 将客户名称 招商银行股份有限公司-SJM 更改成 招商银行股份有限公司 如下:

最终记录值:

Clipboard Image.png

推荐 2
本文由 我是最优雅的杀手,不杀人专杀狗 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

谢谢,非常实用
理论(http://www.flybi.net/blog/biwork/974)与实践(本文)相结合。

要回复文章请先登录注册