前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解维度建模

详解维度建模

作者头像
木东居士
发布于 2018-05-25 07:28:20
发布于 2018-05-25 07:28:20
8.6K3
举报

0x00 前言

前一篇已经对常用的几种数据模型做了简单的介绍,本篇主要对其中最常用的维度建模做一个深入的理解。

0x01 什么是维度建模

维度模型是数据仓库领域另一位大师 Ralph Kimball 所倡导,他的《The DataWarehouse Toolkit-The Complete Guide to Dimensona Modeling,中文名《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。

按照书中所讲,维度建模并不要求维度模型必须满足第3范式。数据库中强调的 3NF 主要是为了消除冗余。规范化的 3NF 将数据划分为多个不同的实体,每个实体构成一个关系表。比如说订单数据库,开始可能是每个订单中的一行表示一条记录,到后来为了满足 3NF会变成蜘蛛网状图,也许会包含上百个规范化表。而且对于 BI 查询来讲,规范化模型太复杂,用户会难以理解和记录这些模型的使用。 而维度建模解决了模式过分复杂的问题。

我们换一种方式来解释什么是维度建模。学过数据库的童鞋应该都知道星型模型,星型模型在数据仓库的设计中可以为是一种典型的维度模型。我们在进行维度建模的时候会建一张事实表,这个事实表就是星型模型的中心,然后会有一堆维度表,这些维度表就是向外发散的星星。那么什么是事实表、什么又是维度表吗,下面会专门来解释。

0x02 基本概念

维度建模中有一些比较重要的概念,理解了这些概念,基本也就理解了什么是维度建模。

为了便于理解,我们先假设一个业务场景:聊天! 比如短信聊天、软件聊天这些聊天场景。 下图是在聊天场景中我们设计的一个简单的星型模型,里面有三个最常用到的概念:事实表、维度表和度量值。

1. 事实表

发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中。从最低的粒度级别来看,事实表行对应一个度量事件,反之亦然。

额,看了这一句,其实是不太容易理解到底什么是事实表的。书中就是这么写的,刚入门的时候看的时候一脸懵逼。

回到前面的图,最中间那个chat表就是一个事实表,你可以理解他就是在现实中发生的一次操作型事件,我们每次给一个小伙伴发一条信息,就相当于是一个事实,它在表中的体现就是一条记录。

我们可以回过头再看一下事实表的特征,在维度表里没有存放实际的内容,他是一堆主键的集合,这些ID分别能对应到维度表中的一条记录。

2. 维度表

每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任何事实表的外键,当然,维度表行的描述环境应与事实表行完全对应。 维度表通常比较宽,是扁平型非规范表,包含大量的低粒度的文本属性。

我们的图中的围绕在chat表周围的四张表都属于维度表,这些表都有一个唯一的主键,然后在表中存放了详细的数据信息。

3. 度量值

度量值是什么?看一下chat表中最后一个字段:内容长度(content_length),它表示我们在短信中的发了多少个字。 度量值是对一次行为的度量,可以是一次短信的文本长度、一次电话的通话时间、一个订单的订单金额。

0x03 实践

下面我们将以聊天场景为例,详细讲一下维度建模的建模方式,并举例如果使用这个模型(这点还是很重要的)。

一、业务场景

假设我们在一家通信性质的公司工作,公司需要对业务进行建模,我们首先限定业务场景为聊天,这种场景会有下面几个要素:

  1. 一次聊天行为的发起需要有这几个个体的参与:发送消息者、接受消息者、时间、ip、设备。
  2. 一个用户可以给多个用户发消息,可以不同时间发很多条。

好,基于这两点,我们来设计我们的模型。

二、模型设计

首先,我想一下如果不按照什么维度建模来设计,我们可以怎么做?

如果是我,我会设计下面这张表。你信不信,我能列出来50个字段!

如果按照维度建模的方式来设计的话,我们会得到这张表,也就是前面贴出来的。

其实我个人认为怎么设计这种表都有其合理性,我们不论对错,单说一下两者的优缺点。

先说我们的维度模型:

  1. 数据冗余小(因为很多具体的信息都存在相应的维度表中了,比如用户信息就只有一份)
  2. 结构清晰(表结构一目了然)
  3. 便于做OLAP分析(数据分析用起来会很开心)
  4. 增加使用成本,比如查询时要关联多张表
  5. 数据不一致,比如用户发起购买行为的时候的数据,和我们维度表里面存放的数据不一致

再说我们这张大款表的优缺点:

  1. 业务直观,在做业务的时候,这种表特别方便,直接能对到业务中。
  2. 使用方便,写sql的时候很方便。
  3. 数据冗余巨大,真的很大,在几亿的用户规模下,他的订单行为会很恐怖
  4. 粒度僵硬,什么都写死了,这张表的可复用性太低。

三、使用示例

数据模型的建立必须要为更好的应用来服务,下面我先举一个例子,来切实地感受一下来怎么用我们的模型。

