维度建模概述

article/2025/9/28 11:12:30

1、维度建模

维度建模以分析决策的需求出发构建模型,构建的数据模型为数据分析服务。它重点解决如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
因此,说白了,所谓的维度建模就是一种组织数据仓库的形式、模型,用这种方式组织搭建的数据仓库,对快速支持数据分析有着巨大的帮助。目前也是比较主流的数仓模型了。

2、维度建模的基础知识

1)事实与事实表

事实表是指其中保存了大量业务度量数据的表,是数仓最核心的表。

事实表中的度量值一般称为事实。通常,最有用的事实就是数字类型的事实和可加类型的事实。

事实表的粒度,决定了数据仓库中数据的详细程度。

一般事实表中只存放数字或一些flag用来统计,如:销售金额、成本等。另外,通常事实表中的数据不允许修改,新的数据只是简单地添加到事实表中。

事实表特点:数据量庞大、列数少、经常变化。因为事实表是一张业务表,业务数据是不断变化的。

  • 事务事实表:该类型表的一行对应空间或时间上某点的度量事件。与粒度同层次的事实表,可以直接将事实字段进行Sum、Count等聚合操作。
  • 周期快照事实表:该类型表中的每行汇总了发生在某一标准周期,如某天、某周、某月的多个度量事件。这类表非常适合跟踪长期的过程,如银行账户和其他形式的财务报表。
  • 无事实事实表:没有度量事实,仅记录一系列某一时刻发生的多维实体。非事实型事实表**:通常用来跟踪一些时间或者说明某些活动的范围。
  • 累积快照事实表:行汇总了发生在过程开始和结束之间可预测步骤内的度量事件。管道或工作流过程(履行订单、索赔过程),都可以在此类事实表中被建模。

2)维度与维度表

维度表是用户来分析数据的窗口,比如时间、地区、用户等。

维度表中包含事实表中记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息。

维度表等特点:很多描述性的列,行数较少,内容较固定。比如地域,省市区县这些内容基本不会变化。

关于维度表,主要看看缓慢变化维。

什么是缓慢变化维?在现实世界中,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维。

比如,在一个零售业数据仓库中,事实表存着销售人员的销售记录,某天一个销售人员从北京分公司调到上海分公司了,那么如何来保存、处理这个变化呢?

如果我们要统计北京地区或上海地区的总销售情况的时候,这个销售人员的销售记录应该算在北京还是算在上海?当然是调离前的算在北京,调离后的算在上海,但是如何标记这个销售人员所属区域?这里就需要处理一下这个维度的数据,即我们缓慢变化维需要做的事情。

处理缓慢变化维的三种方式:

  • 直接覆盖原值:这个比较简单粗暴。但是如果想要做历史分析的话,就比较难了,一般不太覆盖。
  • 增加属性列:增加一个新列,来记录变化。这种适合变化比较少的情况,如果经常变化,增加无限量个字段明显不合适。
  • 增加维度行:直接增加一条新纪录,并用一个专门的字段(可以是时间、版本、是否生效等等)进行标识,区分哪个数据是最新的。

3)粒度

粒度是指数据仓库的数据单位中,保存数据的细化程度的级别。简单点来看,在实事表中一条记录所表达的业务细节,就是粒度。

通常,为了便捷的下钻分析,我们都会使用到最小粒度。比如订单表中,最小粒度就是一条订单的记录。

使用最小粒度的优点

  • 可以频繁的ETL操作
  • 很多数据挖掘需要最小粒度数据
  • 方便向下钻取

当然,使用最小粒度也有缺点

  • 存储和维护代价较高
  • 需要进一步构建汇总事实表来支持汇总数据查询

4)切片、切块、旋转

在这里插入图片描述

  • 切片:切片:从多维数组中选定一个二维子集,切出一个“平面” 。比如选中上图的2011年,这就是一个切片。
  • 切块:从多维数组中选定一个三维子集,切出一个“立方体” 。比如上图中,年度选择了2011、2012,然后看所有的数据内容,这就是一个切块。
  • 旋转:改变一个报告(页面)显示的维方向。

5)钻取(上钻、下钻)

根据维层次,改变数据分析的粒度,就是钻取分析,主要包括上钻(也叫上卷)和下钻。

  • 下钻:从汇总数据深入到细节数据进行观察或增加新维
  • 上钻(上卷):从某一维上将低层次的细节数据概括到高层次的汇总数据或减少维数
  • 钻透:直接下钻到最明细的数据

3、维度建模常用模型

1)星型模型

事实表被维度表所包围,且维度表没有被新的表连接。

每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。

