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

article/2025/9/28 12:00:57

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

5.2 维度建模

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

维度建模也是重点关注让用户快速完成需求分析且对于复杂查询及时响应,维度建模一般可以分为三种:

  • 星型模型
  • 雪花模型
  • 星座模型

其中最常用的其实是星型模型

5.2.1 背景

在多维分析的商业智能解决方案中,根据事实表和维度表的关系,又可将常见的模型分为星型模型,雪花型模型及星座模型。在设计逻辑型数据的模型的时候,就应考虑数据是按照星型模型,雪花型模型还是星座模型进行组织。

5.2.2 事实表和维度表

事实表(Fact Table)

指存储有事实记录的表,如系统日志、销售记录等;事实表的记录在不断地动态增长,所以它的体积通常远大于其他表。

事实表作为数据仓库建模的核心,需要根据业务过程来设计,包含了引用的维度和业务过程有关的度量。

作为度量业务过程的事实,一般为整型或浮点型的十进制数值,有可加性,半可加性和不可加性三种类型

可加

最灵活最有用的事实是完全可加,可加性度量可以按照与事实表关联的任意维度汇总。比如订单总金额

半可加

半可加度量可以对某些维度汇总,但不能对所有维度汇总。差额是常见的半可加事实,除了时间维度外,他们可以跨所有维度进行操作。(比如每天的余额加起来毫无意义)

不可加

一些度量是完全不可加的,例如:比率。对非可加事实,一种好的方法是,分解为可加的组件来实现聚集

维度表

维度表(Dimension Table)或维表,有时也称查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等的属性)、地点表(包含国家、省/州、城市等属性)等。维度是维度建模的基础和灵魂。

优点

  • 缩小了事实表的大小。
  • 便于维度的管理和维护,增加、删除和修改维度的属性,不必对事实表的大量记录进行改动。
  • 维度表可以为多个事实表重用,以减少重复工作。

下钻

下钻是商业用户分析数据的最基本的方法。下钻仅需要在查询上增加一个行头指针,新行的头指针是一个维度属性,附加了sql语言的group by表达式,属性可以来自任何与查询使用的事实表关联的维度,下钻不需要预先存在层次的定义,或者是下钻路径。

退化维度

有时,维度除了主键外没有其他内容,例如,当某一发票包含多个数据项时,数据项事实行继承了发票的所有描述性维度外键,发票除了外键无其他项,但发票数量仍然是在此数据项级别的合法维度键。这种退化维度被放入事实表中,清楚的表明没有关联的维度表,退化维度常见于交易和累计快照事实表中。

5.2.3 事实表与维表的关系

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

5.2.4 星型模型

星形模型中有一张事实表,以及零个或多个维度表,事实表与维度表通过主键外键相关联,维度表之间没有关联,当所有维表都直接连接到“ 事实表”上时,整个图解就像星星一样,故将该模型称为星型模型。星形模型是最简单,也是最常用的模型。由于星形模型只有一张大表,因此它相比于其他模型更适合于大数据处理。其他模型可以通过一定的转换,变为星形模型。

星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,如在地域维度表中,存在国家 A 省 B 的城市 C 以及国家 A 省 B 的城市 D 两条记录,那么国家 A 和省 B 的信息分别存储了两次,即存在冗余。

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

5.2.5 雪花模型

当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的维度表,形成一些局部的 " 层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。如图,将地域维表又分解为国家,省份,城市等维表。它的优点是 : 通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。

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

5.2.6 星座模型

星座模型是由星型模型延伸而来,星型模型是基于一张事实表而星座模式是基于多张事实表,并且共享维度表信息,这种模型往往应用于数据关系比星型模型和雪花模型更复杂的场合。星座模型需要多个事实表共享维度表,因而可以视为星形模型的集合,故亦被称为星系模型

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

5.2.7 对比

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

  • 星型模型因为数据的冗余所以很多统计查询不需要做外部的连接,因此一般情况下效率比雪花型模型要高。
  • 星型结构不用考虑很多正规化的因素,设计与实现都比较简单。
  • 雪花型模型由于去除了冗余,有些统计就需要通过表的联接才能产生,所以效率比较低。
  • 正规化也是一种比较复杂的过程,相应的数据库结构设计、数据的 ETL、以及后期的维护都要复杂一些。

5.2.8 小结

通过对比,我们可以发现数据仓库大多数时候是比较适合使用星型模型构建底层数据Hive表,通过大量的冗余来减少表查询的次数从而提升查询效率,星型模型对OLAP的分析引擎支持比较友好,这一点在Kylin中比较能体现。而雪花模型在关系型数据库中如MySQL,Oracle中非常常见,尤其像电商的数据库表。在数据仓库中雪花模型和星座模型的应用场景比较少,但也不是没有,所以在具体设计的时候,可以考虑是不是能结合两者的优点参与设计,以此达到设计的最优化目的。

5.2.9 建模原则

  • 高内聚和低辑合

将业务相近或者相关、粒度相同的数据设计为一个逻辑或者物理模型:将高概率同 时访问的数据放一起 ,将低概率同时访问的数据分开存储。

  • 核心模型与扩展模型分离

建立核心模型与扩展模型体系,核心模型包括的宇段支持常用的核心业务,扩展模型包括的字段支持个性化或少量应用的需要 ,不能让扩展模型的宇段过度侵人核心模型,以免破坏核心模型的架构简洁性与可维护性。

  • 公共处理逻辑下沉及单一

越是底层公用的处理逻辑越应该在数据调度依赖的底层进行封装与实现,不要让公用的处理逻辑暴露给应用层实现,不要让公共逻辑多处同时存在。

  • 成本与性能平衡

适当的数据冗余可换取查询和刷新性能,不宜过度冗余与数据复制。

  • 数据可回滚

不改变处理逻辑,不修改代码的情况下重跑任务结果不变

  • 一致性

字段命名及定义必须一致

  • 命名清晰、可理解

表命名需清晰、一致,表名需易于使用方理解

5.2.10 星型模型设计步骤

1. 选择需要进行分析决策的业务过程 比如下单

2. 选择粒度。在事件分析中,我们要预判所有分析需要细分的程度,从而决定选择的粒度。比如订单粒度,粒度是维度的一个组合。

3. 识别维表。选择好粒度之后,就需要基于此粒度设计维表,包括维度属性,用于分析时进行分组和筛选。

4. 选择事实。确定分析需要衡量的指标


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

相关文章

绘制彩色图的颜色直方图

计数直方图 在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实战案例 爬虫可以理解为爬取数据,所谓爬取数据就是: 获取请求返回的页面信息,筛选出我们想要的数据 如果想要爬取数据&#…

android爬虫框架jsoup,Android笔记之JSoup爬虫入门

前言 闲扯一些没用的,写这篇文章之前是有点私心的,因为之前评论某简书大v的文章是鸡汤,瞬间被拉黑,连个解释和说明的机会都没有,文章语言干涩,内容平平,于是就好奇到底是些什么样的人喜欢和吹捧…

Java的Jsoup爬虫

Java的Jsoup爬虫,爬携程酒店评分,保存数据库中 前言一、Jsoup爬虫pom二、逻辑代码部分1.首先我们要先确定爬取的东西,这边我就以携程的酒店评分为例子。2.Jsoup进行解析具体要求爬的内容3.接下来我们就是将爬取的数据存入数据库中 总结 前言 …

使用Jsoup爬虫爬取相关图片

一、Jsoup概述 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 主要功能: 1. 从一个URL,文件或字符串…