数仓建模理论 之 维度建模

news2025/1/20 5:10:50

说起维度建模,你不得不知道以下几个概念:事实表、维度表、星型模型、雪花模型、星座模型

==================================================================

维度建模

Ralph Kimball推崇数据集市的集合为数据仓库,同时也提出了对数据集市的维度建模,将数据仓库中的表划分为事实表、维度表两种类型。

1,事实表

在ER模型中抽象出了有实体、关系、属性三种类别,在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,而这个过程就产生了一个事实表,存储了每一个可度量的事件。

电商场景案例:

一次购买事件,涉及主体包括客户、商品、商家,

产生的可度量值 包括 商品数量、金额、件数等。

2,维度表

维度,顾名思义,看待事物的角度。比如从颜色、尺寸的角度来比较手机的外观,从cpu、内存等较比比较手机性能。

维度表一般为单一主键,在ER模型中,实体为客观存在的事物,会带有自己的描述性属性,属性一般为文本性、描述性的,这些描述被称为维度。

比如商品,单一主键:商品ID,属性包括产地、颜色、材质、尺寸、单价等,但并非属性一定是文本,比如单价、尺寸,均为数值型描述性的。

日常主要的维度抽象包括:商品维度表,时间维度表、地理区域维度表等。

区域维度表:

区域维度表:在金融行业,大部分项目都是用这个维度方案。

对于大数据的项目,你可以根据实际情况,决定用哪种维度建模方法。

3,星型模型

星型模型:一般是事实表和N个维度表直接关联

你可以用星型模型(如下图)

比如下图:

4,雪花模型

雪花模型一般是事实表存在和维度表间接关联:需要维度表再次关联一张维度表

你可以用雪花模型(如下图):

但是如果你非得要用星型模型,也可以多张维度表进行关联,形成一张维度表,这样子就可以把雪花模型变为星型模型(如下图):

5,星座模型

星座模型一般是多个事实表共用N张维度表。

你可以用星座模型(如下图):

6,雪花模型与星型模型对比:

 6.1,建模方式不同

(如下图):

所以由上可以看出:

星型模型和雪花模型主要区别就是对维度表的拆分,对于雪花模型,维度表的涉及更加规范,一般符合3NF;

而星型模型,一般采用降维的操作,利用冗余来避免模型过于复杂,提高易用性和分析效率

6.2,冗余:

雪花模型符合业务逻辑设计,采用3NF设计,有效降低数据冗余;

星型模型的维度表设计不符合3NF,反规范化,维度表之间不会直接相关,牺 牲部分存储空间

6.3,性能:

雪花模型由于存在维度间的关联,采用3NF降低冗余,通常在使用过程中,需要连接更多的维度表,导致性能偏低;

星型模型反三范式,采用降 维的操作将维度整合,以存储空间为代价有效降低维度表连接数,性能较雪 花模型高

6.4,ETL:

雪花模型符合业务ER模型设计原则,在ETL过程中相对简单,但是由于附属模型的限制,ETL任务并行化较低;

星型模型在设计维度表时反范式设 计,所以在ETL过程中整合业务数据到维度表有一定难度,但由于避免附属维 度,可并行化处理

7,维度建模-业务案例:

某电商平台,经常需要对订单进行分析,以某宝的购物订单为例,以维度建模的方式设计该模型。

涉及到事实表为订单表、订单明细表,维度包括商品维度、用户维度、商家维度、区域维度、时间维度。

商品维度:商品ID、商品名称、商品种类、单价、产地等。

用户维度:用户ID、姓名、性别、年龄、常住地、职业、学历等。

时间维度:日期ID、日期、周几、上/中/下旬、是否周末、是否假期等优惠券:券ID、券类别、优惠金额。

订单中包含的度量:商品件数、总金额、总减免;

描述性属性:下单时间、结算时间、订单状态等。

订单明细包含度量:商品ID、件数、单价、减免金额;

描述性属性:入购物车时间、状态。

建模图形如下:

上面的案例,对于商品再拆分出厂家、品类;

用户的常住地再拆分出区域维度,改造为雪花模型。

好了,关于维度建模,就分享到这里,你可以有一个比较清晰的认识。天天开心,也欢迎各位小伙伴一键三连。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1682071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器插件Video Speed Controller(视频倍速播放),与网页自身快捷键冲突/重复/叠加的解决办法

浏览器插件Video Speed Controller(视频倍速播放),与网站自身快捷键冲突/重复/叠加的解决办法 插件介绍问题曾今尝试的办法今日发现插件列表中打开Video Speed Controller的设置设置页面翻到下面,打开实验性功能。将需要屏蔽的原网…

Invicti v24.5.0 for Windows - Web 应用程序安全测试

Invicti v24.5.0 for Windows - Web 应用程序安全测试 Invicti Standard v24.5.0 - 7 May 2024 请访问原文链接:Invicti v24.5.0 for Windows - Web 应用程序安全测试,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.o…

huggingface笔记:使用accelerate加速

1 介绍 随着模型规模的增大,并行处理已成为在有限硬件上训练大型模型和提高训练速度的重要策略。Hugging Face 创建了Accelerate库,帮助用户在任何类型的分布式环境中轻松训练Transformers模型,无论是单机多GPU还是跨多机的多GPU 2 创建Acce…

详解动态规划之01背包问题及其空间压缩(图文并茂+例题讲解)

