SCD缓慢变化维、SCD缓慢变化维问题

介绍

缓慢变化维,简称SCD(Slowly Changing Dimensions)

一些维度表的数据不是静态的,而是会 随着时间而缓慢地变化(这里的缓慢是相对事实表而言,事实表数据变化的速度比维度表快)

这种随着时间发生变化的维度称之为缓慢变化维

例子

用户ID 用户名 出生日期 住址
114 张三 1988-09-08 北京市朝阳区

上面用户表的数据,可能会修改,如:将出生日期改成 1992-09-08。此时,用户维度表就发生了变化,就是缓慢变化维。

注意:不能是频繁发生变化、且无对比意义字段,如:dataTime字段,对于原始数据表这个字段是每天都变化的,所以没有对比意义

SCD问题

由于数据会缓慢发生变化,所以要 保留历史数据,这样 可以分析历史变化信息

把处理维度表 数据历史变化 的问题,称为缓慢变化维问题,简称SCD问题

解决方案

保留原始值(不推荐)

始终按照 原始值 进行处理。如:出生日期已经修改了,但始终按照用户第一次填写的数据为准

改写属性值(不推荐)

数据发生变化后,直接更新,用 新值,不保留 原值,因此其始终反映最近的情况。

修改后:

用户ID 用户名 出生日期 住址
114 张三 1992-09-08 北京市朝阳区

缺点: 没有保留历史数据,无法分析历史变化信息

增加维度新列(不推荐)

在表中 增加一个字段,这个字段用来 保存变化后的当前值,而原来的值则被称为变化前的值

修改前:

用户ID 用户名 出生日期 住址
114 张三 1988-09-08 北京市朝阳区

修改后:

用户ID 用户名 出生日期 新出生日期 住址
114 张三 1988-09-08 1992-09-08 北京市朝阳区

添加历史表(不推荐)

新建历史表,来保存历史记录,这种方式就是将历史数据与当前数据完全分开来,在维度中只保存当前最新的数据。

优点:可以同时分析当前及前一次变化的属性值
缺点:只保留了最后一次变化信息并且后期查询时候可能需要关联多张表。

用户维度表:

用户ID 用户名 出生日期 住址
114 张三 1988-09-08 北京市朝阳区

用户维度历史表:

用户ID 用户名 出生日期 住址
114 张三 1988-09-08 北京市朝阳区
114 张三 1992-09-08 北京市朝阳区

拉链表(推荐)

保留历史的数据,并插入新的数据,也就是 拉链表

详见:
https://www.malaoshi.top/show_1IX39k0HHcoX.html

参考:
https://blog.csdn.net/qq_41369191/article/details/105953163


原文出处:/show_1IX4KoTl033x.html