DataStage系列教程 (Slowly Changing Dimension)缓慢变化维

时间:2015-01-30 15:05:35   收藏:0   阅读:216

BI中维表的增量更新一般有2种:

这两种其实都可以通过sql的left join来实现,不过DataStage给我们提供一个组件,可以很好的实现这个功能,这就是slowly changing dimension。

1 缓慢变化维表示例

如图1所示,是一个常用的缓慢变化维,该表的进数逻辑为:

当记录新插入到改表时,STARTDATE是当前时间,ENDDATE为未来的某个时间或者为空,NOWSTATE为1;当业务数据反生修改时,维表中新增一条记录(与第一次插入时的逻辑一样),同时维表中业务主键(即CODE)相同的那条记录ENDDATE置为当前时间,NOWSTATE置为0。

技术分享

图1 常用缓慢变化维示例

表DDL及说明如下:

CREATE TABLE D_EMPOLYEE
    (
        ID INTEGER PRIMARY KEY, --物理主键,代理键,递增,唯一
        CODE VARCHAR(20), --业务主键
        NAME VARCHAR(20),  --姓名
        PLACE VARCHAR(20),  --地址
        STARTDATE DATE,  --记录有效起始日期
        ENDDATE DATE default 9999-12-31,  --记录有效结束日期
        NOWSTATE CHAR(1)  --记录有效状态。1:有效;0:失效
    );

有同学可能想,为什么要多一个ID列的代理键。这种做法还是有一些好处的:

2 JOB示例

如图2,我们做出来的JOB最终是这个样子。

 

技术分享

图2 JOB示例

大致分为以下几个部分:

3 实现步骤

3.1 业务数据源

实际项目中,这些数据最初来源于业务系统数据。现在我们用一个文件来模拟。文件内容如下:

# cat fact.txt 
code,name,place,salary
e_01,xie,CS,10
e_03,hei,BJ,9

3.2 BI库维表(比对)

从BI库读取维度数据,用于比对。该示例中表结构前文已给出。

3.3 BI库维表(目标)

和比对的维表是同一个表。需要注意2点:

3.4 Slowly Changing Dimension

双击打开组件,在最下边有一个【快速路径】,如图3。一共5步,我们一步一步设置好就可以了。

注意:如果该组件只有一个输出链接的话,步骤将简化为3步。这里我们来讲一下5步的如何配置,3步的都包括在内了。

技术分享技术分享

图3 快速路径

 

3.4.1 选择输出链接

该链接输出后续步骤中选择的需要输出的一些列。3步的为空就行,5步的选择非维表的那个。

技术分享技术分享

图4 步骤1(选择输出链接)

3.4.2 查找键以及列用途设置

把业务键从左侧拖动到右侧键表达式对应位置,完成查找键设置。

列用途常用的分为以下几种:

  • 代理键(Surrogate Key)— 此列是维度表的主键,其中填充代理键的值。
  • 业务键(Business Key)— 此列是维度表所表示的业务对象的标识符,但它不是维度表的主键。此列通常用作查找列,并对应于源数据的某个键或其他一些字段,用于标识相关业务对象。查找的作用是找出与源数据行对应的维度表行。
  • Type 2— 选中此列表示值的更改。如果值发生了变化,则对维度表执行历史跟踪更改。
  • Type 1— 选中此列表示值的更改。如果值发生了变化,则对维度表执行覆盖更改。
  • Current Indicator— 此列的作用相当于一个标记,它指示特定业务键的记录是最新的。
  • Effective Date— 此列用于指定指定某记录在何时成为了最新的记录,也就是成为活动(active)记录。
  • Expiration Date— 此列用于指定记录处于活动状态的结束日期。对于当前活动的记录,该值通常是某个未来的日期,或者为 NULL。
  • SK Chain— 此列用于存储特定业务键历史中的上一条或下一条代理键。
  • (blank) — 此列在 SCD 处理中没有任何作用。在插入新行时,此字段中的数据将被插入到表中,但不会检查此列中的源数据的更改。

技术分享

图5 步骤2(查找键以及列用途设置)

该例中,id为代理键;code为业务主键;name采用Type1更新策略,直接修改;place采用Type2历史跟踪策略,如果修改,则插入新记录。

3.4.3 代理键设置

这里提供了2种方式来生成代理键,分别为文件和数据库。这里只说一种文件的方式,数据库怎么实现,您可以自己实验一下。以后如果写代理键组件的文章,将会详细描述。

#生成键文件
touch /DS/Files/keyfile.dat 

#如果JOB执行时提示权限问题,则修改文件权限。图省事,就777了。
chmod 777  /DS/Files/keyfile.dat

 

技术分享

图6 步骤3(代理键设置)

 
3.4.4 维更新设置

此处的数据流出到BI库维表。业务数据中需要用到的列对应映射到输出。接下来就是几个特殊列的派生值。

技术分享

图7 步骤4(维更新设置)

还需要设置记录失效时,截止日期和当前指示符的值,这里分别填入CurrentDate()和0。

3.4.5 输出映射设置

3步的没有这个步骤。

把需要的列从左边映射到右边输出就好了。

技术分享

图8 步骤5(输出映射设置)

 

4 测试

接下就可以测试该JOB是否按照我们的想法生成数据了。主要应该包括以下情况:

提供一些测试数据:

# cat fact.txt 
code,name,place,salary
e_01,xie,CS,10
e_03,hei,BJ,9

5 附JOB导出文件下载

点击下载:http://files.cnblogs.com/files/BlueBreeze/slowly_changing_dimension.rar

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!