需求:求出2017年在广东省每个市的男性分别给女性发过多少字。

实现

实现是不是很简单?然后还有各种上钻和下探的操作都可以基于这几张表来实现。

0xFF 总结

维度建模是一种十分优秀的建模方式,他有很多的优点,但是我们在实际工作中也很难完全按照它的方式来实现,都会有所取舍,比如说为了业务我们还是会需要一些宽表,有时候还会有很多的数据冗余。

维度模型在很多开源的系统都中都有支持,比如Kylin,在建模的时候就是用的维度建模中的星型模型,当然在最新版本中也支持了雪花模型。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
3 条评论
热度
最新
能把相关的博客放在一起且有顺序
能把相关的博客放在一起且有顺序
回复回复点赞举报
维度模型的缺点中最后一点,“数据不一致,比如用户发起购买行为的时候的数据,和我们维度表里面存放的数据不一致”这句我不太理解,这个事实表是关于聊天业务的,那购买业务的数据为什么会出现不一致呢?
维度模型的缺点中最后一点,“数据不一致,比如用户发起购买行为的时候的数据,和我们维度表里面存放的数据不一致”这句我不太理解,这个事实表是关于聊天业务的,那购买业务的数据为什么会出现不一致呢?
回复回复点赞举报
SQL里有一个地方写错了吧,第二个left join ...on后面应该是 chat.dest_user_id=user_dest.user_id吧
SQL里有一个地方写错了吧,第二个left join ...on后面应该是 chat.dest_user_id=user_dest.user_id吧
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
漫谈数据仓库之维度建模
数据仓库包含的内容很多,它可以包括架构、建模和方法论。对应到具体工作中的话,它可以包含下面的这些内容:
架构师修炼
2021/01/05
7740
漫谈数据仓库之维度建模
维度模型数据仓库(二) —— 维度模型基础
        既然维度模型是数据仓库建设中的一种数据建模方法,那不妨先看一下几种主流的数据仓库架构。
