8

实例剖析四种数据仓库的建模方法

 2 years ago
source link: https://www.51cto.com/article/721388.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

数据仓库,这个几乎是所有大数据开发面试必问的话题。比如数据仓库的分层架构?为什么需要数据仓库建模?数据仓库建模的原则是什么?结合业务举例说明数据仓库建模的步骤,以及注意事项?什么是缓慢变化维?维度该如何选择建设,原则是什么,主键如何设计等等?

一众问题搞得小伙伴们死去活来,甚至工作好几年的小伙伴都没搞清楚过,尤其是大厂特别爱问这些问题。有些小伙伴甚至觉得这些都是形而上学,不懂这些我不一样搞了很多年开发?即使感兴趣的买了一本厚厚的数据仓库工具书也看不懂!那么实际数据仓库建模到底是什么,开发人员该掌握哪些?

数据仓库前世今生

来一起看个官方定义:数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它出于分析性报告和决策支持目的而创建。为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。

数据仓库之父 Bill Inmon 在 1991 年出版的 Building the Data Warehouse 一书中首次提出了被广为认可的数据仓库定义。Inmon 将数据仓库描述为一个面向主题的、集成的、随时间变化的、非易失的数据集合,用于支持管理者的决策过程。

简单点来说,现实情况是一个企业有很多数据源,比如有的业务数据存放在Mysql,PG库,有的存放在Oracle,有的日志存放在Ftp,Nginx服务器上等,有的是外部采集的爬虫数据等等。那么对于企业来说沉淀了这么多数据,如何将这些数据放到一起进行数据融合,数据分析,给企业挖掘数据价值呢?这些不同数据源,不同数据存储格式,不同的数据更新周期,如果让你把企业这些数据融合分析,你怎么办?

首先,你是不是要把这些不同数据按照统一的格式,一定的规范存储到一起,然后在通过特定的工具做数据计算分析?那么对于企业来说,把企业各种数据源的数据放到一起存储和计算的地方就叫数据仓库(约定俗称的叫法),所以本质上数据仓库上融合各个数据源,存储加工数据的地方,早期大数据没有发展起来的时候,企业数据仓库的载体一般是Oracle,那时候主要给企业做BI报表(Business Intelligence商业智能)。

后来随着企业数字化,互联网的发展,企业收集到数据越来越多,发现原有的技术框架已经满足不了业务存储和分析的需求了。于是乎就有了现在Hadoop生态为主的数仓仓库。

图片

数据仓库建模的目的?

为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑:

  • 访问性能:能够快速查询所需的数据,减少数据I/O。
  • 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数 据系统中的存储成本和计算成本。
  • 使用效率:改善用户应用体验,提高使用数据的效率。
  • 数据质量:改善数据统计口径的不一致性,减少数据计算错误 的可能性,提供高质量的、一致的数据访问平台。

常见的数据建模方法

数据仓库本质是从数据库衍生出来的,所以数据仓库的建模也是不断衍生发展的。从最早的借鉴数据库的范式建模,到逐渐提出维度建模,Data Vault模型,Anchor模型等等,越往后建模的要求越高,越需满足3NF,4NF等。但是对于数据仓库来说,目前主流还是维度建模,会夹杂着范式建模。

数据仓库建模方法论可分为:范式建模、维度建模、Data Vault模型、Anchor模型。

图片

常见四种建模方法

1、范式建模(E-R模型)

将事物抽象为“实体”、“属性”、“关系”来表示数 据关联和事物描述;实体:Entity,关系:Relationship,这种对数据的抽象 建模通常被称为ER实体关系模型  

ER模型是数据库设计的理论基础,当前几乎所有的OLTP系统设计都采用ER模型建模的方式,且该建模方法需要满足3NF。Bill Inom提出的数仓理论,推荐采用ER关系模型进行建模,BI架构提出分层架构,数仓底层ods、dwd也多采用ER关系模型就行设计。

但是逐渐随着企业数据的高增长,复杂化,数仓全部使用ER模型建模显得越来越不合时宜。为什么呢,因为其按部就班的步骤,三范式等,不适合现代化复杂,多变的业务组织。

E-R模型建模的步骤(满足3NF)如下:

  • 抽象出主体  (教师,课程)
  • 梳理主体之间的关系  (一个老师可以教多门课,一门课可以被多个老师教)
  • 梳理主体的属性  (教师:教师名称,性别,学历等)
  • 画出E-R关系图
图片

2、维度建模

维度建模,是数据仓库大师Ralph Kimball提出的,是数据仓库工程领域最流行的数仓建模经典。

维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是面向分析的,为了提高查询性能可以增加数据冗余,反规范化的设计技术。

