【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
摘要:本文首先介绍了缓慢变化维的定义、三种处理方式。之后以员工维表数据为例,详细说明如何使用BO DI实现SCD2维表的ETL。最后讲解了SCD2维表如何使用。
1 缓慢变化维简介
某些维度的属性会随着时间缓慢变化,这种维度被称为缓慢变化维(Slowly Changing Dimension,SCD)。举个例子,跨国企业的员工可能会在不同区域间调动工作,但两次调动之间的时间间隔不会太短,因此员工的所属区域属性在缓慢变化,员工维是一个缓慢变化维。
在数据仓库中缓慢变化维如何建模,如何ETL呢?下面就以员工维表为例介绍三种常用的SCD处理方式。
1.1 SCD1:更新旧数据
SCD1 方式直接修改维度记录的属性值,维度属性表示员工当前状态。
假设企业内每个员工都隶属于某个地区,张三原属于亚洲地区。员工维表最初存储的数据如下表:
EMP_ID / 代理键 |
EMP_CODE / 员工代码 |
EMP_NAME / 员工姓名 |
REGION / 所属地区 |
1 |
A001 |
张三 |
Asia |
其中EMP_ID 是员工维表的主键,用于和事实表关联;EMP_CODE是员工代码,唯一地标识每位员工;REGION即员工所属地区。
现在因业务需要,张三被派驻到非洲地区了。在SCD1方式中,将张三的地区属性直接更新为"Africa",其余字段不变,事实表所引用的EMP_ID也无需变化。下表为员工维表修改后的情况,只有张三的所属地区属性被更新,维度记录表示张三当前的状态。
EMP_ID / 代理键 |
EMP_CODE / 员工代码 |
EMP_NAME / 员工姓名 |
REGION / 所属地区 |
1 |
A001 |
张三 |
Africa |
SCD1是处理缓慢变化维最简单的方法,只有维表的属性字段需要修改,事实表数据不受影响。SCD1的缺点在于丢失了维度属性的历史数据;此外与变化属性有关的汇总数据必须重新计算,否则汇总与明细数据将无法对应。
维度属性的缓慢变化是否需要在数据仓库中体现是根据分析需求而定的。这类需求在调研阶段很容易被业务用户忽略,因此建模人员应检查每个维度属性是否有变化的可能,以及是否有分析历史信息的需要。不要想当然地把SCD1作为默认的维度处理方法。
1.2 SCD2:增加新记录
SCD2方式使用新记录存储更新的维度信息,能够保存维度历史信息,因此是最主要的缓慢变化维处理方式。
我们继续使用在区域间调动工作的例子。张三于2007年5月从亚洲调动到非洲后,使用SCD2方式存储的维表如下所示:
EMP_ID / 代理键 |
EMP_CODE / 员工代码 |
EMP_NAME / 员工姓名 |
REGION / 所属地区 |
1 |
A001 |
张三 |
Asia |
2 |
A001 |
张三 |
Africa |
张三原有记录不变,增加一条新记录作为张三最新的信息。新记录的所属地区字段值为"Africa",新记录的EMP_ID字段值是自动生成的代理键。事实表中张三2007年5月之前的事实数据使用旧EMP_ID(1),2007年5月之后的事实数据使用新记录的EMP_ID(2)。
SCD2方式实际上存储了同一员工在不同时间的多个版本的信息,自动生成的EMP_ID可以唯一地标识不同版本,而逻辑上唯一的EMP_CODE显示了同一员工不同版本信息间的联系。
需要注意的是,SCD2维表与事实表关联时无需附加任何日期时间条件,因为在抽取事实数据时就已经选择了与事实数据时间相匹配的维度EMP_ID。在SCD2维表中可以加入"信息生效时间戳"和"信息失效时间戳"两个字段,通过这两个字段就可以还原出任意时间点员工信息的快照。在SCD2维表中还可以加入"当前有效信息标志",便于查询出最新版本的维度信息。
1.3 SCD3:增加新数据列
SCD3方式使用新数据列存储更新的维度信息,能够保存有限的维度历史信息。
仍旧用张三调动所属区域的例子,使用SCD3方式存储的维表如下所示:
EMP_ID / 代理键 |
EMP_CODE / 员工代码 |
EMP_NAME / 员工姓名 |
REGION / 所属地区 |
REGION_PRIOR / 之前的所属地区 |
1 |
A001 |
张三 |
Africa |
Asia |
员工维表增加了一列REGION_PRIOR,此列存储张三的旧所属地区属性"Asia",而REGION字段则存储新所属地区属性"Africa"。
有些分析要求同时按维度的新旧属性查看事实数据。比较常见的例子是销售区域划分发生变化后,分析人员希望既能按划分后的区域查看事实数据,也能按划分前的区域查看。只有SCD3能满足此类需求。
1.4 小结
以上是对三种SCD方式的介绍。这三种方式的出场顺序没有任何含义,不代表谁好谁差。三种方式各有优劣,开发者应该根据数据的特点、分析的要求来选择。
以上述三种SCD方式为基础,还可以形成多种混合SCD方法,使维度数据满足更特殊的分析要求。本文不详细介绍了,深入了解可以参考《Data warehouse toolkit》,p102-105,Hybrid Slowly Changing Dimension Techniques。
来源:oschina
链接:https://my.oschina.net/u/943418/blog/221557