浅谈数据仓库维度建模

article/2025/9/28 10:00:18

浅谈数据仓库维度建模流程

谈到Big Data就离不开数据仓库、数据集市等概念,而谈到数据仓库、数据集市,就又离不开数据仓库设计的方法,维度建模则是其中的典型。与维度建模相对立的则是范式建模,范式建模常用于传统的DB关系型数据库中。范式建模讲究三范式,讲究原子性,一致性,隔离性,持久性。讲究最小原子列不可再分,讲究消除部分依赖,y=f(x),y依赖于x,且x的任一真子集x’不满足对应唯一y。讲究消除传递依赖,当x---->y(y!------>x),z------>x(x!------>z)时则不满足3FN。而维度建模则是与之相对,维度建模不讲究范式,不讲究关系型,不讲究事务,讲究主题域,讲究总线矩阵,讲究维度和事实,讲究…

附上之前所画一张流程图
在这里插入图片描述
之前画此图时是在前辈的帮助下画出,但也是一知半解,其中很多东西不能完全理解,直至现在也是大概明白其中流程,但更多细节值得深入学习。今日不谈后面的ETL过程、数据治理等,就谈谈前期的维度建模。近日又购得Kimball的维度建模,和阿里大数据之路二书,希望能够沉下心深入学习,数据产品要想打造的好,令人满意,则数据内容一定要质量过关。数据内容过关了,面对怎样的数据产出都会有自信,自己的数据没有问题。

维度建模以用户的可理解性和查询性能为目标,建立始终如一服务于组织的分析需求设计。维度建模是DW/BI系统项目成功的关键。是一种趋向于最终用户对数据仓库进行查询的设计技术,是围绕性能和易理解性构建的。

谈到维度建模则一定要说到两个较为核心的概念则是维度和事实。维度表和事实表经常听说,那能否对维度和事实有个更好的定义呢。
事实:既成事实,表示对业务数据的度量,事实很多时候是数字类型的,可以进行计算和聚合。维度:观察数据事物的角度,维度通常是一组层次关系或者描述信息,用来定义事实。

维度建模最开始要定好主题域,而建立主题域更多时候按业务流程来建立。不同的主题域可能共享一些维度,则这些维度也称为一致性维度。术语“一致性维度”源自Kimball,指的是具有相同属性和内容的维度,拥有这些一致性维度,可以提高数据操作的性能和数据一致性,如几个主题域之间共享维度的复制。维度建模将客观世界划分为度量和上下文,维度建模按照业务流程即主题域建立。

维度数据模型建模过程
1.选择业务流程
确认哪些业务处理流程是数据仓库应该涵盖到的,也是第一步的基础。比如要设计一家公司的销售情况,则与该公司的销售相关的业务流程都应该关注到,然后描述业务流程(如何描述也是一个问题BPMN?UML?),这个时候产出可以有业务流程图。

2.声明粒度
再确认哪些业务流程应该是涵盖到的之后,则应该声明粒度,声明粒度应该在确认维度和事实之前,因为只有先定义好粒度后面的维度和事实才能与定义的粒度保持一致,(他们说)一个事实所对应的所有维度设计中强制实行粒度一致性是保证数据仓库应用性能和易用性的关键。这里的粒度用于确认事实中表示的是什么,要定义好粒度大小。在给定业务获取数据时,原始粒度是最低级别的粒度,(他们说)建议从原始粒度数据开始设计,因为原始记录能够满足无法预期的用户查询。轻汇总和重度汇总后的数据粒度对优化查询性能很重要,但这样的粒度设计往往不能满足对细节数据的查询需求。不同的事实可以有不同的粒度,但同一事实中也不要混用多种不同的粒度。

3.确认维度
确认模型的维度是第三步,维度的粒度需要和第二步声明的粒度保持一致。维度表是事实表设计的基础。典型的维度都是名称(标签),如日期、商店、用户等。维度表存储了某一维度所有相关的数据。例如日期维度应该包含年、季、月、周等。城市维度表包含所有城市等。

4.确认事实
最后一步则是确认事实,这一步识别数字化的度量,构成事实表的记录。用户可直接通过事实表的访问获取数据仓库存储的数据。大部分事实表的度量都是数字类型的,可进行计算。