Ralph Kimball提出对数据仓库维度建模,并且将数据仓库中的表划分为事实表、维度表两种类型。

1)事实表

在ER模型中抽象出了有实体、关系、属性三种类别,在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,而这个过程就产生了一个事实表,存储了每一个可度量的事件。

以电商行业为例:电商场景:一次购买事件,涉及主体包括客户、商品、商家,产生的可度量值 包括商品数量、金额、件数等。

图片

事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表。注意:这里需要值得注意的是,在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。

  • 事务事实表,用于承载事务数据,通常粒度比较低,它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表,例如产品交易事务事实、ATM交易事务事实。
  • 周期快照事实表,按照一定的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充。用来记录有规律的、固定时间间隔的业务累计数据,通常粒度比较高,例如账户月平均余额事实表。
  • 累积快照事实表,用来记录具有时间跨度的业务处理过程的整个过程的信息,每个生命周期一行,通常这类事实表比较少见。

2)维度表

维度,顾名思义,业务过程的发生或分析角度。比如从颜色、尺寸的角度来比较手机的外观,从cpu、内存等较比比较手机性能维。维度表一般为单一主键,在ER模型中,实体为客观存在的事物,会带有自己的 描述性属性,属性一般为文本性、描述性的,这些描述被称为维度。

比如商品,单一主键:商品ID,属性包括产地、颜色、材质、尺寸、单价等, 但并非属性一定是文本,比如单价、尺寸,均为数值型描述性的,日常主要的维度抽象包括:时间维度表、地理区域维度表等。

案例:某电商平台,经常需要对订单进行分析,以某宝的购物订单为例,以维度建 模的方式设计该模型

涉及到事实表为订单表、订单明细表,维度包括商品维度、用户维度、商家维度、区域维 度、时间维度。

  • 商品维度:商品ID、商品名称、商品种类、单价、产地等。
  • 用户维度:用户ID、姓名、性别、年龄、常住地、职业、学历等。
  • 时间维度:日期ID、日期、周几、上/中/下旬、是否周末、是否假期等图片。

维度分为:

① 退化维度(DegenerateDimension)

在维度类型中,有一种重要的维度称作为退化维度,亦维度退化一说。这种维度指的是直接把一些简单的维度放在事实表中。退化维度是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,退化维度一般在分析中可以用来做分组使用。

② 缓慢变化维(Slowly Changing Dimensions)

维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD)。比如员工表中的部门维度,员工的所在部门有可能两年后调整一次。

3)维度建模模型的分类

维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型。

① 星型模型

星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。

图片

② 雪花模型

雪花模型,在星型模型的基础上,维度表上又关联了其他维度表。这种模型维护成本高,性能方面也较差,所以一般不建议使用。尤其是基于hadoop体系构建数仓,减少join就是减少shuffle,性能差距会很大。

图片

尖叫提示:所以由上可以看出:

  • 星型模型和雪花模型主要区别就是对维度表的拆分。
  • 对于雪花模型,维度表的涉及更加规范,一般符合3NF,有效降低数据冗余,维度表之间不会相互关联。
  • 星型模型,一般采用降维的操作,反规范化,不符合3NF,利用冗余来避免模型过于复杂,提高易用性和分析效率,效率相对较高。

③ 星座模型

星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。数仓模型建设后期,大部分维度建模都是星座模型。

4)维度建模步骤

维度建模步骤:选择业务过程->声明粒度->确定维度->确定事实。旨在重点解决数据粒度、维度设计和事实表设计问题。

图片

声明粒度,为业务最小活动单元或不同维度组合。以共同粒度从多个组织业务过程合并度量的事实表称为合并事实表,需要注意的是,来自多个业务过程的事实合并到合并事实表时,它们必须具有同样等级的粒度。 

3、DataVault模型

Data Vault是Dan Linstedt发起创建的一种模型方法论,Data Vault是在ER模型的基础上衍生而来,模型设计的初衷是有效的组织基础数据层,使之易扩展、灵活的应对业务的变化,同时强调历史性、可追溯性和原子性,不要求对数据进行过度的一致性处理。同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。

Data Vault模型是一种中心辐射式模型,其设计重点围绕着业务键的集成模式。这些业务键是存储在多个系统中的、针对各种信息的键,用于定位和唯一标识记录或数据。

Data Vault模型包含三种基本结构 :

  • 中心表-Hub :唯一业务键的列表,唯一标识企业实际业务,企业的业务主体集合。 
  • 链接表-Link:表示中心表之间的关系,通过链接表串联整个企业的业务关联关系。
  • 卫星表- Satellite:历史的描述性数据,数据仓库中数据的真正载体。

1)中心表-Hub

图片

2)链接表-Link

图片

3)卫星表- Satellite

图片

