大数据数仓建模基础理论【维度表、事实表、数仓分层及示例】
文章目录
- 什么是数仓仓库建模?
- ER 模型
- 三范式
- 维度建模
- 事实表
- 事实表类型
- 维度表
- 维度表类型
- 数仓分层
- ODS 源数据层
- ODS 层表示例
- DWD 明细数据层
- DWD 层表示例
- DIM 公共维度层
- DIM 层表示例
- DWS 数据汇总层
- DWS 层表数据
- ADS 数据应用层
- ADS 层接口示例
- 数仓分层的优势
什么是数仓仓库建模?
数据仓库建模(Data Warehouse Modeling)是指在数据仓库(Data Warehouse)中组织和设计数据的过程,以便支持数据分析、报告和决策制定。
数据仓库是一个集成的、主题导向的数据存储,用于存储来自不同来源的数据,经过清洗、转换和集成,以支持业务分析和决策。主要目标是创建一个能够满足用户需求的数据结构,以便用户可以轻松地查询和分析数据。
数据仓库建模的选择取决于业务需求、数据的性质以及可用的技术和工具。建立一个有效的数据仓库模型可以帮助组织更好地理解其业务数据,做出更明智的决策,并提高业务绩效。
ER 模型
实体-关系(ER)模型是一种用于描述数据结构和数据之间关系的概念性数据建模方法。它用于数据库设计和数据建模,帮助人们理解和表示实体(数据对象)以及它们之间的关系。
三范式
关系数据库中的三范式(Third Normal Form, 3NF)是一种数据规范化的方法,目的是为了减少数据冗余并确保数据的一致性和完整性。
这里我不再赘述如何辨别区分三范式,网上的优质文章很多,这里给大家推荐一篇:Mysql - 什么是三大范式(通俗详解)
三范式有助于设计高效且具有数据一致性的数据库模型,减少数据冗余,同时使数据更容易维护和更新。然而,对于某些特定的查询需求,有时需要权衡三范式的完全符合以优化查询性能。
维度建模
维度建模的起源可以追溯到 20 世纪 80 年代末和 90 年代初,当时数据仓库和商业智能的概念开始崭露头角。维度建模的方法论主要由 Ralph Kimball 和他的团队推动和发展,他们在这一领域的工作对商业智能和数据仓库的发展产生了深远的影响。
维度模型是一种用于设计数据仓库的模型,主要用于支持数据分析和报告。这种模型通过组织数据成维度表和事实表的结构,使得用户能够以直观的方式理解和查询数据。
事实表
事实表是数据仓库中存储了业务过程中产生的事实性数据的表格。它包含了数值性能度量或事实,例如销售额、数量、利润、点击次数等,这些数据通常是可以被聚合、分析和计算的。
事实表通常与维度表相结合,通过外键与维度表关联,以提供数据的上下文信息和多维分析的可能性。
举个例子,假设我们有一个在线零售商店,它包含了销售数据。
事实表 - 销售事实表
订单ID | 产品ID | 日期ID | 客户ID | 销售额 | 数量 |
---|---|---|---|---|---|
1001 | 101 | 500 | 200 | 150 | 2 |
1002 | 102 | 501 | 201 | 75 | 1 |
1003 | 103 | 502 | 202 | 100 | 3 |
在这个例子中,事实表包含了几个重要的字段:
- 订单ID:唯一标识每个销售订单的ID。
- 产品ID:与产品维度表关联的外键,提供了有关销售的产品信息。
- 日期ID:与日期维度表关联的外键,提供了销售发生的日期信息。
- 客户ID:与客户维度表关联的外键,提供了购买客户的信息。
- 销售额:表示每个订单的销售金额。
- 数量:表示每个订单中产品的数量。
这个事实表中的数据可以用于进行多种分析,例如按日期分析销售趋势、按产品类别分析销售额、按客户分析购买习惯等。通过与维度表的结合,可以进行复杂的多维分析,帮助企业了解业务运营的各个方面。
事实表类型
事实表可以根据存储的数据类型和所描述的业务过程类型来进行分类。
-
累积事实表
这种事实表包含了事务型数据的累积值,通常用于记录累积的总量或累积的周期性度量。例如,累积销售事实表记录了累计的销售额、总利润、总销售量等数据。日期ID 产品ID 累计销售额 累计利润 累计销售量 … … 50000 15000 1000 … … 52000 16000 1050 -
快照事实表
这种事实表记录了在特定时间点或时间段内的业务度量值。快照通常定期捕获数据的状态,而不是随着每个业务事件的发生而更新。快照日期 产品ID 当日销售额 当日订单数 日期1 产品1 1000 25 日期2 产品1 1200 30 -
事务事实表
这种事实表记录了每个业务事件的详细事务数据,每一行代表一个独立的事务或事件。它们通常是针对某个特定的业务过程,包含了每次事务的数据。订单ID 产品ID 日期ID 客户ID 销售额 数量 1001 101 500 200 150 2 1002 102 501 201 75 1 -
周期性快照事实表
类似于快照事实表,但记录了经过一定时间间隔的快照数据。这种类型的事实表通常用于分析跨越不同时间段的变化趋势。日期范围 产品ID 月销售额 季度销售额 2023年1月 产品1 500 1500 2023年2月 产品1 600 1400
这些不同类型的事实表在数据仓库中有不同的用途和分析方法,根据业务需求选择合适的事实表类型有助于更有效地进行数据分析和洞察。
维度表
维度表是数据仓库中存储描述业务对象的结构化信息的表格,它包含了用于分析的各种维度的详细信息。
维度表通常包含描述业务过程中的人、地点、时间、产品或事件等的属性。这些表格通常具有清晰的层次结构,用于帮助用户理解和分析数据。
维度表类型
-
时间维度表
时间维度表是描述日期、时间和与之相关的层次结构信息的表格,例如年、季节、月份、日期、周几等。它能支持按时间进行数据分析,比如时间趋势分析、周期性分析等。日期ID 日期 年份 季节 月份 周 节假日 500 2023-01-01 2023 冬季 1 周一 是 501 2023-01-02 2023 冬季 1 周二 否 -
产品维度表
产品维度表包含有关产品的详细信息,例如产品名称、类别、型号、制造商等,有助于对产品销售情况进行分析。产品ID 产品名称 类别 型号 制造商 101 手机 电子产品 ABC123 公司A 102 电视 家电 XYZ789 公司B -
地点维度表
地点维度表包含有关地理位置的信息,比如国家、城市、区域、地址等,支持地理位置相关的数据分析。地点ID 国家 省份 城市 区域 201 中国 广东省 深圳市 南山区 202 美国 加利福尼亚州 洛杉矶 市中心 -
客户维度表
客户维度表包含有关客户的信息,如客户ID、姓名、性别、年龄、职业等,支持对客户行为和特征的分析。客户ID 姓名 性别 年龄 职业 301 张三 男 35 工程师 302 李四 女 28 教师
维度表提供了数据的上下文和描述性信息,与事实表结合使用可以进行复杂的多维分析,帮助用户更好地理解业务数据并作出有效的决策。
数仓分层
在数仓中,通常有五层,分别为:ODS、DWD、DIM、DWS、ADS,每层存储的数据都不一样,负责的业务也不同,下面将展开说说这五层的作用以及示例。
ODS 源数据层
ODS 层是用于存储经过简单清洗、结构化、汇总的源系统数据的地方,它通常直接接收来自各个操作系统的数据,并保留了更接近源系统的数据。
从不同业务系统(如销售系统、库存系统)获取数据,将其整合、清洗并存储在 ODS 中。
ODS 层表示例
订单原始数据表
order_id | customer_id | product_id | order_date | order_amount |
---|---|---|---|---|
1001 | 2001 | 3001 | 2023-01-05 | 150.00 |
1002 | 2002 | 3002 | 2023-01-06 | 80.00 |
1003 | 2001 | 3003 | 2023-01-07 | 200.00 |
客户原始数据表
customer_id | customer_name | customer_address | registration_date |
---|---|---|---|
2001 | Alice | 123 Main St, Anytown | 2022-12-20 |
2002 | Bob | 456 Park Ave, Othertown | 2023-01-01 |
2003 | Carol | 789 Elm St, New City | 2023-01-10 |
产品原始数据表
product_id | product_name | product_category | product_price |
---|---|---|---|
3001 | Phone | Electronics | 500.00 |
3002 | TV | Appliances | 300.00 |
3003 | Laptop | Computers | 1200.00 |
DWD 明细数据层
DWD 层是数据仓库的核心层级,用于存储经过清洗、集成和建模的数据,以支持企业级的数据分析和决策需求。这一层通常包括了清洗后的事实表和维度表,支持多维分析。
在 DWD 中创建了销售事实表、产品维度表、时间维度表等,以支持企业级的销售分析和报表需求。
DWD 层表示例
订单事实表
order_id | customer_id | product_id | order_date | order_amount |
---|---|---|---|---|
… | … | … | … | … |
客户维度表
customer_id | customer_name | customer_address | registration_date |
---|---|---|---|
… | … | … | … |
产品维度表
product_id | product_name | product_category | product_price |
---|---|---|---|
… | … | … | … |
DIM 公共维度层
DIM 层是用于存储维度模型的地方,其中包含了业务维度和度量,以便于进行多维度的分析和查询。这个层级可以支持数据的分组和聚合,以提供更快的查询性能。
在 DIM 中包含了产品、地区、时间等维度,以及关联的度量,为业务用户提供了灵活的多维度分析能力。
DIM 层表示例
时间维度表
date | year | month | day | week | quarter | holiday_flag |
---|---|---|---|---|---|---|
… | … | … | … | … | … | … |
地域维度表
country | state/province | city | region |
---|---|---|---|
… | … | … | … |
支付方式维度表
payment_method_id | payment_method_name |
---|---|
… | … |
DWS 数据汇总层
DWS 层是对数据进行聚合、汇总或预计算的地方,以优化复杂查询的性能,提供快速的汇总结果。它可以包括预聚合的数据或某些业务计算结果。
在 DWS 中,可能包括了每日销售总额、每月客户活跃度等预计算结果,以提高复杂查询的性能。
DWS 层表数据
每日销售总额表
date | total_sales_amount |
---|---|
… | … |
每月客户活跃度表
month | active_customers_count |
---|---|
… | … |
ADS 数据应用层
ADS 层是根据特定业务需求定制的数据服务层,它可能会整合来自多个层级的数据,提供给特定应用程序或业务需求使用。
构建了专门为某个特定业务应用程序提供数据支持的数据服务接口,使其能够访问 DWD、DWS 和 DIM 中的数据。
ADS 层接口示例
销售分析应用接口
接口提供从订单事实表和维度表获取信息,支持销售分析和报告。
用户行为分析应用接口
接口提供从订单事实表、客户维度表和时间维度表获取信息,支持用户行为分析和趋势报告。
这五层架构在数据仓库中起着不同但相互补充的作用,以支持各种层次的数据需求,从源系统的操作数据到支持决策分析的维度模型,再到特定应用的定制数据服务。
数仓分层的优势
-
数据组织和管理
分层架构有助于将数据组织成不同的层级,使数据管理更为清晰和有序。每个层级都有特定的功能和目的,有利于更好地管理数据的流动和处理过程。 -
数据质量和一致性
分层能够帮助确保数据的质量和一致性。在不同的层级对数据进行清洗、整合和转换,有助于消除数据中的错误或不一致性,并确保数据的准确性和可靠性。 -
多维度分析和查询
分层架构中的维度模型和数据仓库层支持多维度的数据分析和查询,使得用户能够从不同的角度对数据进行探索和分析,支持更深入的业务理解和决策制定。 -
性能优化
通过在数据仓库汇总层进行数据预计算和汇总,可以提高查询性能和响应速度。预计算结果可以在需要时被快速查询,降低复杂查询的计算成本。 -
灵活性和适应性
分层架构使得数据仓库能够更灵活地适应不同的业务需求和数据访问模式。它能够根据特定需求提供定制化的数据服务,从简单操作到高级分析都能得到支持。 -
安全和数据治理
每个层级都可以进行数据访问控制和安全管理,有利于实现数据的安全性和合规性。此外,分层架构有助于建立数据治理策略,确保数据在整个流程中得到适当的管理和监控。 -
业务与技术的分离
分层架构可以帮助将业务逻辑与技术实现分离,使得业务用户更专注于数据的使用和分析,而技术团队则负责数据的处理和管理。
分层架构使得数据仓库更具可管理性、可扩展性和灵活性,支持了数据的高效管理、多样化使用和高质量分析,对企业的数据驱动决策和业务发展起到了关键作用。
相关文章:
大数据数仓建模基础理论【维度表、事实表、数仓分层及示例】
文章目录 什么是数仓仓库建模?ER 模型三范式 维度建模事实表事实表类型 维度表维度表类型 数仓分层ODS 源数据层ODS 层表示例 DWD 明细数据层DWD 层表示例 DIM 公共维度层DIM 层表示例 DWS 数据汇总层DWS 层表数据 ADS 数据应用层ADS 层接口示例 数仓分层的优势 什么…...