星型模型和雪花模型
谈到维度建模也不能不谈到星型模型和雪花模型了。之前一直以为两者差不多,雪花模型不过是星型模型的拓展而已。最近才发现二者思想挺不一样的。星型模型(容易想到一星四射)事实表关联维度表,维度表与维度表之间没有关联,这样的设计,冗余大(秉持着能用钱解决的问题都不是问题的原则,这一点反而被鼓励),查询快,扩展性差,是反规范化数据。而雪花模型是把星型模型中的维度表进行规范化处理,进一步分解到附加表中。把维度表规范化的具体做法:把低基数的属性从从维度表中移除并形成单独的表。(性别属于低基数,主键具有唯一值是高基数)在雪花模式中,一个维度被规范化成多个关联的维度表,而在星型模式中,每一个维度由一个单一的维度表所表示。一个规范化的维度对应一组具有层次关系的维度表,而事实表作为雪花模式的子表,存在具有层次关系的多个父表。

星型模型和雪花模型的对比
1.数据优化
星形模型:实用的是反规范化数据。在星形模型中,维度直接指的是事实表,业务层级不会通过维度之间的参照完整性来部署。不能保证数据完整性,一次性地插入或更新操作可能会造成数据异常。对于分析需求不够灵活。它更偏重于为特定目的建造数据视图。
雪花模型:使用的是规范化数据,也就是说数据在数据库内部是组织好的,以便消除冗余,因此它能够有效地减少数据量。通过引用完整性,其业务层级和维度都将存储在数据模型之中。规范化后的多层次维度表,可以很方便支持业务实体多对多关系,很容易进行全面的数据分析。
2.业务模型
星型模型:主键是一个单独的唯一键(数据属性),为特殊数据所选择。外键(参考属性)仅仅是一个表中的字段,用来匹配其他维度表中的主键。
雪花模型:数据模型的业务层级是由一个不同维度表主键-外键的关系来代表的。而在星形模型中,所有必要的维度表在事实表中都只拥有外键。
3.性能
星型模型:星形模型在维度表、事实表之间的连接较少,所以简化了查询,相应的简化了业务报表的逻辑。获得查询性能、能更快速的进行聚合。
雪花模型:雪花模型在维度表、事实表之间的连接很多,因此性能方面会比较低。举个例子,如果你想要知道Advertiser 的详细信息,雪花模型就会请求许多信息,比如Advertiser Name、ID以及那些广告主和客户表的地址需要连接起来,然后再与事实表连接。(但是,规范化的维度属性可以节省存储空间。)
4.ETL
星型模型:星形模型加载维度表,不需要再维度之间添加附属模型,因此ETL就相对简单,而且可以实现高度的并行化。
雪花模型:雪花模型加载数据集市,因此ETL操作在设计上更加复杂,而且由于附属模型的限制,不能并行化。
5.总结
星型模型:星形模型用来做指标分析更适合,比如“给定的一个客户他们的收入是多少?
雪花模型:雪花模型使得维度分析更加容易,比如“针对特定的广告主,有哪些客户或者公司是在线的?”

部分名词:
总线矩阵的必要性
企业数据仓库总线矩阵是DW/BI系统的一个总体数据架构,如果我们在建立数据仓库的时候,只考虑单独的某个业务系统的数据建设,则无法满足一致性的目标,例如:相互有联系的系统数据的维度不同导致关联复杂或者关联不上,数据之间互相成为了孤岛,对于后期的扩展或者整个数仓的建设都是巨大的阻碍。
总线矩阵举例:
那么总线矩阵就给我们提供了这么一个工具,每一行是一个业务过程,每一列是这个业务过程可能涉及到的一些维度,比如说上图中的零售业务过程,这块涉及到的公用维度包括:日期维度,产品维度,商店维度,促销维度,客户维度,雇员(销售员)维度。
再看仓库库存业务过程,包含了日期维度,产品维度,仓库维度。
通过日期维度或者产品维度或者仓库维度,我们可以将每天的某种商品的库存数据和销售数据关联起来进行分析,这就是一致性维度的好处,假设这两部分数据没有经过提前规划,各部分数据都有不同的维表,那这两部分数据想要联系起来太难了。