2)雪花模型

有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上,就像雪花一样。

雪花模型去除了数据冗余,更贴近与业务。尽可能降低数据存储量以及联合较小的维表来改善查询性能。

但是雪花模型分析数据时,需要关联的内容越来越多,操作比较复杂。但数据的存储量下来了。

3)星座模型

无论是星型模型还是雪花模型,都是单事实表的情况。但通常来讲,实践当中大部分情况都是多事实表的。这时就是需要星座模型了。

所谓星座模型,是多个事实表共享维度表, 因而可以视为星型模型的集合,故亦称星座模型(星系模型)。

星座模型是数据仓库最常使用的模型。

3、维度建模与范式建模

1)范式建模

范式建模是数仓之父 Inmon 所倡导的,“数据仓库”这个词就是这位大师所定义的,这种建模方式在范式理论上符合 3NF,这里的 3NF 与 OLTP 中的 3NF 还是有点区别的:关系数据库中的 3NF 是针对具体的业务流程的实体对象关系抽象,而数据仓库的 3NF 是站在企业角度面向主题的抽象。

Inmon 模型从流程上看是自上而下的,自上而下指的是数据的流向,“上”即数据的上游,“下”即数据的下游,即从分散异构的数据源 -> 数据仓库 -> 数据集市。以数据源头为导向,然后一步步探索获取尽量符合预期的数据,因为数据源往往是异构的,所以会更加强调数据的清洗工作,将数据抽取为实体-关系模型,并不强调事实表和维度表的概念。

范式建模就是将源表抽取为实体表,关系表,所以范式建模即是实体关系(ER)模型。数据没有冗余,符合三范式设计规范。

2)维度建模

Kimball 模型从流程上看是自下而上的,即从数据集市-> 数据仓库 -> 分散异构的数据源。Kimball 是以最终任务为导向,将数据按照目标拆分出不同的表需求,数据会抽取为事实-维度模型,数据源经 ETL 转化为事实表和维度表导入数据集市,以星型模型或雪花模型等方式构建维度数据仓库,架构体系中,数据集市与数据仓库是紧密结合的,数据集市是数据仓库中一个逻辑上的主题域。

使用 Kimball 模式,需要将数据抽取为事实表和维度表

在 Kimball 的维度建模中,不需要单独维护数据关系表,因为关系已经冗余在事实表和维度表中。

3)两种建模方式对比

范式建模:范式建模的优点:能够结合业务系统的数据模型,较方便的实现数据仓库的模型;同一份数据只存放在一个地方,没有数据冗余,保证了数据一致性;数据解耦,方便维护。但同时也带来了缺点:表的数量多;查询时关联表较多使得查询性能降低。

维度建模优点是模型结构简单,面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计,开发周期短,能够快速迭代。缺点就是数据会大量冗余,预处理阶段开销大,后期维护麻烦;还有一个问题就是不能保证数据口径一致性。
在这里插入图片描述

4)混合使用范式建模和维度建模

范式建模必须符合准三范式设计规范,如果使用混合建模,则源表也需要符合范式建模的限制,即源数据须为操作型或事务型系统的数据。通过 ETL 抽取转换和加载到数据仓库的 ODS 层,ODS 层数据与源数据是保持一致的,所以 ODS 层数据也是符合范式设计规范的,通过 ODS 的数据,利用范式建模方法,建设原子数据的数据仓库 EDW,然后基于 EDW,利用维度建模方法建设数据集市。

结合两种建模方式的各自规范,混合建模按照“松耦合、层次化”的基本架构原则进行实施。混合数据仓库架构方法主要包含以下关键步骤:业务需求分步构建、分层次保存数据、整合原子级的数据标准、维护一致性维度等。

参考文章: https://www.easemob.com/news/6520


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

相关文章

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

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

维度建模

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

数据模型建设-维度建模详解

5.2 维度建模 维度建模是一种将大量数据结构化的逻辑设计手段,包含维度和指标,它不像ER模型目的是消除冗余数据,维度建模是面向分析,最终目的是提高查询性能,所以会增加数据冗余,并且违反三范式。 维度建…

绘制彩色图的颜色直方图

计数直方图 在Opencv中已经集成了关于彩色图像直方图计算的函数,形式如下: import cv2cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])参数 images:array-like类型,要计算的图像(单张或多张)&a…

matplotlib 图像颜色直方图

参考学习 定义 cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) ->hist imaes:输入的图像channels:选择图像的通道mask:掩膜,是一个大小和image一样的np数组,其中把需要处理的部分指定为1,不需要处理的…

OpenCV—python 颜色直方图与直方图均衡化

