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

标签: | 发表时间:2022-10-26 08:51 | 作者:
出处:https://dbaplus.cn
数据仓库,这个几乎是所有大数据开发面试必问的话题。比如数据仓库的分层架构?为什么需要数据仓库建模?数据仓库建模的原则是什么?结合业务举例说明数据仓库建模的步骤,以及注意事项?什么是缓慢变化维?维度该如何选择建设,原则是什么,主键如何设计等等?

 

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

 

数据仓库前世今生

 

来一起看个官方定义:数据仓库,英文名称为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等为主。也有些企业自行研发工具,或使用阿里等成熟套装组件产品。

 

作者丨涤生

相关 [实例 数据仓库 建模] 推荐:

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

- -
数据仓库,这个几乎是所有大数据开发面试必问的话题. 结合业务举例说明数据仓库建模的步骤,以及注意事项. 维度该如何选择建设,原则是什么,主键如何设计等等. 一众问题搞得小伙伴们死去活来,甚至工作好几年的小伙伴都没搞清楚过,尤其是大厂特别爱问这些问题. 有些小伙伴甚至觉得这些都是形而上学,不懂这些我不一样搞了很多年开发.

数据仓库

- Ran - Linux@SOHU
翻译:马少兵、曾怀东、朱翊然、林业. 尽管服务器存储、处理能力得到有效的提高,以及服务器价格的降低,让人们能够负担起大量的服务器,但是商业软件应用和监控工具快速的增加,还是使得人们被大量的数据所困扰. 在数据仓库领域中的许多系统管理员、应用开发者,以及初级数据库管理员发现,他们正在处理“海量数据”-不管你准备与否-都会有好多不熟悉的术语,概念或工具.

数据仓库项目中的数据建模和ETL日志体系 - ThoughtWorks洞见

- -
对于一个软件来说,分为功能需求和跨功能需求(Cross-Functional Requirements, CFR). 功能需求,一般是我们可以看见的,就是实现了什么功能,提供了什么服务. 而跨功能需求,是隐性的,容易被忽略,通常被称为非功能需求(Non-Functional Requirements, NFR).

数据仓库概念

- - 互联网 - ITeye博客
数据仓库:是一个数据库环境,它提供用户用于决策支持的当前和历史数据,这些数据在传统的数据库中不方便得到. 特点:面向主题,集成的,相对稳定的,反应历史变化的. 组成:数据仓库的数据库,数据抽取工具,元数据,访问工具,数据集市,数据仓库管理,信息发布系统. 数据挖掘:就是从大量数据中获取有效的,新颖的,潜在有用的,最终可理解的模式的过程.

大数据仓库-kudu

- - 数据库 - ITeye博客
数据仓库里面存储引擎是非常重要的,存储引擎的好坏,基本决定了整个数仓的基础. cloudera公司最近发布了一个kudu存储引擎. 按照cloudera的想法,kudu的出现是为了解决,hbase,parquet不能兼顾分析和更新的需求,所以需要一个新的存储引擎可以同时支持高吞吐的分析应用以及少量更新的应用.

数据仓库的设计与开发

- - 数据库 - ITeye博客
     数据仓库系统的设计与开发. 1)       收集和分析业务需求.   用户需求,管理人员需求. 2)       建立数据模型和数据仓库的物理设计.   概念模型,逻辑模型,物理模型. 3)       定义数据源. 数据源面向应用,不是面向主题,而且数据源之间存在多个不一致的情况,所以必须在已有的系统中定义记录系统(内容正确,在多个数据源间起决定作用的操作型数据源).

oracle数据仓库设计指南

- - 数据库 - ITeye博客
ODS(Operational Data Store)是数据仓库体系结构中的一个可选部分,ODS具备数据仓库的部分特征和OLTP系统的部分特征,它是“面向主题的、集成的、当前或接近当前的、不断变化的”数据.     一般在带有ODS的系统体系结构中,ODS都设计为如下几个作用:. 1 )    在业务系统和数据仓库之间形成一个隔离层.

[原]数据仓库元数据管理

- - oycn2010的专栏
元数据管理, 简单的做就是EXCEL结合版本管理等传统工具管理, 专业点就用专门的元数据管理工具;. 数据字典--> 数据知识库. 业务元数据,技术元数据,管理元数据. 参照:SAP元数据管理平台:按业务(角色)分类,按技术类型分类(特征,关键值,DSO,InfoCube),数据流程图. 按照传统的定义,元数据(Metadata)是关于数据的数据.

[原]数据仓库构建步骤

- - oycn2010的专栏
 即确定数据分析或前端展现的主题(例:某年某月某地区的啤酒销售情况). 主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑..  确定主题后,需要考虑分析的技术指标(例:年销售额等等). 它们一般为数据值型数据,其中有些度量值不可以汇总;些可以汇总起来,以便为分析者提供有用的信息.

数据仓库事实表分类

- - 行业应用 - ITeye博客
1)在数据仓库领域有一个概念叫Transaction fact table,中文一般翻译为“事务事实表”. 事务事实表是维度建模的数据仓库中三种基本类型事实表中的一种,另外两种分别是周期快照事实表和累积快照事实表. 事务事实表与周期快照事实表、累积快照事实表使用相同的一致性维度,但是它们在描述业务事实方面是有着非常大的差异的.