退化维度
退化维度的维度表可以被剔除,从而简化维度数据仓库的模式。因为简单的模式比复杂的更容易理解,也有更好的查询性能。
当一个维度没有数据仓库需要的任何数据时就可以退化此维度。需要把退化维度的相关数据迁移到事实表中,然后删除退化的维度。
维度属性也可以存储到事实表中,这种存储到事实表中的维度列被称为“退化维度”。与其他存储在维表中的维度一样 ,退化维度也可以用来进行事实表的过滤查询、实现聚合操作等。那么究竟怎么定义退化维度呢?比如说订单id,这种量级很大的维度,没必要用一张维度表来进行存储,而我们进行数据查询或者数据过滤的时候又非常需要,所以这种就冗余在事实表里面,这种就叫退化维度,citycode这种我们也会冗余在事实表里面,但是它有对应的维度表,所以它不是退化维度。
kimball书中描述退化维度如下:操作型事务控制号码,例如:订单号码、发票号码、提货单号码通常产生空的维度并且宝石为事务事实表中的退化维度。退化维度是没有对应维度表的维度键。
维度退化在事实表中有利于使用,一般一个维度键都有对应的维表,如果退化在事实表中,可以减少关联次数,并且退化维可以用于group by操作,进行分组统计。
还可以这么理解:就是这个东西没有对应的维表,没有修饰它的属性,但是呢,通过它你可以获取一些内容,一些事实,比如说订单编号,你可以获得这个订单里面包含哪些商品,对应的付款人是谁之类的。

缓慢变化维:维度建模的数据仓库中,有一个概念叫Slowly Changing Dimensions,中文一般翻译成“缓慢变化维”,经常被简写为SCD。缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维,并且把处理维度表的历史变化信息的问题称为处理缓慢变化维的问题,有时也简称为处理SCD的问题。
处理缓慢变化维的方法通常分为三种方式:
第一种方式是直接覆盖原值。这样处理,最容易实现,但是没有保留历史数据,无法分析历史变化信息。第一种方式通常简称为“TYPE 1”。
第二种方式是添加维度行。这样处理,需要代理键的支持。实现方式是当有维度属性发生变化时,生成一条新的维度记录,主键是新分配的代理键,通过自然键可以和原维度记录保持关联。第二种方式通常简称为“TYPE 2”。
第三种方式是添加属性列。这种处理的实现方式是对于需要分析历史信息的属性添加一列,来记录该属性变化前的值,而本属性字段使用TYPE 1来直接覆盖。这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息。第三种方式通常简称为“TYPE 3”。
在实际建模中,我们可以联合使用三种方式,也可以对一个维度表中的不同属性使用不同的方式,这些,都需要根据实际情况来决定,但目的都是一样的,就是能够支持方便的分析历史变化情况。

维度建模对数据内容的建设,思想大于技术,思想引导技术。目前大部分理解来源书本、文章、讲解。来自项目实战、自己经验的部分少之又少、很多时候只是一个别人思想、别人文章、别人技术、别人讲解的搬运工、尚不能理解搬运的财富。望后面能有自己的理解。


http://chatgpt.dhexx.cn/article/C1G5bBEb.shtml

相关文章

维度建模+实例

https://www.cnblogs.com/suheng01/p/13522677.html 第一步:选择业务过程 1、通过对业务需求以及可用数据源的综合考虑,确定对哪种业务过程开展建模工作 2、建立的第一个维度模型应该是一个最有影响的模型——它应该对最紧迫的业务问题作出回答&#…

数据仓库-维度建模

目录 1. 数据仓库定义 2. 数据仓库和数据库 3. 数仓分层 4. 维度建模 4.1 维度建模 VS 第三范式 4.2 维度建模设计过程 5. 粒度概念 6. 事实概念 6.1 事实表技术 7. 维度概念 7.1 维度表技术 8. 数据关系模型 8.1 星型模型 8.2 星座模型 8.3 雪花模型 9. 写在最…

维度建模详解

文章目录 1 维度设计1.1 代理键(太复杂,不推荐)1.2 稳定维度1.3 缓慢渐变维 > 拉链表1.4 维度表的拆分、合并 2 事实表设计2.1 明细事实表(dwd)2.1.2 案例:2.1.3 存储方案2.1.4 事实拉链表示例: 2.2 聚合事实表(dws)2.2.1 分类2.2.2 案例 …

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

作者基于多年的大数据处理经验,当前管理着100PB数据仓库和2000节点的集群。持续系统化给大家分享一下关于数据仓库建设的经验总结。本系列既有数据仓库的形而上学理论体系,也有结合公司业务的实践,既有大厂如阿里巴巴,京东&#x…

