模型|数仓避坑:搞懂维度模型( 二 )


范式模型主要解决数据的插入和更新,维护一致性等问题,维度模型则解决大数据场景分析的问题,这两者也就是所谓的 OLTP 和 OLAP 。
通过一个荒诞的例子来理解两者的区别。
你家是个大家族,七大姑八大姨,平时需要打电话联系。范式建模:每个人只存自己同辈人以及各自子女的联系方式。如果叔叔想找侄子/侄女(你),只能通过你爸爸。维度建模:所有的亲戚联系方式都写到了一个家庭通讯录上,想找人,直接找通讯录。
这个例子现实生活不存在,主要想帮助大家理解两种模型的差异:

  1. 范式模型为了应对数据频繁变更的场景,数据存得零散。为了保证数据的一致性,还要符合一定的规范,我们常见的是三范式(3NF)。
  2. 维度模型会将数据冗余,把一些相关的数据存到一起,方便快速查询取数。
维度模型的出现,就是为了解决大数据量导致的查询慢的问题。
四、维度建模的四大要素数据仓库领域的经典著作《维度建模工具箱》中,Kimball 定义了经典的维度建模的四步曲:选定业务过程、声明粒度、确定维度、构建事实。
1. 业务过程很多数据仓库书籍都给出了业务过程的通用定义:业务过程是企业活动中的事件,如下单、支付、退款都是业务过程,业务过程是一个不可拆分的行为事件。
看完定义,我们就会犯难了,什么是企业活动中的事件?打开手机付款,选择支付宝和微信,这些操作算不算业务过程?
这里,我们真得咬文嚼字,回归场景。交易的场景,有 2 个参与方:消费者和便利店。
便利店作为企业,如果它关心的结果只是消费者买了什么、买了多少,那消费者选择支付方式的事件,它完全不管,也不用记录。
但如果用户只开通了微信支付,没开通支付宝,因为支付问题导致没法成交,那企业肯定也会关心选择支付方式这个事件以及其结果。
业务过程,是不可拆分的事件,而且是基于分析目标进行选定的。
理解一个词,不能脱离情景,多尝试将自己置于企业经营的情景下。
企业里每天都有各种事情,而作为管理者的我们,最核心的关注点是什么?是从收益、成本出发,价值链条上最具影响力的事情或者事件。
2. 粒度理解粒度,其实很简单:干什么样的事情,会新增一条记录。
小乐支付了一笔,系统会新增一条支付记录,当我们要统计分析交易的订单数时,订单是最细的粒度。
而这笔交易中,包含了两个商品,当我们要分析所有订单卖出的商品数,每个商品则变成了最细粒度。
3. 维度维度,就是我们要进行分析的角度。
比如,在便利店场景中,一天的经营结束了,可以按品牌的维度分析,各个品牌的酸奶销售量;可以按日期维度分析,我们可以知道,周一到周日,每天的交易额如何。
某天,当我们发现交易数据发生异常的时候,我们可以按照品牌、日期等维度进行分析,逐个排查,直到找到根本的原因。
4. 事实广义地来说,所有被记录下来的事情,都是事实。
而维度建模中,对事实进行了细分,事实包含 2 类属性:维度、度量。维度就是上文所说的各个角度的数据,而度量,则通常是数值型的。
举个例子,我们描述一个长方形,但是没描述它具体多长、多宽,其他人是没法确定这个长方形具体多大的。
只有补充上它对应的维度和度量,人们才能理解。比如,长 4cm,宽 3cm。
长、宽是维度,4米、3米则是对应维度上的度量。
事实,就是描述客观事物的所有核心信息的所有数据的集合。
五、总结
  1. 模型是映射 “事实” 的东西,构建这个东西的动作就叫做建模。