数据仓库之维度建模
维度建模(Dimensional Modeling)是一种用于数据仓库设计的方法,旨在优化查询性能并提高数据的可读性。它通过组织数据为事实表和维度表的形式,提供直观的、易于理解的数据模型,使业务用户能够轻松地进行数据分析和查询。
维度建模的基本概念
-
事实表(Fact Table)
- 定义:存储与业务过程相关的度量数据(Measures),如销售金额、订单数量等。
- 特征:
- 度量:数值型数据,可以进行聚合(如求和、平均)。
- 外键:引用多个维度表的主键。
- 记录量大:每条记录代表一个业务事件或事务。
-
维度表(Dimension Table)
- 定义:存储业务实体的描述性信息,为事实表中的度量提供上下文。
- 特征:
- 主键:单一列,通常是代理键(Surrogate Key)。
- 属性:多个描述性的属性(如客户姓名、产品类别、日期等)。
- 记录量小:相对事实表记录数较少,且变化缓慢。
维度建模的步骤
- 选择业务过程:确定需要建模的业务过程,如销售、订单、库存等。
- 声明粒度:确定事实表的粒度,即一条事实记录所代表的业务事件的详细程度。
- 识别维度:确定与业务过程相关的维度,如时间、地点、产品、客户等。
- 识别事实:确定需要在事实表中存储的度量数据。
维度建模的典型模式
-
星形模型(Star Schema)
- 结构:一个中心事实表,周围连接多个维度表,结构类似星形。
- 特点:结构简单、查询性能高、易于理解和实现。
- 示例:销售数据仓库的星形模型。
-
雪花模型(Snowflake Schema)
- 结构:星形模型的扩展,维度表进行规范化处理,进一步分解为子维度表。
- 特点:数据冗余减少、存储空间节省、查询性能稍低于星形模型。
- 示例:产品维度表进一步分解为产品类别表、品牌表等。
-
星座模型(Constellation Schema)
- 结构:多个事实表共享维度表,形成复杂的多星形结构。
- 特点:能够支持多个业务过程的分析需求,灵活性高。
- 示例:销售和订单数据仓库共享时间和客户维度。
维度建模的设计技巧
-
代理键(Surrogate Key)
- 定义:人工生成的唯一标识符,作为维度表的主键。
- 优点:避免使用业务主键,提高数据一致性和查询性能。
- 实现:通常使用自增序列或 UUID 作为代理键。
-
缓慢变化维度(Slowly Changing Dimensions, SCD)
- 类型:
- SCD Type 1:直接覆盖旧值,简单快速。
- SCD Type 2:新增记录,保留历史数据,适合需要追踪变化的场景。
- SCD Type 3:增加字段,存储历史和当前值,适合需要追踪最近一次变化的场景。
- 选择:根据业务需求选择合适的 SCD 类型。
- 类型:
-
退化维度(Degenerate Dimension, DD)
- 定义:事实表中没有对应维度表的维度,通常是业务事务号或标识符。
- 用途:简化模型设计,减少维度表的数量。
-
多值维度(Multi-valued Dimension)
- 定义:一个事实记录与多个维度值相关联。
- 实现:通常通过桥接表(Bridge Table)解决多对多关系。
- 示例:一个订单可以包含多个产品。
-
度量聚合(Aggregated Measures)
- 定义:对度量数据进行预聚合,如月度销售总额、季度利润等。
- 优点:提高查询性能,减少运行时的计算量。
- 实现:在事实表中增加预聚合列或创建汇总事实表。
维度建模的示例
假设我们有一个零售商的销售数据仓库,以下是一个星形模型的示例:
销售事实表(Sales Fact Table)
时间键(Time Key) | 产品键(Product Key) | 客户键(Customer Key) | 销售金额(Sales Amount) | 销售数量(Sales Quantity) |
---|---|---|---|---|
20220101 | 1001 | 5001 | 1000.00 | 10 |
20220101 | 1002 | 5002 | 1500.00 | 15 |
... | ... | ... | ... | ... |
时间维度表(Time Dimension Table)
时间键(Time Key) | 年(Year) | 季度(Quarter) | 月(Month) | 日(Day) |
---|---|---|---|---|
20220101 | 2022 | Q1 | 1 | 1 |
20220102 | 2022 | Q1 | 1 | 2 |
... | ... | ... | ... | ... |
产品维度表(Product Dimension Table)
产品键(Product Key) | 产品名称(Product Name) | 类别(Category) | 品牌(Brand) |
---|---|---|---|
1001 | 产品A | 电子产品 | 品牌X |
1002 | 产品B | 家居用品 | 品牌Y |
... | ... | ... | ... |
客户维度表(Customer Dimension Table)
客户键(Customer Key) | 客户姓名(Customer Name) | 地址(Address) | 联系方式(Contact Info) |
---|---|---|---|
5001 | 客户甲 | 地址A | 联系方式A |
5002 | 客户乙 | 地址B | 联系方式B |
... | ... | ... | ... |
维度建模的优缺点
优点
- 高效查询:模型设计优化了查询性能,适合复杂的分析查询。
- 易于理解:维度建模结构简单直观,业务用户容易理解。
- 灵活扩展:新增维度和事实表较为方便,支持业务需求变化。
缺点
- 维护成本:需要处理缓慢变化维度,数据清洗和转换过程复杂。
- 数据冗余:维度表中可能存在数据冗余,增加存储开销。
- 复杂性:随着业务复杂度增加,模型设计和维护变得更加复杂。
维度建模是数据仓库设计中的核心技术,通过合理的模型设计,可以显著提升数据分析和查询的效率,为业务决策提供强有力的支持。
相关文章:
数据仓库之维度建模
维度建模(Dimensional Modeling)是一种用于数据仓库设计的方法,旨在优化查询性能并提高数据的可读性。它通过组织数据为事实表和维度表的形式,提供直观的、易于理解的数据模型,使业务用户能够轻松地进行数据分析和查询…...

