缓慢变更维度(Slowly Change Dimensions )是基于维度建模的多维数据仓库的基础。当维度表的信息发生变化时,如何更新就成为一个问题。根据Kimball的经典著作,主要有3种方法来处理。
Type 1:覆盖:直接用新值代替旧值。
Type 2:增加新行。将当前行的状态设置为off,并设置一个endtime时间戳,将当前时间标记上。
同时新增1行,将其状态标记为on,设置begintime时间戳为上一个记录的endtime+1。
Type 3:增加新列:给表增加一个新列,来存储新值,同时保留原来的值不变。
除了上述的经典做法外,还可以通过数据分离的方式进行设计。
方式1:动静分离。新增一个维度表。将经常变化的维度从主维表分离出来,单独保存。
方式2:时间拉链。将每次的变化都保存到历史表中,并且保存这个变化的类型以及变化时间。