FlinkCDC数据实时同步Mysql到ES
考大家一个问题,如果想要把数据库的数据同步到别的地方,比如es,mongodb,大家会采用哪些方案呢? ::: 定时扫描同步? 实时日志同步? 定时同步是一个很好的方案,比较简单,但是如果对实时要求比较高的话,定…...

【Feign】 基于 Feign 远程调用、 自定义配置、性能优化、实现 Feign 最佳实践
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 SpringCloud MybatisPlus JVM 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Feign 一、 基于 Feign 远程调用1.1 RestTemplate方式…...
小迪安全笔记(3)——基础入门3、基础入门4
文章目录 一、抓包&封包&协议&APP&小程序&PC应用&web应用二、30余种加密编码进制&web&数据库&系统&代理 一、抓包&封包&协议&APP&小程序&PC应用&web应用 APP&小程序&PC抓包HTTP/S数据——Charles、F…...

SOME/IP 协议介绍(六)接口设计的兼容性规则
接口设计的兼容性规则(信息性) 对于所有序列化格式而言,向较新的服务接口的迁移有一定的限制。使用一组兼容性规则,SOME / IP允许服务接口的演进。可以以非破坏性的方式进行以下添加和增强: • 向服务中添加新方法 …...

吴恩达《机器学习》8-5->8-6:特征与直观理解I、样本与值观理解II
8.5、特征与直观理解I 一、神经网络的学习特性 神经网络通过学习可以得出自身的一系列特征。相对于普通的逻辑回归,在使用原始特征 x1,x2,...,xn 时受到一定的限制。虽然可以使用一些二项式项来组合这些特征,但仍然受到原始特征的限制。在神经网…...

