1.缓慢变化维介绍
维度建模的数据仓库中,有一个概念叫Slowly Changing Dimensions,中文一般翻译成“缓慢变化维”,经常被简写为SCD。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。
Wikipedia中的定义:
Dimension is a termin data management and data warehousing that refers to logical groupings ofdata such as geographical location, customer information, or productinformation.
Slowly ChangingDimensions (SCD) are dimensions that have data that slowly changes.
大意是说数据会发生缓慢变化的维度就叫”缓慢变化维”。
实例说明:
人寿保险客户,有一个属性是所在城市(09年,北京),后来城市变了(10年,上海),但是统计09年销量的时候,需要把A的算在北京,而不是上海,所以要保存原来的记录
买家这个维度就属于缓慢变化的。
2.常见的几种解决方案
1).全覆盖,保持最新数据(keep mostrecent values in target)
即直接在原来维度的基础上进行更新,不会产生新的记录:
更新前:
emp_rid(代理键) emp_id(自然键) emp_name position
101212 12345 Jack Developer
更新后:
emp_rid(代理键) emp_id(自然键) emp_name position
101212 12345 Jack Manager
2).全历史记录(keep a fullhistory of changes in the target)。保存多条记录,通过字段加以区分,使其可以追溯所有的历史记录
更新前:
emp_rid(代理键) emp_id(自然键) emp_name position start_date end_date
101212 12345 Jack Developer 2010-2-5 2012-6-12
更新后:
emp_rid(代理键) emp_id(自然键) emp_name position start_date end_date
201245 12345 Jack Manager 2012-6-12 2013-6-01
一般情况下,添加开始日期、结束日期或者添加标志字段,记录其是否有效
3).记录最新纪录及上一次历史(keep thecurrent and previous values in the target)
直接在原来维度的基础上进行更新,不会产生新的记录但是只会记录上一次的历史记录。
更新前:
emp_rid(代理键) emp_id(自然键) emp_name position old_position
101212 12345 Jack Developer null
更新后:
emp_rid(代理键) emp_id(自然键) emp_name position old_position
101212 12345 Jack Manager Developer
3.每种方式的优缺点
第一种方式优缺点:这样处理,最容易实现,但是没有保留历史数据,无法分析历史变化信息。
第二种方式优缺点:对于比较重要的信息,运用此方式还是很合适的,可以很好地保留历史痕迹。对于不是很重要甚至可以忽略的历史变化,运用此方法很累赘。
第三种方式优缺点:优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息