为什么要数据仓库建模

数据模型是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据。有了适合业务和基础数据存储环境的模型,那么大数据就能获得以下好处:

  • 性能:良好的数据模型能帮助我们快速查询所需要的数据,减少数据的 I/O 吞吐。

  • 成本:良好的数据模型能极大地减少不必要的数据冗余,也能实现计算结果复用,极大的降低大数据系统中的存储和计算成本。

  • 效率:良好的数据模型能极大地改善用户使用数据的体验,提高使用数据的效率。

  • 质量:良好的数据模型能改善数据统计口径的不一致性,减少数据计算错误的可能性。

范式建模

范式建模Third Normal Form,3NF)是在构建数据模型常用的一个方法,该方法主要由 Inmon 所提倡,主要解决关系型数据库的数据存储,利用的一种技术层面上的方法。目前在关系型数据库中的建模方法,大部分采用的是三范式建模,即通过实体关系(Entity Relationship,ER)模型描述企业业务。

范式是数据库逻辑模型设计的基本理论,一个关系模型可以从第一范式到第五范式进行无损分解,这个过程称为 规范化。在数据仓库的模型中目前一般采用第三范式,它有着严格的数学定义。从其表达的含义来看,一个符合三范式的关系必须具有以下三个条件:

  • 每个属性值唯一,不具有多义性;

  • 每个非主属性必须完全依赖于整个主键,而非主键的一部分;

  • 每个非主属性不能依赖于其他关系中的属性,因为这样的话,这种属性应该归到其他关系中。

Inmon 提出的集线器的自上而下(EDW-DM)的数据仓库架构。操作型或事务型系统的数据源,通过 ETL 抽取转换和加载到数据仓库的 ODS 层,然后通过 ODS 的数据建设原子数据的数据仓库 EDW,EDW 不是多维格式的,不方便上层应用做数据分析,所以需要通过汇总建设成多维格式的数据集市层。

3NF 模型基本组成

  • 实体:相同特征和性质的属性抽象,用抽象的实体名和属性名共同刻画的逻辑实体;

  • 关系:实体之间的关系;

  • 属性:实体的某种特性,一般实体具有多个属性。

范式建模的特点

  • 需要全面了解企业业务和数据

  • 实施周期非常长

  • 对建模人员的能力要求非常高

ER 模型

ER 模型是数据库设计的理论基础,当前几乎所有的 OLTP 系统设计都采用 ER 模型建模方式。

采用 ER 模型建设数据仓库模型的出发点是整合数据,将各个系统中的数据以整个企业角度按主题进行相似性组合和合并,并进行一致性处理,为数据分析决策服务,但是并不能直接用于分析决策。

建模步骤

建模步骤分为三个阶段:

  • 高层阶段:一个高度抽象的模型,描述主要的主题以及主题间的关系,用于描述企业的业务总体概况。

  • 中层模型:在高层模型的基础上,细化主题的数据项。

  • 物理模型:也叫做底层模型,在中层模型的基础上,考虑物理存储,同时基于性能和平台特点进行物理属性的设计,也可能做一些表的合并、分区的设计等。

维度建模

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

  • 维度模型是一个规范化的事实表和反规范化的一些维度表组成的

    • 一种非规范化的关系模型

    • 表跟表之间的关系通过关键字和外键来定义

  • 以良好的可理解性和方便的产生报表来进行数据组织,很少考虑修改的性能

  • 通过SQL或者相关的工具实现数据查询和维护

维度表

每一张维表对应现实世界中的一个对象或者概念。如:客户、产品、日期、地区、商场。

维表的特征:

  • 包含了众多描述性的列:维表的范围很宽(具有多个属性)

  • 通常情况下,跟事实表相比,行数相对较小,通常小于 10 万条

  • 内容相对固定,几乎就是一类查找表,或编码表

事实表

每一个事实表通常包含了处理所关系的度量值

每一个事实表的行包括:

  • 具有可加性的数值型的度量值

  • 与维表相连接的外键

    • 通常具有两个和两个以上的外键

    • 外键之间表示维表之间多对多的关系

事实表的特征:

  • 数据量大

  • 列数较少

  • 经常发生变化

建模流程

  1. 选择业务过程

    该步骤需要建模人员深入到实际业务流程当中,从中建立性能度量,并转化为事实表中的事实。一旦事实表被建立,则对应的粒度即维度也会相对定义。所以这一步还是比较重要的。

  2. 声明粒度
    粒度声明是维度设计的重要步骤,通常选用最低级别的原子粒度,因为原子粒度能够承受无法预期的用户查询。

  3. 确定维度
    因为维度表可以描述事实的属性,维度表有时会被称为数据仓库的灵魂。它是数据仓库系统能够被用作业务分析的入口和描述性标识。

  4. 确定事实
    事实表为实际业务过程中的度量,大部分以数值表示。一个事实表对应一个现实中的某项事务。

维度建模的三种模式

星型模型

星型模式Star Schema)是面向主题的常用模式,主要由一个事实表及多个维表构成,不存在二级维表。

