缓慢变化维定义 Wikipedia中的定义: Dimension is a term in data management and data warehousing that refers to logical groupings of data such as geographical location, customer information, or product information. Slowly Changing Dimensions (SCD) are dimensions that have data that slowly changes.
维度可以根据变化剧烈程度主要分为无变化维度、缓慢变化维度和剧烈变化维度。例如一个人的相关信息,身份证号、姓名和性别等信息数据属于不变的部分,政治面貌和婚姻状态属于缓慢变化部分,而工作经历、工作单位和培训经历等在某种程度上属于急剧变化字段。
对于剧烈变化维度,通常情况下都是一分为二进行处理的,把其中不常变动的部分单独抽出来作为一个维表,按照缓慢变化维方式进行处理;另外一部分也单独抽取出来,通常作为维度的属性进行处理。
大多数维度表随时间的迁移是缓慢变化的。比如增加了新的产品,或者产品的ID号码修改了,或者产品增加了一个新的属性,此时,维度表就会被修改或者增加新的记录行。这样,在设计维度和使用维度的过程中,就要考虑到缓慢变化维度的处理。
维度的缓慢变化有3种不同情况,其对应的处理方法也有所不同。
1.历史数据需要修改
这种情况主要是发生在业务数据库中的数据出现错误,在分析过程中需要修改。
处理办法是用直接覆盖法,即使用UPDATE方法来修改维度表中的数据。例如商店维度中商店经理是张三,后来错了,需要改写成李四,那么,我们就在ETL处理时,直接修改维度表中原来的商店经理为李四
2.新增数据维度成员改变了属性
若某维度成员新加入了1列,该列在历史数据中不能基于它浏览,而在当前数据和将来数据中可以按照它浏览。此时的解决方法是增加数据行来记录新成员。可以使用存储过程或程序生成新的维度属性,在后续的数据中将基于新的属性进行查看
3.历史数据保留,新增数据也要保留
在这种需求下的解决方法是创建额外字段来记录这些数据之间的关系,例如将该维度打上时间戳,即将历史数据生效的时间段作为它的一个属性,在与原始匹配生成事实表时将按照时间段进行关联,这种方法其最大的优点在数据更改时,不需要创建额外的数据行,也不需要改变维表中的键值结构,因此可以在现有的数据行中查看所有历史纪录。而最大的缺点是由时间点来判断更新的数据很难查询,如果数据经常变化,则此方法并不适合