维度建模入门

1 概念 维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数据集市建模的方法。数据集市可以理解为是一种"小型数据仓库"。 1.1 维度表(dimension) 维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况, 你可以选择按类别来进行分…

数据仓库——维度建模

数据仓库——维度建模 在维度建模中,将度量称为“事实”,将环境描述为“维度” 维度表 维度表概念 维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实”,将环境描述为“维度”,维度是用于分析事实所需要…

维度建模基本流程总结

一、维度建模基本流程图 数据RD进行业务调研和数据现状调研,产出符合相关模版规范的业务知识文档和数据现状文档。数据PM也会调研相关业务产出需求设计文档,三方参与需求评审,评审通过后基建数据RD进行需求拆解,产出技术方案&…

维度建模的基本理论

维度建模 围绕三个问题来展开 1、怎么组织数据仓库中的数据? 2、怎么组织才能使得数据的使用最为方便和便捷? 3、怎么组织才能使得数据仓库具有良好的可扩展性和可维护性? 维度建模两大派系 Bill Inmon(数据仓库之父) 的企业…

Kimball 维度建模理论

一、维度建模分为两种表 事实表 存在这样一些数据,如行为记录,操作记录,订单,日志等,都可以作为事实表 特点:每条数据都有一个唯一键,数据通常来说不会更新,随着时间的增加而增加维…

维度建模示例

以库存模块和零售模块这两个模块来谈一谈维度建模的相关事项梳理库存业务中的表的构造与设计思想梳理一下缓慢变化维的处理方法与优缺这篇博客计划用周末来完成,只能简单的讨论一下建模概况,从维度建模这本书中摘录出一些重要的知识点,对于维度建模这本书的报告计划在5.1之前完…

浅谈维度建模

前言:本人作为BI方向相关的数据系统后端开发,虽然不是从事具体的数仓方面的工作,但是对维度建模过程有个大致了解,可加深对于系统现有的架构设计的理解(比如数据模型构建,指标库的作用)&#xf…

关系建模与维度建模

一、OLTP与OLAP 当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-linetransaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。 OLTP是传统的关系型数据库的主要应用,主要是…

数仓维度建模实例

简介 本文将介绍维度建模理论和基于自己经验的实施步骤 数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据....只有数据模型将数据有序的组织和存储起来之后,大数据才能得到高性能、低成本、高效率、高质量的使用。一般业务…

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

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

数仓:维度建模

1.背景 数据仓库的核心是展现层和提供优质的服务。ETL 及其规范、分层等所做的一切都是为了一个更清晰易用的展现层。 2.数仓架构的原则: 1、底层业务的数据驱动为导向同时结合业务需求驱动 2、便于数据分析屏蔽底层复杂业务简单、完整、集成的将数据暴露给分析层…

数仓建模(维度建模)

目录 一、什么是建模?(为什么建模) 二、模型的好处 三、建模的方法 四、维度建模 4.1 基本概念 4.2 为啥选择维度建模(优缺点) 4.2.1 优点 4.2.2 缺点 4.3 维度建模-星型模型 4.4 维度建模-维度 4.4.1 维度之…

维度建模的三种模式

1.星型模式 星型模式是维度模型中最简单的形式,也是数据仓库以及数据集市开发中使用最广泛的形式。 星型模式由事实表和维度表组成,一个星型模式中可以有一个或多个事实表,每个事实表引用任意数量的维度表。 星型模式的物理模型像一颗星星的形…

维度建模概述

1、维度建模 维度建模以分析决策的需求出发构建模型,构建的数据模型为数据分析服务。它重点解决如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。 因此,说白了,所谓的维度建模就是一种组织数据仓库的形式、模型…

ETL自学之路-02(维度建模)

一、维度建模的基本概念 1.1维度建模的定义 维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数据集市建模的方法,数据集市可以理解为是一种小型的数据仓库。 1.2 维度表(dimension) 维度表示你…

维度建模

维度建模 维度模型简介 维度建模被广泛接受为数据分析的首选技术,因为它同时满足了两个需求: 1.向用户交付可以理解的数据 2.提供快速查询的性能 维度建模实体建模第三范式(3NF)建模适合表连接以及聚合计算的查询请求&#xff1…