『亚马逊云科技产品测评』活动征文|借助AWS EC2搭建服务器群组运维系统Zabbix+spug
授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具: aws ec2 frp-0.52.3 zabbix 6…...
文件转换,简简单单,pdf转word,不要去找收费的了,自己学了之后免费转,之后就复制粘贴就ok了
先上一个链接pdf转word文件转换 接口层 PostMapping("pdfToWord")public String pdfToWord(RequestParam("file") MultipartFile file) throws IOException {String fileName FileExchangeUtil.pdfToWord(file.getInputStream(),file.getName());return…...

Jmeter——循环控制器中实现Counter计数器的次数重置
近期在使用Jmeter编写个辅助测试的脚本,用到了多个Loop Controller和Counter。 当时想的思路就是三个可变的数量值,使用循环实现;但第三个可变值的数量次数,是基于第二次循环中得到的结果才能确认最终次数,每次的结果…...
[创业之路-85]:IT创业成功老板的品质、创业失败老板的特征、成功领导者的品质、失败管理者的特征
目录 前言: 一、创业成功老板的品质 二、创业失败老板的特征 三、成功领导者的品质 四、失败管理者的特征 前言: 大多数创业或职场共事,都是基于某种人际关系或所谓的感情,这是大数的职场众生相,也是人情社会的中…...

警惕.360勒索病毒,您需要知道的预防和恢复方法。
引言: 网络威胁的演变无常,.360勒索病毒作为一种新兴的勒索软件,以其狡猾性备受关注。本文将深入介绍.360勒索病毒的特点,提供解决方案以恢复被其加密的数据,并分享一系列强化网络安全的预防措施。如果您在面对被勒索…...

人力资源小程序
人力资源管理对于企业的运营至关重要,而如今随着科技的发展,制作一个人力资源小程序已经变得非常简单和便捷。在本文中,我们将为您介绍如何通过乔拓云网制作一个人力资源小程序,只需五个简单的步骤。 第一步:注册登录乔…...
【多线程 - 10、线程同步3 ThreadLocal】
一、ThreadLocal 1、介绍 可以实现资源对象的线程隔离;可以实现了线程内的资源共享 如果使用 ThreadLocal 管理变量,则每一个使用该变量的线程都获得该变量的副本, 副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本…...

【Flink 问题集】The generic type parameters of ‘Collector‘ are missing
错误展示: Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function main(CollectionDemo.java:33) could not be determined automatically, due to type erasure. You can give type in…...
数据分析—将txt文件转为csv文件;将csv文件转为xls文件
txt文件转为csv文件转化代码: import csv# 输入txt文件路径 txt_file rC:\Users\ZARD\Desktop\daily-min-temperatures.txt# 输出csv文件路径 csv_file rC:\Users\ZARD\Desktop\daily-min-temperatures.csv# 打开txt文件以读取数据 with open(txt_file, r) as tx…...
【算法】二分查找-20231120
这里写目录标题 一、75. 颜色分类二、80. 删除有序数组中的重复项 II三、125. 验证回文串四、189. 轮转数组 一、75. 颜色分类 提示 中等 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻ÿ…...
WPF实现将鼠标悬浮在按钮上时弹出菜单
在WPF 中,要实现当鼠标悬停在按钮上时显示菜单,并能够灵活设置菜单的位置(如按钮的上方或下方),你可以使用 Popup 控件来创建自定义的弹出菜单。以下是如何通过 Popup 控件来实现这种功能的步骤: 1. 在 XA…...
车载以太网-传输层-UDP
文章目录 UDP协议UDP报文格式UDP报文示例UDP协议测试UDP协议 UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证数据传输的可靠性,但是具有传输速度快的优点。UDP协议主要用于那些对数据传输速度要求较高,但对数据传输的可靠性要求不高的应用场景,如音视频…...
uniapp如何上传文件,使用API是什么
在uniapp中上传文件的方法有很多,其中一种常用的方法是使用wx.uploadFile() API。该API可以上传本地文件或网络文件,并支持设置请求头、请求参数等选项。 具体使用方法如下: 1.引入API: import { uploadFile } from /util/requ…...

【狂神说Java】Docker概述 | Docker安装 | Docker的常用命令
✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :【狂神说Java】 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...