大数据之数仓建模

两种常见的数仓设计

  • 三范式建模

    尽量减少数据冗余,以关联的形式去关联数据

    优点:空间占用小,数据冗余少

    缺点:查询要用很多的JOIN

  • 维度建模

    不在意数据冗余,尽量为了维度而服务

    优点:查询的时候不需要多数的JOIN

    缺点:数据占用空间大

对于现代的企业来说,空间换性能,是划算的。因为硬盘便宜(相对)。

维度建模的概念

维度建模是围绕着事实表和维度表两个核心点来进行的

事实表

事实:就是事件的意思。表示的是系统中一个真实产生的事件信息。

举例:JD用户下单,就是一个事件会产生一个下单的事件信息(事实信息)

在线教育,用户报名学习,这就是一个事件,也就是一个事实信息(一条数据)

事实表,就是记录了一个个的事实(事件)信息的表

常见的事实表:

  • 电商系统中的,订单表
  • 在线教育中的,用户访问记录表、用户报名学习记录表
  • 车联网系统中的,车辆信息上报表数据

事实表有时候也称之为流水表

事实表的小分类
  • 事务事实表

    又称之为原子事实表,记录了事实的原子性事件隔离

    一个事件是一条数据

    10001 1 12 已支付 2020-01-01 10:00:00
    10001 1 12 以发货 2020-01-01 10:00:05
    10001 1 12 已收货 2020-01-03 10:05:00
    10001 1 12 已完成 2020-01-03 10:10:00
    

    现在数仓开发中经常使用的模式

  • 周期快照事实表(Periodicsnapshot fact table)

    按照周期对事实进行聚合,得到某个方向的聚合结果

    比如:订单事实表可以按照月聚合,得到每个月的订单量、订单金额、售卖商品数量等信息

    一批数据到一条数据的转变

  • 累积快照事实表

    记录了事件的全生命周期中的所有状态节点的汇总

    订单id 用户id 金额 是否支付 支付时间    是否发货 发货时间  是否收货  收货时间 是否完成 完成时间
    10001  1      12   y      10:00:00    y        10:00:05 Y        xxx     Y       xxx
    

    累计快照事实表是为数不多的在数仓设计中会使用UPDATE语句的设计

    这种设计用的不多了(老年代有)(现代数仓中很少用了)

维度表

维度表:记录的是一个事件或者实体的各个维度上的信息

特性:维度表中的每个列都可以作为一个维度去分析事实表的数据

维度表有时候也称之为字典表

维度表的小分类
  • 高基维度:体量大,数据量比较多的维度表
  • 低基维度:体量很小,数据量也很少,数据增长在可见的未来也不会怎么增长的表

基于事实表和维度表的关联,我们可以从多个维度上去分析事实表中的数据

在数据量上,事实表是巨大的,维度表是相对事实表较少。

流水表

车辆id速度时间GPS油门深度方向机油温度型号品牌车主
100011002020-01-01 10:00:001000,30030n50半挂沃尔沃王大锤
10002110xxx123,32150s90
10003300xxx312,12360w100
100011102020-01-01 10:00:301000,300.560e60厢式货车东风王大锤
。。。。。。。。。。。。。。。。。。。。。

字典表

车辆id型号品牌车主手机登记城市类型废除日期
10001厢式货车东风王大锤10000000上海前4后8NULL
10001半挂沃尔沃王大锤10000000上海半挂2020-12-10 12:00:00
10002厢式货车红旗大力121231321广州前4后8
10003厢式货车东风王晓瑞13121535深圳前4后8

宽表

宽表就是事实表和维度表的集合

优点:

  1. 维度的更新,会在宽表里面跟随事实数据绑定(维度的更新,在宽表中是一种历史记录)
  2. 字段够多,查询无需JOIN

缺点:

  1. 数据量大(冗余多)

宽表在企业中应用是很广泛的。

因为,使用起来很简单,唯一的复杂点或者说性能点,在于数据写入的过程中要和很多维度表进行关联。

但是在使用的过程中是很爽的。

两种常见的数仓建模方式

  • 星型模型
  • 雪花模型

星型模型

以一个事实表为中心,围绕着多个维度表

image-20201222111820018

雪花模型

一个事实围绕着多个维度层级的维度或者一个维度需要另外的维度中转才能连接到事实表

就像雪花一样开枝散叶

image-20201222111947845

SCD渐变维

SCD渐变维也称之为拉链表

也叫缓慢渐变维

  • SCD1

    覆盖,不管老的内容,直接更新维度表

    这种模式用的人不会很多

  • SCD2

    记录全量历史变更

    image-20201222112851152

    使用的最广泛的模式

  • SCD3

    记录少量历史信息(比如上一次)

image-20201222113354955
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值