复合主键做历史拉链表

分享技巧之前,先普及两个概念:
1)什么是维度?
维度是维度建模的基础和灵魂。在维度建模中,讲度量称为“事实”,将环境描述为“维度”,维度是用于分析事实所需要的多样环境。例如,在分析新增过程中,可以通过平台、手机厂商、版本号等维度描述用户的属性。
维度所包含的标识维度的列成为维度属性。维度属性是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。例如,在sql查询中,获取连信有头像和风控合法用户,是通过约束用户头像状态属性和风控级别属性来实现的;统计连信不同手机厂商的每日新增用户数,是通过用户手机厂商维度属性进行分组汇总;所以维度的作用一般是查询约束,分类汇总以及排序等。
2)缓慢变化维度
缓慢变化维度,英文叫Slowly Changing Dimensions,下文简称SCD。
数据仓库的重要特点之一是反映数据历史变化,所以如何处理维度的变化是维度设计的重要工作之一。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化。与数据增长较为快速的事实表相比,维度变化相对缓慢。

正文开始,分享一下我对历史拉链表的理解。
历史拉链表是数据仓库中常用的一种表结构,用于存储动态的维度属性,处理方式是通过新增两个时间戳字段(start_dt和end_dt),将所有以天为粒度的变更数据都记录下来。通常分区字段也是时间戳字段。
例如,用一张表记录用户使用连信时候的手机厂商。2018年1月1日,用户01通过华为手机使用连信,用户B通过oppo手机使用连信,数据存入相应分区。2018年1月3日,用户01通过小米手机使用连信,用户02通过oppo手机使用连信,数据存储如下:

user_id manufacturer pt
01 HUAWEI 20180101
02 OPPO 20180101
01 XIAOMI 20180103
02 OPPO 20180103

如果使用传统的历史拉链表,数据存储记录如下表,其中对于重复的记录不再重复存储。使用历史拉链表后,数据存储如下:

</
user_id manufacturer start_dt end_dt
01 HUAWEI 20180101 20180103
02 OPPO 20180101 99991231
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值