数据仓库,这几乎是所有大数据开发面试必问的话题。比如数据仓库的分层架构?为什么需要数据仓库建模?数据仓库建模的原则是什么?结合业务实例说明数据仓库建模的步骤和注意事项?什么是缓变维度?构建维度应该如何选择,有什么原则,主键应该如何设计等等?好多问题把小伙伴搞死了,连工作几年的小伙伴都想不通,尤其是大厂爱问这些问题。甚至有朋友认为这些都是玄学。如果我不懂这些,我已经开发了很多年了?就算有兴趣买了一本厚厚的数据仓库参考书,也看不懂!那么数据仓库建模在实践中到底是什么,开发者又应该掌握什么呢?我们先看看古今中外对数据仓库的官方定义:数据仓库,英文名称DataWarehouse,可简写为DW或DWH。数据仓库是一个战略集合,为企业各级决策过程的所有类型的数据提供支持。它是为分析报告和决策支持目的而创建的。为需要商业智能的企业提供有关业务流程改进、监控时间、成本、质量和控制的指导。数据仓库之父BillInmon在1991年出版的《构建数据仓库》一书中首次提出了被广泛接受的数据仓库定义。Inmon将数据仓库描述为面向主题的、集成的、时变的、非易失性的集合用于支持经理决策过程的数据。简单来说,实际情况是一个企业有很多数据源,比如有的业务数据存储在Mysql、PG数据库中,有的存储在Oracle中,有的日志存储在Ftp、Nginx服务器等,而有些是外部收集的爬虫数据等等。那么对于企业来说,沉淀了这么多数据,如何把这些数据放在一起,进行数据融合,数据分析,为企业挖掘数据价值呢?这些不同的数据来源、不同的数据存储格式、不同的数据更新周期,如果让你对企业的数据进行整合分析,你应该怎么做?首先,是否要把这些不同的数据以统一的格式和一定的规范存储在一起,然后通过特定的工具进行数据计算和分析?所以对于企业来说,把企业各种数据源的数据一起存储和计算的地方就叫做数据仓库(俗称俗称),所以数据仓库本质上就是把各种数据源集成在一起,存储和处理数据,在早期大数据还没有发展起来的时候,企业数据仓库的载体一般是Oracle。当时主要是为企业做BI报表(BusinessIntelligence商业智能)。后来随着企业的数字化和互联网的发展,企业收集的数据越来越多,发现原有的技术架构已经不能满足业务存储和分析的需要。所以现在就有了基于Hadoop生态的数据仓库。数据仓库建模的目的?为什么要数据仓库建模?大数据的数据仓库建模就是通过建模的方法更好地组织和存储数据,从而在性能、成本、效率和数据质量之间找到最佳平衡点。一般考虑以下四点:访问性能:能够快速查询所需数据,减少数据I/O。数据成本:减少不必要的数据冗余,实现计算结果的数据复用,降低大数据系统中的存储和计算成本。使用效率:提升用户应用体验,提高数据使用效率。数据质量:改善数据统计的不一致性,降低数据计算错误的可能性,提供优质一致的数据接入平台。常见的数据建模方法数据仓库的本质是从数据库衍生出来的,因此数据仓库的建模也在不断发展。从最早的借鉴数据库的范式建模,到逐渐提出维度建模、DataVault模型、Anchor模型等,随着模型的进步对建模的要求越来越高,越需要满足3NF、4NF等.但是对于数据仓库来说,目前主流还是维度建模,会和范式建模混合。数据仓库建模方法论可分为:ParadigmModeling、DimensionalModeling、DataVaultModel、AnchorModel。四种常见的建模方法1、范式建模(E-R模型)将事物抽象为“实体”、“属性”和“关系”来表示数据关联和事物描述;entity:Entity,relationship:Relationship,这种数据ER模型的抽象建模,通常称为ER实体-关系模型。ER模型是数据库设计的理论基础。目前几乎所有的OLTP系统设计都采用ER模型建模方法,建模方法需要满足3NF。BillInom提出的数据仓库理论推荐使用ER关系模型进行建模,BI架构提出分层架构。数据仓库的底层ods和dwd大多采用ER关系模型设计。然而,随着企业数据的高速增长和复杂化,对所有数据仓库都采用ER模型建模越来越不合适。为什么,因为它的循序渐进、三种范式等,不适合现代复杂多变的商业组织。E-R模型建模(满足3NF)的步骤如下:抽象主题(教师,课程)梳理主题之间的关系(一个教师可以教授多门课程,一个班级可以由多个教师教授)梳理属性学科(教师:教师姓名、性别、教育背景等)绘制E-R关系图2、维度建模维度建模由数据仓库大师RalphKimball提出,是数据领域最流行的数据仓库建模经典仓库工程。维度建模根据分析决策的需要建立模型,构建的数据模型为分析需要服务。因此,它着眼于如何更快地解决用户的分析需求,同时对大规模、复杂的查询也有更好的响应性能。维度建模是面向分析的。为了提高查询性能,可以加入数据冗余和反规范化设计技术。RalphKimball提出对数据仓库的维度进行建模,将数据仓库中的表分为两种:事实表和维度表。1)事实表抽象了ER模型中的实体、关系、属性三类。在现实世界中,每一个操作事件基本上都发生在实体之间,随着这样的操作事件的发生,都会产生一个可度量的值,这个过程会产生一个事实表来存储每一个可度量的事件。以电商行业为例:电商场景:一次购买事件,涉及主体包括客户、商品、商家,产生的可测量值包括商品的数量、金额、件数。事实表按作用粒度可分为事务事实表、周期快照事实表和累积快照事实表。注意:这里需要注意的是,在设计事实表时,必须注意一个事实表只能有一个粒度,不同粒度的事实不能建立在同一个事实表中。事务事实表用于承载事务数据,通常粒度比较低。它是面向事务的,它的粒度是每一行对应一个事务。它是最细粒度的事实表,例如产品交易事实和ATM交易事实。周期快照事实表按照一定的时间间隔(每天、每月)捕获业务活动的执行情况。一旦加载到事实表中,就不会再次更新。它是对交易事实表的补充。用于记录有规律、固定时间间隔累计的业务数据,通常粒度比较大,比如月平均账户余额事实表。累积快照事实表用于记录具有时间跨度的业务流程的全过程信息,每个生命周期一行。通常,这种类型的事实表比较少见。2)维度表维度,顾名思义,就是业务流程发生或分析的角度。比如从颜色和尺寸的角度比较手机的外观,从cpu和内存的角度比较手机的性能维度。维度表通常有一个主键。在ER模型中,实体是客观存在的事物,具有自身的描述性属性。属性通常是文本的和描述性的。这些描述称为维度。比如商品,单主键:商品ID,属性包括产地、颜色、材质、尺码、单价等,但不是所有的属性都必须是文本,比如单价、尺码,都是描述性的在数字类型。日常生活中主要的维度抽象包括:时间维度表、地理区域维度表等。案例:某电商平台经常需要分析订单。以某宝的购物订单为例,采用维度建模的方式进行模型设计。该模型涉及事实表作为订单表和订单明细表。维度包括产品维度、用户维度、商户维度、地域维度和时间维度。产品维度:产品ID、产品名称、产品类型、单价、产地等用户维度:用户ID、姓名、性别、年龄、户籍、职业、学历等时间维度:日期ID等图片、日期、星期几、初/中/晚、是否周末、是否节假日等。维度分为:①退化维度(DegenerateDimension)在维度类型中,有一个重要的维度叫做退化维度,又称退化维度。这个维度是指直接把一些简单的维度放在事实表中。退化维度是维度建模领域中一个非常重要的概念。它在理解维度建模方面起着非常重要的作用。退化维度一般可用于分析中的分组。②缓变维度(SlowlyChangingDimensions)维度的属性并不是一直不变的,它会随着时间的流逝而缓慢变化,而这种随时间变化的维度一般称为缓变维度(SCD)。例如,在员工表的部门维度中,员工的部门可能每两年调整一次。3)维度建模模型的分类维度建模按数据组织的类型可分为星型模型、雪花模型和星座模型。①星型模型星型模型主要由维度表和事实表组成,以事实表为中心,所有维度都与事实表直接相关,呈星形分布。②雪花模型在雪花模型中,在星型模型的基础上,维表与其他维表相关联。该机型维护成本高,性能较差,一般不推荐使用。尤其是基于Hadoop系统构建数据仓库时,减少join就意味着减少shuffle,性能差距会很大。尖叫提醒:所以从上面可以看出:星型模型和雪花模型的主要区别在于维度表的拆分。对于雪花模型,维度表更加规范,普遍符合3NF,有效减少数据冗余,维度表之间不会有关联。星型模型一般采用降维操作,反规范化,不符合3NF。冗余是为了避免模型过于复杂,提高易用性和分析效率,效率比较高。③星座模型星座模型是星型模型的扩展,多个事实表共享维度表。在数据仓库模型构建的后期,大部分的维度建模都是星座模型。4)维度建模步骤维度建模步骤:选择业务流程->声明粒度->确定维度->确定事实。它旨在关注数据粒度、维度设计和事实表设计。报表的粒度是业务的最小活动单元或不同维度的组合。以通用粒度组合来自多个组织业务流程的度量的事实表称为合并事实表。应该注意的是,当来自多个业务流程的事实被合并到一个合并的事实表中时,它们必须具有相同的粒度级别。3.DataVault模型DataVault是由DanLinstedt首创和创建的模型方法论。DataVault源自ER模型。模型设计的初衷是有效组织基础数据层,使其易于扩展和灵活应对业务变化,同时强调历史性、可追溯性和原子性,不要求对数据进行过多的一致性处理。同时,设计的出发点也是为了实现数据集成,而不是直接利用数据进行决策分析。DataVault模型是围绕业务密钥的集成模式设计的中心辐射模型。这些业务密钥是存储在多个系统中的各种信息的密钥,用于定位和唯一标识记录或数据。DataVault模型包含三个基本结构:Centraltable-Hub:唯一业务键列表,唯一标识企业的实际业务,是企业业务实体的集合。链接表-Link:表示中心表之间的关系,通过链接表将整个企业的业务关系串联起来。卫星表-Satellite:历史描述性数据,数据仓库中数据的真实载体。1)中心表-Hub2)链接表-Link3)卫星表-Satellite4)DataVault模型建模过程梳理所有主要实体定义有入边的实体为中心表定义没有入边只有一个出边的表作为源中心表,没有入边,有两条或多条出边的表定义为链表,外键关系定义为链表。尖叫提醒:Hub想象成成人人体的骨骼,然后Link就是连接骨骼的韧带组织。而卫星就是骨骼上的血肉。DataVault是ER模型的进一步标准化。由于对数据的拆解,偏向于基础数据组织,处理分析场景相对复杂,适用于数据仓库的底层构建。目前实际应用场景很少。4.Anchor模型Anchor是DataVault模型的进一步规范过程。初衷是设计一个高度可扩展的模型。核心思想是所有的扩展只加不修改,所以设计出来的模型基本上变成了k-v结构的模型建立起来,模型范式达到了6NF。由于过于标准化,使用中涉及到太多join操作,目前没有实际案例,仅供了解。四种模型总结以上是四种基本的建模方法。目前主流的建模方法有:ER模型和维度模型。1)ER模型常用于OLTP数据库建模。当应用于构建数据仓库时,它更侧重于数据集成。从企业整体的角度,将各个系统的数据按照相似性和一致性进行组合处理,为数据分析和决策服务。直接用支持解析不方便。缺点:需要对企业所有业务和数据流进行全面梳理,周期长,对人员要求高。2)维度建模为分析场景而生,为分析场景构建数据仓库模型;专注于快速、灵活地解决分析需求,能够为大规模数据提供快速响应性能。针对性强,主要用于数据仓库构建和OLAP引擎底层数据模型。优点:无需对企业的业务流程和数据进行彻底梳理,根据主题边界确定实施周期,易于快速实施demo。3)数据仓库模型的选择灵活,不局限于某种模型方法。4)数据仓库模型的设计也比较灵活,以实际需求场景为导向。5)模型设计应考虑灵活性、可扩展性和对最终用户的透明性。6)模型设计应考虑技术可靠性和实施成本。常用建模工具建模工具,一般企业以Erwin、powerdesigner、visio,甚至Excel为主要工具。也有一些公司自己开发工具,或者使用成熟的封装组件,比如阿里。
