SCD-缓慢变化维-拉链表

SCD全称:Slowly changing dimension,中译为缓慢变化维度,是数据库(记录系统)和数据仓库(衍生系统)领域的问题,比如商品表中,商品的价格这个维度一般是不会变化,但是可能会竞品的降价而变化,我们称商品价格是缓慢变化维12

下面介绍几个处理缓慢变化维的方式

0-SCD 0(retain original)

无论记录系统中的值如何变化,数据仓库中保留第一次的值

保持原值的原因可能是因为维度的变化,业务逻辑并不关心

1-SCD 1(overwrite)

无论记录系统中的值如何变化,数据仓库中记录系统中最新值

业务逻辑只关注最新的数据,对历史的数据毫无兴趣,比如你有500美元,你希望知道此刻能兑换多少RMB,如果你保存的是汇率列,即便汇率一直在变动,你都只需要保存最新的汇率,因为你只关心当前的价值而不是5天前的价值

2-SCD 2

每当记录系统改变一次,数仓中都会增加一

如果我们想在数仓中保留数据库的当前值和历史值,需要使用到SCD 2,SCD 1和 SCD 2是数据仓库/集市最常见的处理缓慢变化维的方式,如下是SCD 2 的示意图

在这里插入图片描述

3-SCD 3

每当记录系统改变一次,数仓中都会增加一

这种方式会丢失数据(下例中业务库的id=123第三次变化,数仓中丢失历史值prev_offc='Gurgaon'),并且需要为每个缓慢变化维增加一列,不推荐使用

在这里插入图片描述

4-SCD 4

SCD 1 + SCD 2

在这里插入图片描述

关于SCD4的使用场景,举个🌰: 投资银行有很多投资产品被交易,而且这些产品的变动会非常大,比如在使用美元进行Bitcoin交易中,比特币的价格每2分钟会刷新一次,若使用SCD2意味着每两分钟维度表会增加一行,但是在交易的那个时刻你希望使用最新的价格进行分析,同时你希望维护历史值,如此你可以分析2天前买入/卖出和当前买入/卖出之间的价差,如果只是使用SCD2的话,假设有100,0000的产品,每个小时变动10次,那么1个小时SCD2将会有1000,0000行,所以可以分隔为2个表,其中一个表是存储快照,另外一个表存储历史数据,即为SCD1+SCD2

5-SCD 6

SCD1 + SCD2 + SCD3

在这里插入图片描述

最常用的是SCD1、SCD2,SCD4也会使用,SCD0,SCD3,SCD6用的很少

6-zipper table

下例中是使用SCD2制作拉链表的过程

在这里插入图片描述

以上就是关于数据仓库缓慢变化维的描述,欢迎吐槽,欢迎关注公众号 :stackoverflow

🔞Reference


  1. wiki addr https://en.wikipedia.org/wiki/Slowly_changing_dimension ↩︎

  2. YouTube tutorial https://www.youtube.com/watch?v=XqdZF0DJpUs ↩︎

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值