1. 动态规划问题的本质 记忆化地暴力搜索所有可能性来得到问题的解 我们常常会遇到一些问题,需要我们在n次操作,且每次操作有k种选择时,求出最终需要的最小或最大代价。处理类似的问题,我们一般需要遍历所有的可能性(相当于走一遍…

(规格参考)ADP5360ACBZ-1-R7 电量计 电池管理IC,ADP5072ACBZ 双通道直流开关稳压器,ADL5903ACPZN 射频检测器

1、ADP5360ACBZ-1-R7:具有超低功耗电量计、电池保护功能的先进电池管理PMIC 功能:电池保护 电池化学成份:锂离子/聚合物 电池数:1 故障保护:超温,过压 接口:I2C 工作温度:-40C ~ 85…

安全且高效数据传输技术:Filelink跨网文件传输

Filelink跨网文件传输是一种高效、便捷的数据传输技术,它打破了传统文件传输方式的局限,实现了跨网络、跨平台的无缝传输。在企业跨网文件传输,Filelink都以其卓越的性能和稳定性赢得了广泛的认可。 在以往的文件传输过程中,我们常…

分享如何通过定时任务调用lighthouse前端测试脚本+在持续集成测试中调用lighthouse前端测试脚本

最近写了个小工具来优化lighthouse在实际工作中的使用,具体实现了:通过定时任务调用前端测试脚本在持续集成测试中调用前端测试脚本。由于在公司中已经应用,所以就不能提供源码了,这里简单说一下实现思路,希望可以帮助…

数仓架构之为什么要进行数仓分层

数仓分层这个概念想必大家都很熟悉,不管是在实际的开发工作当中会用的,还是在面试官面试你的时候会问到:你之前的项目是按照什么分层的,分哪几层,数仓分层有什么好处,举个栗子说说。 简而言之,…

Metasploit基本命令

1. 开启控制台 命令: msfconsole2. 搜索模块 命令: search ms17-010 # 模块名这里以搜索 ms17-010 为例, auxiliary 开头的为测试模块,也就是 POC,看看存不存在漏洞, exploit 开头的为攻击模块 3. 调…

数据结构(十六)----外部排序

目录 一.外部排序 1.外部排序的原理 2.外部排序时间开销的分析 3.外部排序的优化 (1)多路归并 (2)减少初始归并段数量 二.败者树 三.置换-选择排序 四.最佳归并树 一.外部排序 1.外部排序的原理 若想清楚外部排序的原理…

Java GUI-登录注册功能实现

Java GUI-登录注册功能实现 技术栈: MySQL8.0JFrameSwing 功能描述: 登录:输入用户名、密码点击登录调转到登录页面注册:点击注册按钮,输入用户名和密码注册成功并返回注册页面注:本项目登录注册没有实现…

高考志愿系统-模拟填报模块分析

1.获取所有志愿列表 接口: http://localhost:81/dev-api/college_entrance/aspiration/list 默认传参pageNum1&pageSize10, 请求方法: GET 接口内方法同样首先设置分页信息,然后修改查询出的所有志愿信息列表中的学生id属性 2.详细志愿查看 接口…

YOLOv5改进 | Neck | 添加双向特征金字塔BiFPN【小白轻松上手 | 论文必备】

🚀🚀🚀本专栏所有的改进均可成功执行🚀🚀🚀 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法,YOLOv5可能比YOLOv8的效果更好。但是针对不同的数据…

cypress的安装使用

cypress npm install -g cnpm --registryhttps://registry.npm.taobao.org cypress的启动打开 npx cypress open js函数的回调 function print(string,callback){console.log(string)callback() } print("a",function(){print("b",function(){console.l…

STL <string>--------String的OJ题目

1.题目截图(把字符串转换成整数----atoi) 1.1题目解析(在代码里) class Solution { public:int myAtoi(string str) {// 100% 97.45% int len str.size();if(len 0)return 0;int i 0, flag 1, isSignal 0, res 0;while(…

QJsonObject构建指定的JSON结构

如今我们生活处处用到AI,AI 带给了我们很多方便,但作为程序员我们,虽然不能开发什么 AI,但时不时需要调用国内四大平台的AI接口。很多平台接口都是用JSON作为数据载体传送。 如下接口数据 ,有些人不知道怎么构建。 1,…

[C++核心编程-08]----C++类和对象之运算符重载

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

黑马guli商城项目初始化-SpringCloud微服务项目初始化使用SpringCloudAlibaba快速搭建分布式系统

视频教程:https://www.bilibili.com/video/BV1np4y1C7Yf?p4&spm_id_frompageDriver&vd_source0b3904471b2f8a3a133e05bd42f729a9 这里写目录标题 1.服务架构图2.初始化目录结构3.初始化数据库4.使用逆向工程项目生成数据库CRUD5.创建工具项目6.配置mybati…

CentOS7使用Docker安装Redis图文教程

1.拉取Redis镜像 这里制定了版本,不指定默认latest最新版 docker pull redis:6.0.8提示信息如下即为下载成功 2.上传配置文件 官方配置文件(找自己对应的版本):reids.conf 或者将如下配置文件命名为redis.conf,上…

面试题草稿

目录 一.JAVA基础 1.八个基本数据类型,长,占几个字节,取值范围是多少。 基本类型: 2.面向对象的特征 1. 封装(Encapsulation) 3.实现多态的几种方式 4.什么叫装箱什么叫拆箱 5.装拆箱分别…