数仓理论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 |
此为一张用户信息的拉链表,
- 用户id 用户的主标识
- 备注 可以扩展成多个字段根据业务
- 首次出现日期,就是第一次注册的时间
- 更新日期 用户后续更改了个人信息的日期 这个字段是关键
- 有效期 这个也是关键 如果是9999的标识是当前的用户状态有效,
- 如果想查询全部用户信息,条件应该是 有效期='9999-12-31'
- ,如果想查询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
来源:oschina
链接:https://my.oschina.net/u/2969788/blog/4288538