数仓避坑:搞懂维度模型
编辑导语:数据仓库有助于建立数据集合,进而支撑企业更好地做出决策支持,推动后续业务的进行。那么,构建数据仓库的过程中需要注意什么问题?本篇文章里,作者总结、分享了数仓建模中的维度问题,一起来看一下。
前言
这个系列将从小白视角讲述构建数据仓库过程所需的知识和问题,主要受众是数据中台产品、数据开发、数据分析人员。
引入
在大学就听说过数据仓库,但是当时被书的厚度劝退。后来工作中要做数据仓库,这次不得不咬牙重新翻开那些经典大头书。
一开始,我想赶紧落地,快速过了一遍概念性的东西,业务过程、粒度、维度、事实、度量等等。做到中途发现,各种基础抽象概念没搞清,竞品的某些功能我都看不懂。
正所谓欲速则不达,这些底层的知识,是数据类不变的产品的内核,搞懂了这些,才能跑得快、跑得稳、跑得远。
一、什么是模型,什么是建模
什么是模型?作为数据行业从业者,如果你从来没有思考过这个问题,你一定要看下去。
先看一个例子:2021年 3 月 6 日,小明到楼下【行家】便利店买吃的,来来回回逛了几圈,虽然很饿,但又想减肥,最终拿了 1 个【柯德吉】人造肉汉堡。
准备付账的时候,收银员跟他说,最近搞活动,加 4 块可以选一瓶原价 8 块的【卡石】酸奶。小明觉得很划算,于是去拿了酸奶,一共付了 12 块。
上面的这段文字,就是模型。
作为计算机专业的学生,第一次看到别人给我解释这个模型的时候,我第一反应是What?这不就是一段文字嘛?都没数据库,都不是表单,这能算模型?
别急,先看看百度百科给出的模型定义。
模型,是指通过主观意识借助实体或者虚拟表现构成客观阐述形态结构的一种表达目的的物件(物件并不等于物体,不局限于实体与虚拟)。
简单来说,模型是映射 “事实” 的东西,构建这个东西的动作就叫做建模。
其实,如果我们学了数据库,且没认真读教科书,很容易狭隘地只从数据库、数据结构的层面去理解模型。
上述的例子,是一种“文字模型”。而且,这个模型还可以补充更多细节,比如,采用什么方式付款、支付了多少钱。
为了表达更加简洁,我们可以省略更多的信息,只记录关键信息:“ 2021年 3 月 6 日,小明买了,一个 柯德吉牌人造肉汉堡,一瓶卡石牌酸奶(共计 ¥12)”。
如果用 Excel,我们可以更加简洁(节省空间你懂的):
二、范式模型,为了更好地记录和更新
计算机的出现,也诞生了新的语言,我们也顺理成章地开始用新语言去建模。
这里,我省去长篇的对关系模型、范式模型的介绍,直接跳到应用场景,假设这个便利店用了现成的 ERP、CRM 系统,这些系统设计好了模型,数据会填充成如下的样子。
1. 订单表
2. 订单详情表
3. 商品详情表
数据量不大,分析人员写 SQL 直接对范式模型进行查询,算账分析无所不能,小几十万数据,速度完全 OK。
三、维度模型,为分析而生
范式模型很好地解决了快速记录和节约存储空间。
但事物都有两面性,当数据量大的时候,从范式模型中查询取数,就比较慢了。但数据量一大,就顶不住了。
人类社会,但凡出现问题,总会天降猛士。Innon 和 Kimball 等人提出来新方案:为数据分析设计一套新模型。
范式模型主要解决数据的插入和更新,维护一致性等问题,维度模型则解决大数据场景分析的问题,这两者也就是所谓的 OLTP 和 OLAP 。
通过一个荒诞的例子来理解两者的区别。
你家是个大家族,七大姑八大姨,平时需要打电话联系。范式建模:每个人只存自己同辈人以及各自子女的联系方式。如果叔叔想找侄子/侄女(你),只能通过你爸爸。维度建模:所有的亲戚联系方式都写到了一个家庭通讯录上,想找人,直接找通讯录。
这个例子现实生活不存在,主要想帮助大家理解两种模型的差异:
- 范式模型为了应对数据频繁变更的场景,数据存得零散。为了保证数据的一致性,还要符合一定的规范,我们常见的是三范式(3NF)。
- 维度模型会将数据冗余,把一些相关的数据存到一起,方便快速查询取数。
维度模型的出现,就是为了解决大数据量导致的查询慢的问题。
四、维度建模的四大要素
数据仓库领域的经典著作《维度建模工具箱》中,Kimball 定义了经典的维度建模的四步曲:选定业务过程、声明粒度、确定维度、构建事实。
1. 业务过程
很多数据仓库书籍都给出了业务过程的通用定义:业务过程是企业活动中的事件,如下单、支付、退款都是业务过程,业务过程是一个不可拆分的行为事件。
看完定义,我们就会犯难了,什么是企业活动中的事件?打开手机付款,选择支付宝和微信,这些操作算不算业务过程?
这里,我们真得咬文嚼字,回归场景。交易的场景,有 2 个参与方:消费者和便利店。
便利店作为企业,如果它关心的结果只是消费者买了什么、买了多少,那消费者选择支付方式的事件,它完全不管,也不用记录。
但如果用户只开通了微信支付,没开通支付宝,因为支付问题导致没法成交,那企业肯定也会关心选择支付方式这个事件以及其结果。
业务过程,是不可拆分的事件,而且是基于分析目标进行选定的。
理解一个词,不能脱离情景,多尝试将自己置于企业经营的情景下。
企业里每天都有各种事情,而作为管理者的我们,最核心的关注点是什么?是从收益、成本出发,价值链条上最具影响力的事情或者事件。
2. 粒度
理解粒度,其实很简单:干什么样的事情,会新增一条记录。
小乐支付了一笔,系统会新增一条支付记录,当我们要统计分析交易的订单数时,订单是最细的粒度。
而这笔交易中,包含了两个商品,当我们要分析所有订单卖出的商品数,每个商品则变成了最细粒度。
3. 维度
维度,就是我们要进行分析的角度。
比如,在便利店场景中,一天的经营结束了,可以按品牌的维度分析,各个品牌的酸奶销售量;可以按日期维度分析,我们可以知道,周一到周日,每天的交易额如何。
某天,当我们发现交易数据发生异常的时候,我们可以按照品牌、日期等维度进行分析,逐个排查,直到找到根本的原因。
4. 事实
广义地来说,所有被记录下来的事情,都是事实。
而维度建模中,对事实进行了细分,事实包含 2 类属性:维度、度量。维度就是上文所说的各个角度的数据,而度量,则通常是数值型的。
举个例子,我们描述一个长方形,但是没描述它具体多长、多宽,其他人是没法确定这个长方形具体多大的。
只有补充上它对应的维度和度量,人们才能理解。比如,长 4cm,宽 3cm。
长、宽是维度,4米、3米则是对应维度上的度量。
事实,就是描述客观事物的所有核心信息的所有数据的集合。
五、总结
- 模型是映射 “事实” 的东西,构建这个东西的动作就叫做建模。
- 范式模型很好地解决了快速记录和节约存储空间的问题。
- 维度模型是一种用于大数据量场景下实现快速分析的模型。
- 维度建模有四大要素:业务过程、粒度、维度、事实。
数据分析,本质还是利用数据去分析客观的规律,利用这些规律,进而进行经营战略、营销策略上的调整,以应对市场的变化。
用好维度建模,从数据中发现规律和秘密,更好地帮助企业提高效率和效益。
下期文章我们继续聊数仓,带你细品粒度~
作者:lee;公众号:乐说乐言
本文由 @lee 原创发布于人人都是产品经理,未经许可,禁止转载
题图来自 Unsplash,基于 CC0 协议
OLTP和OLAP理解的不是很清楚,OLTP是联机事件处理过程,主事件处理,对用户操作迅速响应,产生数据,且数据总是在最新,数据量级小,OLAP是联机分析处理过程,面向分析决策人员,数据量级大,主查询。
感谢老哥指教。
我想表达的是,不同情况的模型选择不同。
OLTP,为了数据快速更新,多数情况参考范式建模(不过多数情况也不满足3NF)。OLAP,面向数据分析,没错,多数是维度建模(至少《大数据之路》那本书里介绍阿里也是用的维度模型)