解决远程服务器连接报错
最近使用服务器进行数据库连接和使用的时候出现了一个报错: Error response from daemon: Conflict. The container name “/mysql” is already in use by container “1bd3733123219372ea7c9377913da661bb621156d518b0306df93cdcceabb8c4”. You have to remove …...
通过电脑查看Wi-Fi密码的方法,提供三种方式
式一: 右击桌面右下角的网络图标,依次选择【网络和Internet设置】、【WLAN】、【网络和共享中心】。点击已连接的无线网络。依次点击【无线属性】、【安全】,勾选下方【显示字符】即可。 方式二: 在开始菜单输入“cmd”进入命令…...

Nvidia 目前的市值为 3.01 万亿美元,超过苹果Apple
人工智能的繁荣将英伟达的市值推高到足以使其成为全球第二大最有价值的公司。 英伟达已成为全球第二大最有价值的公司。周三下午,这家芯片制造巨头的市值达到 3.01 万亿美元,领先于苹果公司的 3 万亿美元。 喜好儿网AIGC专区:https://heehe…...

用langchain搭配最新模型ollama打造属于自己的gpt
langchain 前段时间去玩了一下langchain,熟悉了一下大模型的基本概念,使用等。前段时间meta的ollama模型发布了3.0,感觉还是比较强大的,在了解过后,自己去用前后端代码,调用ollama模型搭建了一个本地的gpt应用。 核心逻辑 开始搭…...

工业互联网基本概念及关键技术(295页PPT)
资料介绍: 工业互联网的核心是通过工业互联网平台把设备、生产线、工厂、供应商、产品和客户紧密地连接融合起来。这种连接能够形成跨设备、跨系统、跨厂区、跨地区的互联互通,从而提高效率,推动整个制造服务体系智能化。同时,工…...

