ETL中缓慢变化维度的处理方式
?
ETL中缓慢变化维度的处理方式
?
缓慢变化维处理系统(Slowly Changing Dimension Processor,SCD)
主要功能是处理维度表的属性随时间变化的情况,处理方式为:类型1(直接覆盖),类型2(生成新行),类型3(添加新列)。
迟到维度处理系统(Late Arriving Dimension Handler)
主要功能是当维度数据的变化情况到达数据准备区的时间晚于对应的事实数据时,对维度数据的插入和更新策略。
缓慢变化维(Slowly Changing Dimensions、SCD)。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。
处理缓慢变化维的方法通常分为三种方式。
1.第一种方式是直接覆盖原值。这样处理,最容易实现,但是没有保留历史数据,无法分析历史变化信息。第一种方式通常简称为“TYPE 1”。
?
? ? 例如:? ? 更新前:? ? emp_rid(代理键) ?emp_id(自然键) ? emp_name ? ? position? ? 101212 ? ? ? ? ? 12345 ? ? ? ? ? ?Jack ? ? ? ? Developer?? ? 更新后:? ? emp_rid(代理键) ?emp_id(自然键) ? emp_name ? ? position? ? 101212 ? ? ? ? ? 12345 ? ? ? ? ? ?Jack ? ? ? ? Manager?
2.第二种方式是添加维度行。这样处理,需要代理键的支持。实现方式是当有维度属性发生变化时,生成一条新的维度记录,主键是新分配的代理键,通过自然键可以和原维度记录保持关联。第二种方式通常简称为“TYPE 2”。
?
? ?例如:? ? 更新前:? ? 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 ? ??
3.第三种方式是添加属性列。这种处理的实现方式是对于需要分析历史信息的属性添加一列,来记录该属性变化前的值,而本属性字段使用TYPE 1来直接覆盖。这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息。第三种方式通常简称为“TYPE 3”。
? ?例如:? ? 更新前:? ? 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在实际建模中,我们可以联合使用三种方式,也可以对一个维度表中的不同属性使用不同的方式,这些,都需要根据实际情况来决定,但目的都是一样的,就是能够支持方便的分析历史变化情况。
?