文章目录 一、颜色直方图1.1 使用opencv展示直方图1.2 使用matplotlib绘制 二、直方图均衡化2.1 全局直方图均衡化与自适应均衡化2.2 使用查找表来拉伸直方图2.3 直方图均衡化—RGB2YCrCb2.4 直方图均衡化—RGB2YUV 一、颜色直方图 1.1 使用opencv展示直方图 函数 cv2.calcHis…

颜色直方图和颜色矩

来源:http://www.xuebuyuan.com/2019161.html 1、颜色直方图 颜色直方图所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。 …

颜色直方图 灰度图彩色图

1.读取照片 cv2.imread(图片路径,cv2.IMREAD_COLOR) 2.定义color变量(b,g,r) 代表三个通道 3.彩色图像为例 for i,col in enumerate(color):遍历…

基于MATLAB颜色直方图的图像检索

基于颜色直方图的图像检索 概述 在过去的十几年间,有许多知名机构都对图像检索系统进行了深入的研究,病开发出了相应的检索系统,例如IBM Almaden研究中心研制的QBIC系统,Virage公司研发的VIRAGE系统,麻省理工大学多媒体…

pyimagesearch-4 聪明的女孩:计算机视觉和图像搜索引擎使用颜色直方图的指南

原文链接 It’s…it’s a histogram. – Dr. Grant 好吧,也许这不是确切的引用。但是,如果格兰特博士知道颜色直方图的力量,我认为他会同样激动。 更重要的是,当电力耗尽时,直方图不会让游客吃东西。 那么&#xff…

OpenCV 学习笔记(颜色直方图计算 calcHist)

OpenCV 学习笔记(颜色直方图计算 calcHist) 最近在看一本OpenCV 的书,书名是 《OpenCV 3 Computer Vision Application Programming Cookbook (third edition)》,里面给了很多很实用的代码片段。最近这几篇…

Opencv绘制HSV颜色直方图

一. 使用Opencv绘制HSV颜色直方图 所用的函数 cvCvtColor 可在: 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图 文章中查找相关介绍 所使用的结构体: CvHistogram 以及函数: cvCalcHist CvCreateHist cvGetMinMaxHistValue cv…

基于颜色直方图优化的图像增强方法

最近改图像颜色迁移的论文,审稿人要求补充基于直方图优化的方法细节。趁此机会,我重新下载了相关文献,决定重新学习下该类方法,并把一些细节记录在本篇博客中,供交流学习。 目录 1. 前言 2. 背景知识 3. 颜色变换 4. 颜…

[OpenCV实战]52 在OpenCV中使用颜色直方图

颜色直方图是一种常见的图像特征,顾名思义颜色直方图就是用来反映图像颜色组成分布的直方图。颜色直方图的横轴表示像素值或像素值范围,纵轴表示该像素值范围内像素点的个数或出现频率。颜色直方图属于计算机视觉中的基础概念,其常常被应用于…

关于颜色直方图

一、颜色距 转自:https://blog.csdn.net/jaych/article/details/51137341 1、颜色距离 颜色距离指的是两个颜色之间的差距,通常距离越大,两个颜色相差越大,反之,两个颜色越相近。在计算颜色距离时,有类似…

图像特征分析---颜色特征描述---颜色距和颜色直方图

一、颜色距 转自:https://blog.csdn.net/jaych/article/details/51137341 1、颜色距离颜色距离指的是两个颜色之间的差距,通常距离越大,两个颜色相差越大,反之,两个颜色越相近。在计算颜色距离时,有类似计算…

颜色特征提取(一)——颜色直方图(opencv实现)

直方图——再讲颜色直方图之前,先简单介绍一下直方图。 直方图作为一种简单有效的基于统计特性的特征描述子,在计算机视觉领域广泛使用。它的优点主要体现在两个方面:一是对于任意一个图像区域,直方图特征的提取简单方便;其二,直…

一般颜色直方图

颜色直方图是一种用于图像处理和分析的图表,它可以显示图像中不同颜色的数量。通常,颜色直方图会将颜色分成几个色调区间,每个区间对应一个条形图,其中条形图的高度表示该色调区间中的像素数量。通过颜色直方图,你可以…

网络爬虫Jsoup

简介 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、…

【Java】Jsoup爬虫快速入门案例

1、前言 该技术博客是根据B站狂神说Java教程的笔记总结,希望能为大家带来帮助! 2、Jsoup实战案例 爬虫可以理解为爬取数据,所谓爬取数据就是: 获取请求返回的页面信息,筛选出我们想要的数据 如果想要爬取数据&#…