Python pandas openpyxl excel合并单元格,设置边框,背景色
Python pandas openpyxl excel合并单元格,设置边框,背景色 1. 效果图2. 源码参考 1. 效果图 pandas设置单元格背景色,字体颜色,边框 openpyxl合并单元格,设置丰富的字体 2. 源码 # excel数字与列名互转 import o…...

【vue3|第7期】 toRefs 与 toRef 的深入剖析
日期:2024年6月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方ÿ…...
git代码冲突处理软件P4Merge
文章目录 1. 下载安装2. 配置脚本参考链接 1. 下载安装 下载地址:https://www.perforce.com/downloads/helix-visual-client-p4v 下载教程:http://blog.csdn.net/wirelessqa/article/details/9035215 这里下载之前需要注册。 2. 配置脚本 编写一个全局…...
Unity物体材质属性Offset动态偏移
Unity物体材质属性Offset动态偏移 MeshRenderer mr;float offset;public float scrollSpeed 0.5F;private void Start(){mr GetComponent<MeshRenderer>();}void Update(){offset -Time.time * scrollSpeed;mr.material.mainTextureOffset new Vector2(0, -offset);}…...

【数据结构】筛选法建堆
💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…...

DevExpress Installed
一、What’s Installed 统一安装程序将DevExpress控件和库注册到Visual Studio中,并安装DevExpress实用工具、演示应用程序和IDE插件。 Visual Studio工具箱中的DevExpress控件 Visual Studio中的DevExpress菜单 Demo Applications 演示应用程序 Launch the Demo…...
解决QT QMessageBox 弹出需点击两次才能关闭问题
放个链接不迷路:添加链接描述...
Milvus--向量数据库
Milvus 是一个开源的向量数据库,专为高维向量数据的存储、查询和检索而设计。它支持多种类型的向量数据,如浮点数向量、整数向量等,并且提供了强大的向量相似度计算功能。Milvus采用分布式架构,可以轻松地扩展到大规模数据集&…...

php质量工具系列之PHPCPD
PHPCPD 用于检测重复代码,直观的说就是复制粘贴再稍微改改 该工具作者已经 停止维护 安装 composer global require --dev sebastian/phpcpd执行 phpcpd --log-pmd phpcpd_result.xml ./app参数介绍 --log-pmd 将结果保存在phpcpd_result.xml 中 ./app 是phpcpd扫…...

Android14 WMS-窗口绘制之relayoutWindow流程(二)-Server端
本文接着如下文章往下讲 Android14 WMS-窗口绘制之relayoutWindow流程(一)-Client端-CSDN博客 然后就到了Server端WMS的核心实现方法relayoutWindow里 WindowManagerService.java - OpenGrok cross reference for /frameworks/base/services/core/java/com/android/server…...
安全测试 之 安全漏洞:SQL注入
1. 背景 持续学习安全测试ing,安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品是否符合安全需求定义和产品质量标准的过程。也就是说安全测试是建立在功能测试的基础上进行的测试。 2. SQL…...
CUDA和驱动版本之间的对应关系
这个之前总结过,可是不太好找,专门写一篇博客再总结一下: 1. CUDA 12.5 Release Notes — Release Notes 12.5 documentation 相信很多朋友有一样的需求。...
MDK(μVsion3)问题总结及解决方法
问题 1:MDK 工具的 CARM 编译器? 我原来对 CARM 编译器比较熟悉,想用 CARM 编译器编译工程,但是却弹出一个不能执 行“cc”的错误,到 KEIL 网站查下才知道原因:由于 CARM 编译器是比较老的编译器࿰…...

手眼标定学习笔记
目录 标定代码: 手眼标定原理学习 什么是手眼标定 手眼标定的目的 eye in hand eye to hand AXXB问题的求解 标定代码: GitHub - pumpkin-ws/HandEyeCalib 推荐博文: https://zhuanlan.zhihu.com/p/486592374 手眼标定原理学习 参…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...