可以看出,星型模型的维度建模由一个事实表和一组维表组成,且具有以下特点:

  • 维表只和事实表关联,维表之间没有关联;

  • 每个维表的主码为单列,且该主码放置在事实表中,作为两边连接的外码;

  • 以事实表为核心,维表围绕很呈星型分布。

雪花模型

雪花模型Snowflake Schema)是在星型模型基础上将维表再次扩展,每个维表可以继续向外连接多个子维表。

雪花模型优缺点:

  • 优点:耦合性低、冗余小;

  • 缺点:跨多表查询时性能低。

星型模型中的维表相对雪花模型来说要大,而且不满足规范化设计。雪花模型相当于将星型模型的大维表拆分成小维表,满足了规范化设计。然而这种模式在实际应用中很少见,因为这样做会导致开发难度增大,而数据冗余问题在数据仓库中并不严重。

星座模型

星座模型Fact Constellations Schema)也是星型模型的扩展,存在多个事实表且可共用同一个维表。

前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表可能被多个事实表用到。在业务发展的后期,绝大部分维度建模都采用的是星座模型。

三种模式对比

雪花模型是将星型模型的维表进一步划分,使各维表均满足服繁华设计。星座模型则是允许星型模型中出现多个事实表。

一般在面向数据集市主题建模的时候会采用星型模型,如果是企业级数据仓库的建立则采用星座模式较多。数据建模的根本目的是 避免冗余,尽可能提升查询性能,建模方式没有最好只有最优。

Data Vault 模型

Data Vault模型是 Dan Linstedt 在20世纪90年代提出的,主要在对自然界中发现的复杂网络建模。

Data Vault 是面向细节的,可追踪历史的,一组有连接关系的规范化的表的集合。这些表可以支持一个或多个业务功能。从建模风格上看,它采用了一种由第三范式方法(3NF)与维度建模方法混合而成的方式,以二者的独特组合来满足企业需求。

设计理念:满足企业对灵活性、可扩展性、一致性和对需求的适应性要求,是一种专门为企业级数据仓库量身定制的建模方式。

Hub 可以想象成人的骨架,Link 就是连接骨架的韧带,Satellite 就是骨架上面的须肉

基本结构

1. 中心表(Hub)

中心表用来保存一个组织内的每个实体的业务主键,业务主键唯一标识某个业务实体。

中心表和源系统表相互独立。当一个业务主键用在多个系统时,它在 Data Vault 中只保留一份,其他的组件都链接到这一个业务主键上。

**2. 链接表(Link) **

链接表是中心表之间的链接。一个链接表意味着两个或多个中心表之间有关联。一个链接表通常是一个外键,它代表着一种业务关系

3. 附属表(Satellite)

附属表用来保存中心表和链接表的属性,包括所有的历史变化数据。一个附属表总有一个且唯一一个外键引用到中心表或链接表。

Data Vault 模型特点

  • 所有数据都基于时间来存储,即时数据是低质量的,也不能在 ETL 过程中处理掉;

  • 依赖越少越好

  • 和源系统越独立越好

  • 设计上适合变化,源系统中数据的变化,在不改变模型的情况下可扩展。

  • ETL 作业可以重复执行

  • 数据完全可以追踪。

Anchor 模型

Anchor 对 Data Vault 模型做了进一步规范化处理,是一个高度可扩展的模型,其核心思想是所有的扩展只是添加而不是修改,因此将模型规范到 6NF,基本变成了 k-v 结构化模型。

Anchor 模型组成:

  • Anchors:类似于 Data Vault 的 Hub,代表业务实体,且只有主键。

  • Attributes:功能类似于 Data Vault 的 Satellite,但是它更加规范化,将其全部 k-v 结构化,一个表只有一个 Anchors 的属性描述。

  • Ties:就是 Anchors 之间的关系,单独用用来描述,类似于 Data Vault 的 Link,可以提升整体模型关系的罗占能力。

  • Knots:代表那些可能会在多个 Anchors 中公用的属性的提炼,比如性别、状态等这种枚举类型且被共用的属性。

数据仓库中的分析查询只是基于一小部分字段进行的,类似于列存储结构,使用 Anchor 模型可以大大减少扫描的数据量,从而提升查询性能。

总结

数据仓库建模是一个综合性技术,需要使用到ER建模、关系建模、维度建模等技术。而且当企业业务复杂的时候,这部分工作更是需要专门团队与业务方共同合作来完成。因此一个优秀的数据仓库建模团队既要有坚实的数据仓库建模技术,还要有对现实业务清晰、透彻的理解。

-- END --欢迎长按下图关注公众号 DigNew


推荐阅读:

  • 从0开始学大数据-数据仓库理论篇

  • 从0开始学大数据-Hive性能优化篇

  • 从0开始学大数据-Hive基础篇

  • 带你快速上手HBase | HBase读写性能优化

  • 带你快速上手HBase | HBase列族优化

  • 带你快速上手HBase | HBase RowKey设计

从0开始学大数据-数据仓库建模相关推荐

  1. 读《从0开始学大数据》-- 学习笔记和感想随笔(一)

    主要记录阅读<从0开始学大数据>课程的学习笔记.课程系统性的介绍大数据的发展史.大数据系统的原理及架构.大数据生态体系中的主要产品.如何进行呢大数据开发实践.大数据平台开发及系统集成.使用 ...

  2. 《从0开始学大数据》之如何自己开发一个大数据SQL引擎

    背景 大数据仓库 Hive,作为一个成功的大数据仓库,它将 SQL 语句转换成 MapReduce 执行过程,并把大数据应用的门槛下降到普通数据分析师和工程师就可以很快上手的地步. 但是 Hive 也 ...

  3. hive load data外部表报错_从0开始学大数据-Hive基础篇

    Hive起源于Facebook,是基于 Hadoop HDFS 分布式文件系统的分布式 数据仓库 架构.它为数据仓库的管理提供了许多功能:数据ETL(抽取.转换和加载)工具.数据存储管理和大型数据集的 ...

  4. 《从0开始学大数据》之HDFS是如何实现大数据高速、可靠的存储和访问

    Hadoop 分布式文件系统 HDFS 的设计目标是管理数以千计的服务器.数以万计的磁盘,将这么大规模的服务器计算资源当作一个单一的存储系统进行管理,对应用程序提供数以 PB 计的存储容量,让应用程序 ...

  5. 零基础想学大数据?你需要这个完整学习路线

    关于大数据,有句话说的很好:"未来的商业竞争,就是数据的竞争." 实际上也确是如此,从电商的"猜你喜欢"到"防疫健康码":从 AI 智能识别 ...

  6. 漫画趣解大数据算法建模:买瓜

    大数据开发如何转型算法? 算法建模主要做什么?调参为什么玄学? 如何通俗理解算法建模过程.. 夕阳下的村东头,有一人来买瓜. 1 引子(买瓜) 忙碌的一天刚刚结束,村里的小张就匆匆的骑上车,准备买个西 ...

  7. 学大数据专业后悔死了?学大数据以后好就业吗?

    前言 从近几年来看,大数据专业的就业情况和就业前景是非常不错的,而所谓的学大数据专业后悔死了等等言论都是不实或偏激的.小编在收集整理相关资料后发现大多数同学认为学大数据专业后悔死了有两个原因:一是大数 ...

  8. 学大数据可以从事什么工作岗位?

    大数据行业目前有多火爆就不用多说了,我们生活和工作的方方面面都和大数据技术息息相关.由于大数据在各个行业的广泛应用,导致了大数据人才缺口的进一步扩大.可能有人会问了,学大数据有哪些薪资福利高的工作可以 ...

  9. 大数据是什么?学大数据要掌握的基础是?(简单的介绍)

    一.学习大数据需要的基础 javaSE,EE(SSM) 90%的大数据框架都是java写的 如:MongoDB--最受欢迎的,跨平台的,面向文档的数据库. Hadoop--用Java编写的开源软件框架 ...

最新文章

  1. cd 地址 linux,Ubuntu10.10 CD/DVD下?地址+校??
  2. 洛谷P2347 砝码称重 某一年noip提高组原题
  3. 01_SpringCoud 整合SpringCoud alibaba Nacos
  4. 程序人生 | 35岁以上的 iOS 程序员都到哪里去了?
  5. Python - PyCharm部分快捷键
  6. Python版本选择
  7. 学习了Python大数据之后,将来主要做什么
  8. EXT3-fs error和EXT4-fs error小总结
  9. mysql学生信息管理系统设计_学生信息管理系统的设计与实现(MyEclipse,MySQL)
  10. JavaScript之浏览器大战
  11. LM2596S-ADJ DC-DC降压芯片使用
  12. 【图片、字符画互转】字符画实现(JAVA)
  13. idea返回上一步快捷键无效
  14. python实现微信机器人: AI智能回复
  15. os 存储器的结构层次
  16. 万维网联盟将于2014年推出HTML5标准(四)
  17. ABAP ALV上的红绿灯状态
  18. 惊蛰恰逢“龙抬头”,流感高峰季来袭,你准备好了吗?
  19. Ubuntu、stm32下的C程序各变量的分配地址分析
  20. 信息工程计算机应用技术专业介绍,信息工程系举行2019级新生计算机应用技术专业介绍会...

热门文章

  1. /Users/apple/.zshrc:2: command not found: i 终端报错解决方法
  2. 两万字深度讲解系统设计!超详细解析!面试复习必备!
  3. 绘制一张透明背景的单色位图
  4. win7 安装openssh_05、Win7上openSSH的安装与配置
  5. RIPS user guide for fresh
  6. Grand Central Dispatch 基础教程:Part 1/2
  7. mysql数据库基础评分标准_《MYSQL高级查询与编程》综合机试试卷 - 云南农职美和易思...
  8. 2019年数学建模C题
  9. C++中endl的本质是什么
  10. 《影响力》(你为什么会说“是”?)读书