数仓理论SCD(缓慢变化维度)

放肆的年华 提交于 2020-10-07 04:52:13

数仓理论SCD(缓慢变化维度)

SCD(缓慢变化维):就是说 维度表是会发生变化的比如说用户资料表,用户会新增也会被注销(或者不在活跃),行政区划维度表也会发生变化,国家成立了雄安新区保定的行政区划就变了,之所以叫缓慢变化维是因为这些变化是相对"缓慢的"

解决方案:可以使用拉链表

拉链表:

用户id 备注 首次出现日期 更新日期 有效期
011     二狗 2020-05-10 2020-05-10 2020-05-20
011 二狗 2020-05-10 2020-05-20 9999-12-31
022 屠夫 2020-05-11 2020-05-11 9999-12-31

此为一张用户信息的拉链表,

  1. 用户id 用户的主标识
  2. 备注 可以扩展成多个字段根据业务
  3. 首次出现日期,就是第一次注册的时间
  4. 更新日期 用户后续更改了个人信息的日期 这个字段是关键
  5. 有效期 这个也是关键 如果是9999的标识是当前的用户状态有效,
  6. 如果想查询全部用户信息,条件应该是 有效期='9999-12-31'
  7. ,如果想查询2020年5月11日的用户快照,条件应该是  更新日期<='2020-05-11' 有效期>='2020-05-11'

此外拉链表虽然只会新增变化的用户数但是如果用户基数很大,时间一长还是会变得很庞大,而且由于hive不支持update操作,所以要更新这张表,需要采用左连接新数据修改有效期+union新数据的方式,表如果很大每天跟新还是很耗时的,因为左连接的主键是用户id,可以给用户id分桶这样连接操作效率会高一些,此外可以从业务的角度出发分区,比如说根据用户的归属省份分区,这个取决于业务后续如何使用这张维度表

参考连接: https://www.jianshu.com/p/e0a39c90a523

参考连接: https://www.jianshu.com/p/799252156379

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!