4)Data Vault模型建模流程

  • 梳理所有主要实体 
  • 将有入边的实体定义为中心表 
  • 将没有入边切仅有一个出边的表定义为中心表 
  • 源苦衷没有入边且有两条或以上出边的表定义为连接表 
  • 将外键关系定义为链接表
图片

尖叫提示:Hub想像成人体的骨架,那么Link就是连接骨架的韧带组织, 而satelite就是骨架上的血肉。Data Vault是对ER模型更近一步的规范化,由于对数据的拆解和更偏向于基础数据组织,在处理分析类场景时相对复杂, 适合数仓低层构建,目前实际应用场景较少。

4、Anchor模型

Anchor是对Data Vault模型做了更近一步的规范会处理,初衷是为了 设计高度可扩展的模型,核心思想是所有的扩张只添加而不修改,于 是设计出的模型基本变成了k-v结构的模型,模型范式达到了6NF。

由于过度规范化,使用中牵涉到太多的join操作,目前木有实际案例,仅作了解。

四种模型总结

以上为四种基本的建模方法,当前主流建模方法为:ER模型、维度模型。

1)ER模型常用于OLTP数据库建模,应用到构建数仓时更偏重数据整合,站在企业整体考虑,将各个系统的数据按相似性一致性、合并处理,为数据分析、决策服务,但并不便于直接用来支持分析。

缺陷:需要全面梳理企业所有的业务和数据流,周期长,人员要求高。

2)维度建模是面向分析场景而生,针对分析场景构建数仓模型;重点关注快速、灵活的解决分析需求,同时能够提供大规模数据的快速响应性能。针对性强,主要应用于数据仓库构建和OLAP引擎低层数据模型。

优点:不需要完整的梳理企业业务流程和数据,实施周期根据主题边界而定,容易快速实现demo。

3)数仓模型的选择是灵活的,不局限于某一种模型方法。

4)数仓模型的设计也是灵活的,以实际需求场景为导向。

5)模型设计要兼顾灵活性、可扩展,而对终端用户透明性。

6)模型设计要考虑技术可靠性和实现成本。

常用建模工具

建模工具,一般企业以Erwin、powerdesigner、visio,甚至Excel等为主。也有些企业自行研发工具,或使用阿里等成熟套装组件产品。


Recommend

  • 7

    Bug管理系统UML2.0建模实例(四) 3.3 顺序图(实现模型)...

  • 8
    • www.chanpin100.com 4 years ago
    • Cache

    判断数据产品价值的第四种方法

    判断数据产品价值的第四种方法...

  • 6
    • www.v2ex.com 3 years ago
    • Cache

    [讨论] 数据仓库的建模

    V2EX  ›  数据库 [讨论] 数据仓库的建模   levelworm · 5 小时 26 分钟前 · 102 次点击

  • 5

    使用typeof进行判断语法:typeof 判断的数据 特点:可以准确判断基本数据类型,无法对复杂数据类型进行准确判断使用constructor进行判断语法:对象名.construc...

  • 5
    • www.yunyingpai.com 3 years ago
    • Cache

    四种方法,用数据挖掘潜力用户

    编辑导语:这篇文章系统地讲解了四种用数据挖掘潜力用户的办法,能帮助大家解决“到底怎么样的客户算是有潜力?”“又该怎么用数据挖掘?”的难题。

  • 2
    • blog.51cto.com 2 years ago
    • Cache

    数仓理论- 03 数据仓库建模

    4.1 OLTP系统建模方式 OLTP(Online Transaction Process )在线事务处理,一般业务数据库使用,目的是为业务提供存储以及数据操作,主要是面向数据的随机读写 减少冗余,保证数据的移植性,通常使用关系模型(ER模型),E...

  • 3

    不要因为正在运行 Linux 操作系统就味着您不会遇到问题。有一个备用计划总是好的,以防万一出现问题。也许一...

  • 7

    一众问题搞得小伙伴们死去活来,甚至工作好几年的小伙伴都没搞清楚过,尤其是大厂特别爱问这些问题。有些小伙伴甚至觉得这些都是形而上学,不懂这些我不一样搞了很多年开发?即使感兴趣的买了一本厚厚的数据仓库工具书也看不懂!那么实际数据仓库建模到底是什么,开...

  • 4

    数据仓库建模,就是数据的组织和存储方法,它强调从业务出发,将数据有序组织和存储起来。本文作者对数据仓库建模常用模型进行了分析,一起来看一下吧。

  • 8

    谈谈数据仓库中的数据建模优秀实践 作者:晓晓 2023-10-08 16:26:23 开发和生成数据库中使用的数据概念表示的过程称为数据建模。数据仓库上下文中的数据建模是创建将存储在数据仓库中的数据的逻辑表示的过程。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK