您的位置:首页 > 其它

缓慢变化维----slowly changing dimension 处理 办法

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

处理缓慢变化维的方法通常分为三种方式。

第一种方式是直接覆盖原值。这样处理,最容易实现,是没有保留历史数据,无法分析历史变化信息。第一种方式通常简称为“TYPE
1”。

第二种方式是添加维度行。这样处理,需要代理键的支持。实现方式是当有维度属性发生变化时,生成一条新的维度记录,主键是新分配的代理键,通过自然键可以和原维度记录保持关联。第二种方式通常简称为“TYPE
2”。

第三种方式是添加属性列。这种处理的实现方式是对于需要分析历史信息的属性添加一列,来记录该属性变化前的值,而本属性字段使用TYPE
1来直接覆盖。这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息。第三种方式通常简称为“TYPE 3”。

在实际建模中,我们可以联合使用三种方式,也可以对一个维度表中的不同属性使用不同的方式,这些,都需要根据实际情况来决定,但目的都是一样的,就是能够支持方便的分析历史变化情况。

上面数据来自于Kimball数据仓库工具书 。

在现实环境中第二种方法是用的最多,在ETL过程中需要循环判断对比维度数值,如果维度栏位非常多的话,花费的时间是非常多的。所以这里我们可以使用check sum的办法。在每次LOAD维度数据之前都存储一个CHECKSUM值,每次只需要对比这个CHECKSUM的值。如果两天的值数据不同,那么在维度表中插入一条新数据,包括数据的生效日期,如果两天的数据相同则不作处理。通过这种办法可以大大的减少系统的处理时间。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: