概述

数据仓库包含的内容很多,它可以包括架构、建模和方法论。对应到具体工作中的话,它可以包含下面的这些内容:

  • 以Hadoop、Spark、Hive等组建为中心的数据架构体系。
  • 各种数据建模方法,如维度建模。
  • 调度系统、元数据系统、ETL系统、可视化系统这类辅助系统。

我们暂且不管数据仓库的范围到底有多大,在数据仓库体系中,数据模型的核心地位是不可替代的。

因此,下面的将详细地阐述数据建模中的典型代表:维度建模,对它的的相关理论以及实际使用做深入的分析。

文章结构

本文将按照下面的顺序进行阐述:

  1. 先介绍比较经典和常用的数据仓库模型,并分析其优缺点。
  2. 详细介绍维度建模的基本概念以及相关理论。
  3. 为了能更真切地理解什么是维度建模,我将模拟一个大家都十分熟悉的电商场景,运用前面讲到的理论进行建模。
  4. 理论和现实的工作场景毕竟会有所差距,这一块,我会分享一下企业在实际的应用中所做出的取舍。

0x01 经典数据仓库模型

下面将分别介绍四种数据仓库模型,其中前三种模型分别对应了三本书:《数据仓库》、《数据仓库工具箱》和《数据架构 大数据 数据仓库以及Data Vault》,这三本书都有中文版,非常巧的是,我只有三本数据仓库的书,正好对应了这三种理论。

Anchor模型我并不是特别熟悉,放在这里以供参考。

一、实体关系(ER)模型

数据仓库之父Immon的方法从全企业的高度设计一个3NF模型,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF,它与OLTP系统中的3NF的区别,在于数据仓库中的3NF上站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系抽象,它更多的是面向数据的整合和一致性治理,正如Immon所希望达到的:“single version of the truth”。

但是要采用此方法进行构建,也有其挑战:

  1. 需要全面了解企业业务和数据
  2. 实施周期非常长
  3. 对建模人员的能力要求也非常高

二、维度模型

维度模型是数据仓库领域另一位大师Ralph Kimball 所倡导,他的《The DataWarehouse Toolkit-The Complete Guide to Dimensona Modeling,中文名《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。

典型的代表是我们比较熟知的星形模型,以及在一些特殊场景下适用的雪花模型。

三、DataVault

DataVault是Dan Linstedt发起创建的一种模型方法论,它是在ER关系模型上的衍生,同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。它强调建立一个可审计的基础数据层,也就是强调数据的历史性可追溯性和原子性,而不要求对数据进行过度的一致性处理和整合;同时也基于主题概念将企业数据进行结构化组织,并引入了更进一步的范式处理来优化模型应对源系统变更的扩展性。

它主要由:Hub(关键核心业务实体)、Link(关系)、Satellite(实体属性) 三部分组成 。

四、Anchor模型

Anchor模型是由Lars. Rönnbäck设计的,初衷是设计一个高度可扩展的模型,核心思想:所有的扩展只是添加而不是修改,因此它将模型规范到6NF,基本变成了K-V结构模型。

Anchor模型由:Anchors 、Attributes 、Ties 、Knots 组成,相关细节可以参考《AnchorModeling-Agile Information Modeling in Evolving Data Environments》

0x02 维度建模

一、什么是维度建模

维度模型是数据仓库领域大师Ralph Kimball 所倡导,他的《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。

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

二、维度建模的基本要素

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

1. 事实表

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

额,看了这一句,其实是不太容易理解到底什么是事实表的。

比如一次购买行为我们就可以理解为是一个事实,下面我们上示例。

p1.png

图中的订单表就是一个事实表,你可以理解他就是在现实中发生的一次操作型事件,我们每完成一个订单,就会在订单中增加一条记录。

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

2. 维度表

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

我们的图中的用户表、商家表、时间表这些都属于维度表,这些表都有一个唯一的主键,然后在表中存放了详细的数据信息。

0x03 实践

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

一、业务场景

假设我们在一家电商网站工作,比如某宝、某东。我们需要对这里业务进行建模。下面我们分析几点业务场景:

  1. 电商网站中最典型的场景就是用户的购买行为。
  2. 一次购买行为的发起需要有这几个个体的参与:购买者、商家、商品、购买时间、订单金额。
  3. 一个用户可以发起很多次购买的动作。

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

二、模型设计

下面就是我们设计出来的数据模型,和之前的基本一样,只不过是换成了英文,主要是为了后面写sql的时候来用。

![Uploading p3_414705.png . . .]

我就不再解释每个表的作用了,现在只说一下为什么要这样设计。

首先,我们想一下,如果我们不这样设计的话,我们一般会怎么做?

如果是我,我会设计下面这张表。你信不信,我能列出来50个字段!其实我个人认为怎么设计这种表都有其合理性,我们不论对错,单说一下两者的优缺点。

p3.png

先说我们的维度模型:

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

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

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

三、使用示例

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

需求:求出2016年在帝都的男性用户购买的LV品牌商品的总价格。

实现

  SELECTSUM(order.money)FROMorder,product,date,address,user,WHEREdate.year = '2016'AND user.sex = 'male'AND address.province = '帝都'AND product.name = 'LV'

0xFF 总结

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

转载自:https://www.jianshu.com/p/17baa9f96ca7

数据仓库系列——3.维度建模概述及案例相关推荐

  1. 数据仓库系列之维度建模

    上一篇文章我已经简单介绍了数据分析中为啥要建立数据仓库,从本周开始我们开始一起学习数据仓库.学习数据仓库,你一定会了解到两个人:数据仓库之父比尔·恩门(Bill Inmon)和数据仓库权威专家Ralp ...

  2. 数据仓库工具箱:维度建模权威指南3

    数据仓库工具箱:维度建模权威指南3 零售业务 维度模型设计的4步 选择业务过程 声明粒度 确定维度(列名带有key后缀) 确定事实 零售业务案例研究 可加事实 不可加事实 维度表设计细节 日期维度(还 ...

  3. 数据仓库(4)基于维度建模的数仓KimBall架构

      基于维度建模的KimBall架构,将数据仓库划分为4个不同的部分.分别是操作型源系统.ETL系统.数据展现和商业智能应用,如下图.   操作型源系统,指的就是面向用户的各类系统,如app.网站.E ...

  4. 老司机带带我:数仓建模架构|维度建模剖析与案例演示

           作者基于多年的大数据处理经验,当前管理着100PB+数据仓库和2000+节点的集群.持续系统化给大家分享一下关于数据仓库建设的经验总结.本系列既有数据仓库的形而上学理论体系,也有结合公司 ...

  5. 数据仓库(二)之维度建模篇

    概述 维度建模是一种将数据结构化的逻辑设计方法,它将客观世界划分为度量和上下文.度量是常常是以数值形式出现,事实周围有上下文包围着,这种上下文被直观地分成独立的逻辑块,称之为维度.它与实体-关系建模有 ...

  6. 数据仓库-基础知识(维度建模)

    一.数据仓库概述 1.1 数据仓库定义 数据仓库:Data Warehouse,是为企业所决策制定过程,提供所有支持类型的数据集合.用于分析性报告和决策支持.数仓是一个面向主题.集成的.相对稳定.反应 ...

  7. 漫谈数据仓库之维度建模

    2019独角兽企业重金招聘Python工程师标准>>> 0x00 前言 下面的内容,是笔者在学习和工作中的一些总结,其中概念性的内容大多来自书中,实践性的内容大多来自自己的工作和个人 ...

  8. 数据仓库系列篇之管理规范

    @Author : Spinach | GHB @Link : http://blog.csdn.net/bocai8058 文章目录 前言 Hive存储规划 数据模型设计 命名规范 表命名 字段命名 ...

  9. 维度建模的基本概念及过程

    维度建模的基本概念及过程 摘要:本文首先介绍维度模型中的维度表和事实表这2个基本构成要素的基础知识:其次,介绍设计维度模型的4个基本步骤:再次,围绕某银行为实现业务价值链数据集成的需要,介绍多维体系结 ...

最新文章

  1. linux系统yum源,Linux开启安装EPEL YUM源
  2. cucumber 文件目录结构和执行顺序
  3. idea 报系统分区磁盘不足_系统磁盘管理功能讲解,电脑硬盘分区格式化修改驱动器号图文教程...
  4. 电脑显示器变色_流光溢彩电竞出击:飞利浦猛腾M1系列电竞显示器275M1RZ
  5. python web框架django_Python Web应用框架 Django
  6. 【hadoop】有参考价值的博客整理
  7. Apollo进阶课程㉙丨Apollo控制技术详解——控制器的类型
  8. .NET中操作SQLite
  9. Altium Designer安装包下载
  10. 香港十大外汇交易平台排名(2021最新版)
  11. 谁为乔布斯写下「致敬疯子」的广告词
  12. MySQL基础学习(尚硅谷 婷姐)自学笔记_001
  13. WORD两个表格合并为一个表格(删除两个表格之间多余的空格)
  14. 易企秀把作品转赠给别人,让别人可以编辑
  15. 微擎服务器数据迁移 ,微擎通过迁移数据方式搬家换服务器换站点换域名【图文教程】
  16. 会话支持软件行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  17. MIPI DSI协议
  18. nodejs中cmd命令大全
  19. oracle中LOB字段相关概念(自动创建LOB索引段和重建索引方法)
  20. CV深度学习项目调试开发过程中报错记录【持续更新】

热门文章

  1. 命名法:骆驼(Camel)、帕斯卡(pascal)、匈牙利(Hungarian)、下划线(_)
  2. MySQL部门或菜单父子节点递归实现树查询
  3. 黑马简单数据后台管理系统(SSM课程中段)
  4. 学习笔记之数据结构基本概念
  5. parasolid 原因 效率_20个solidworks常见问题及解决办法
  6. ai怎么渐变颜色_Illustrator如何调渐变颜色 调渐变颜色方法分享
  7. 神经网络基础学习总结
  8. FMC子卡:4 通道 250MSPS采样率16 位 AD 采集子卡
  9. 给java说句公道话,声音:为北大陈瑞华教授说句公道话
  10. html 对象元素如何获取div 里的data值 原生和jq对象两种获取