用户1148526
2022/12/02
1K0
维度模型数据仓库(二) —— 维度模型基础
数据仓库常见建模方法与建模实例演示[通俗易懂]
为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑
全栈程序员站长
2022/11/09
3.5K0
数据仓库常见建模方法与建模实例演示[通俗易懂]
深入讲解四种数仓建模理论方法
数据仓库的建设的最重要的核心核心之一就是数仓模型的设计和构建,这个决定了数仓的复用和性能,本文将介绍四种建模的理论:维度建模、关系建模、Data Vault建模、Anchor模型建模,文后也介绍几种常见的数仓建模工具。
Spark学习技巧
2024/01/26
2.9K0
深入讲解四种数仓建模理论方法
数据仓库常见建模方法与大数据领域建模实例综述
随着从IT时代到DT时代的跨越,数据开始出现爆发式的增长,这当中产生的价值也是不言而喻。如何将这些数据进行有序、有结构地分类组织存储,是我们所有数据从业者都要面临的一个挑战。
全栈程序员站长
2022/08/22
1.9K0
数据仓库常见建模方法与大数据领域建模实例综述
数仓建模——维度表详细讲解
来源:菜鸟数据之旅 本文约2100字,建议阅读5分钟 维度表是一种数据建模技术,用于存储与数据中心的各个业务领域相关的维度信息。 一、 维度表是什么 维度表是一种数据建模技术,用于存储与数据中心的各个业务领域相关的维度信息。它通常用于构建数据仓库、数据集市等决策支持系统,以便进行多维数据分析和报告。 在数据仓库中,维度表是与事实表相对应的表。维度表是维度建模的基础和灵魂。事实表紧紧围绕业务过程进行设计,事实表存储度量数据,如销售额、数量、收入等,而维度表则围绕业务过程所处的环境进行设计,维度表存储描述度
数据派THU
2023/05/11
1.3K0
数仓建模——维度表详细讲解
通俗易懂数仓建模—Inmon范式建模与Kimball维度建模
本文开始先简单理解两种建模的核心思想,然后根据一个具体的例子,分别使用这两种建模方式进行建模,大家便会一目了然!
五分钟学大数据
2021/04/15
2.1K0
通俗易懂数仓建模—Inmon范式建模与Kimball维度建模
基于Hadoop生态圈的数据仓库实践 —— 概述(一)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/51757011
用户1148526
2019/05/25
7580
数据仓库建模方法详解视频_三维建模流程步骤
范式建模法其实是我们在构建数据模型常用的一个方法,该方法的主要由Inmon所提倡,主要解决关系型数据库得数据存储,利用的一种技术层面上的方法,主要用于业务系统,所以范式建模主要是利用关系型数据库进行数仓建设
全栈程序员站长
2022/11/09
7940
数据仓库建模方法详解视频_三维建模流程步骤
数仓建模 - 维度 vs 关系
数据管理一直在演进,从早期的电子表格、蛛网系统到架构式数据仓库。发展至今以维度建模和关系建模为主,而随着互联网的发展,数据从GB到PB的裱花,企业业务迭代更新亦是瞬息万变,对维度模型的偏爱渐渐有统一互联网数仓建模标准的趋势。
大数据老哥
2022/02/17
8870
数仓建模 - 维度 vs 关系
数据仓库系列之维度建模
上一篇文章我已经简单介绍了数据分析中为啥要建立数据仓库,从本周开始我们开始一起学习数据仓库。学习数据仓库,你一定会了解到两个人:数据仓库之父比尔·恩门(Bill Inmon)和数据仓库权威专家Ralph Kimball。Inmon和Kimball两种DW架构支撑了数据仓库以及商业智能近二十年的发展,其中Inmon主张自上而下的架构,不同的OLTP数据集中到面向主题、集成的、不易失的和时间变化的结构中,用于以后的分析;且数据可以通过下钻到最细层,或者上卷到汇总层;数据集市应该是数据仓库的子集;每个数据集市是针对独立部门特殊设计的。而Kimball正好与Inmon相反,Kimball架构是一种自下而上的架构,它认为数据仓库是一系列数据集市的集合。企业可以通过一系列维数相同的数据集市递增地构建数据仓库,通过使用一致的维度,能够共同看到不同数据集市中的信息,这表示它们拥有公共定义的元素。
黄昏前黎明后
2019/08/26
1.4K0
Greenplum 实时数据仓库实践(2)——数据仓库设计基础
本篇首先介绍关系数据模型、多维数据模型和Data Vault模型这三种常见的数据仓库模型和与之相关的设计方法,然后讨论数据集市的设计问题,最后说明一个数据仓库项目的实施步骤。规划实施过程是整个数据仓库设计的重要组成部分。
用户1148526
2021/12/07
1.9K0
Greenplum 实时数据仓库实践(2)——数据仓库设计基础
浅谈数仓建模及其方法论
1.简单报表阶段:这个阶段,系统的主要目标是解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进行决策所需要的汇总数据。这个阶段的大部分表现形式为数据库和前端报表工具。
大数据真好玩
2021/03/15
1.9K0
数据仓库(03)数仓建模之星型模型与维度建模
维度建模是一种将数据结构化的逻辑设计方法,也是一种广泛应用的数仓建模方式,它将客观世界划分为度量和上下文。度量是常常是以数值形式出现,事实周围有上下文包围着,这种上下文被直观地分成独立的逻辑块,称之为维度。它与实体-关系建模有很大的区别,实体-关系建模是面向应用,遵循第三范式,以消除数据冗余为目标的设计技术。维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术。
张飞的猪
2022/09/03
8120
系列 | 漫谈数仓第二篇NO.2 数据模型(维度建模)
model对于数仓是最核心的东西,数据模型是数据组织和存储方法,模型的好坏,决定了数仓能支撑企业业务多久。
Spark学习技巧
2019/09/26
2.9K0
系列 | 漫谈数仓第二篇NO.2 数据模型(维度建模)
8000字,详解数据建模的方法、模型、规范和工具!
由于在变化快速的商业世界里,业务形态多种多样,为了能够更有针对性的进行数据建模,经过长时间的摸索,业界逐步形成了数据建模的四部曲:业务建模->领域建模->逻辑建模->物理建模。
肉眼品世界
2022/01/20
4.6K0
8000字,详解数据建模的方法、模型、规范和工具!
万字漫游数据仓库模型从入门到放弃
数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据。只有将数据有序的组织和存储起来之后,数据才能得到高性能、低成本、高效率、高质量的使用。
Spark学习技巧
2023/09/07
6480
万字漫游数据仓库模型从入门到放弃
数据仓库建模
如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置;如果把数据看作城市的建筑,我们希望城市规划布局合理;如果把数据看作电脑文件和文件夹,我们希望按照自己的习惯有很好的文件夹组织方式,而不是糟糕混乱的桌面,经常为找一个文件而不知所措。
用户1217611
2020/06/19
1.4K0
数仓建模与分析建模_数据仓库建模与数据挖掘建模
数据仓库: 数据仓库是一个面向主题的、集成的、非易失的、随时间变化的数据集合。重要用于组织积累的历史数据,并且使用分析方法(OLAP、数据分析)进行分析整理,进而辅助决策,为管理者、企业系统提供数据支持,构建商业智能。
全栈程序员站长
2022/11/09
1.4K0
数仓建模与分析建模_数据仓库建模与数据挖掘建模
【读书笔记】《 Hadoop构建数据仓库实践》第2章
一个列或者列集,唯一标识表中的一条记录。超键可能包含用于唯一标识记录所不必要的额外的列,我们通常只对仅包含能够唯一标识记录的最小数量的列感兴趣。
辉哥
2022/05/13
1K0
【读书笔记】《 Hadoop构建数据仓库实践》第2章
推荐阅读
相关推荐
漫谈数据仓库之维度建模
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档