大数据数仓建模基础理论【维度表、事实表、数仓分层及示例】

文章目录

    • 什么是数仓仓库建模?
    • 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销售额数量
10011015002001502
1002102501201751
10031035022021003

在这个例子中,事实表包含了几个重要的字段:

  • 订单ID:唯一标识每个销售订单的ID。
  • 产品ID:与产品维度表关联的外键,提供了有关销售的产品信息。
  • 日期ID:与日期维度表关联的外键,提供了销售发生的日期信息。
  • 客户ID:与客户维度表关联的外键,提供了购买客户的信息。
  • 销售额:表示每个订单的销售金额。
  • 数量:表示每个订单中产品的数量。

这个事实表中的数据可以用于进行多种分析,例如按日期分析销售趋势、按产品类别分析销售额、按客户分析购买习惯等。通过与维度表的结合,可以进行复杂的多维分析,帮助企业了解业务运营的各个方面。

事实表类型

事实表可以根据存储的数据类型和所描述的业务过程类型来进行分类。

  1. 累积事实表
    这种事实表包含了事务型数据的累积值,通常用于记录累积的总量或累积的周期性度量。例如,累积销售事实表记录了累计的销售额、总利润、总销售量等数据。

    日期ID产品ID累计销售额累计利润累计销售量
    50000150001000
    52000160001050
  2. 快照事实表
    这种事实表记录了在特定时间点或时间段内的业务度量值。快照通常定期捕获数据的状态,而不是随着每个业务事件的发生而更新。

    快照日期产品ID当日销售额当日订单数
    日期1产品1100025
    日期2产品1120030
  3. 事务事实表
    这种事实表记录了每个业务事件的详细事务数据,每一行代表一个独立的事务或事件。它们通常是针对某个特定的业务过程,包含了每次事务的数据。

    订单ID产品ID日期ID客户ID销售额数量
    10011015002001502
    1002102501201751
  4. 周期性快照事实表
    类似于快照事实表,但记录了经过一定时间间隔的快照数据。这种类型的事实表通常用于分析跨越不同时间段的变化趋势。

    日期范围产品ID月销售额季度销售额
    2023年1月产品15001500
    2023年2月产品16001400

这些不同类型的事实表在数据仓库中有不同的用途和分析方法,根据业务需求选择合适的事实表类型有助于更有效地进行数据分析和洞察。

维度表

维度表是数据仓库中存储描述业务对象的结构化信息的表格,它包含了用于分析的各种维度的详细信息。

维度表通常包含描述业务过程中的人、地点、时间、产品或事件等的属性。这些表格通常具有清晰的层次结构,用于帮助用户理解和分析数据。

维度表类型

  1. 时间维度表
    时间维度表是描述日期、时间和与之相关的层次结构信息的表格,例如年、季节、月份、日期、周几等。它能支持按时间进行数据分析,比如时间趋势分析、周期性分析等。

    日期ID日期年份季节月份节假日
    5002023-01-012023冬季1周一
    5012023-01-022023冬季1周二
  2. 产品维度表
    产品维度表包含有关产品的详细信息,例如产品名称、类别、型号、制造商等,有助于对产品销售情况进行分析。

    产品ID产品名称类别型号制造商
    101手机电子产品ABC123公司A
    102电视家电XYZ789公司B
  3. 地点维度表
    地点维度表包含有关地理位置的信息,比如国家、城市、区域、地址等,支持地理位置相关的数据分析。

    地点ID国家省份城市区域
    201中国广东省深圳市南山区
    202美国加利福尼亚州洛杉矶市中心
  4. 客户维度表
    客户维度表包含有关客户的信息,如客户ID、姓名、性别、年龄、职业等,支持对客户行为和特征的分析。

    客户ID姓名性别年龄职业
    301张三35工程师
    302李四28教师

维度表提供了数据的上下文和描述性信息,与事实表结合使用可以进行复杂的多维分析,帮助用户更好地理解业务数据并作出有效的决策。

数仓分层

在数仓中,通常有五层,分别为:ODS、DWD、DIM、DWS、ADS,每层存储的数据都不一样,负责的业务也不同,下面将展开说说这五层的作用以及示例。

ODS 源数据层

ODS 层是用于存储经过简单清洗、结构化、汇总的源系统数据的地方,它通常直接接收来自各个操作系统的数据,并保留了更接近源系统的数据。

从不同业务系统(如销售系统、库存系统)获取数据,将其整合、清洗并存储在 ODS 中。

ODS 层表示例

订单原始数据表

order_idcustomer_idproduct_idorder_dateorder_amount
1001200130012023-01-05150.00
1002200230022023-01-0680.00
1003200130032023-01-07200.00

客户原始数据表

customer_idcustomer_namecustomer_addressregistration_date
2001Alice123 Main St, Anytown2022-12-20
2002Bob456 Park Ave, Othertown2023-01-01
2003Carol789 Elm St, New City2023-01-10

产品原始数据表

product_idproduct_nameproduct_categoryproduct_price
3001PhoneElectronics500.00
3002TVAppliances300.00
3003LaptopComputers1200.00

DWD 明细数据层

DWD 层是数据仓库的核心层级,用于存储经过清洗、集成和建模的数据,以支持企业级的数据分析和决策需求。这一层通常包括了清洗后的事实表和维度表,支持多维分析。

在 DWD 中创建了销售事实表、产品维度表、时间维度表等,以支持企业级的销售分析和报表需求。

DWD 层表示例

订单事实表

order_idcustomer_idproduct_idorder_dateorder_amount

客户维度表

customer_idcustomer_namecustomer_addressregistration_date

产品维度表

product_idproduct_nameproduct_categoryproduct_price

DIM 公共维度层

DIM 层是用于存储维度模型的地方,其中包含了业务维度和度量,以便于进行多维度的分析和查询。这个层级可以支持数据的分组和聚合,以提供更快的查询性能。

在 DIM 中包含了产品、地区、时间等维度,以及关联的度量,为业务用户提供了灵活的多维度分析能力。

DIM 层表示例

时间维度表

dateyearmonthdayweekquarterholiday_flag

地域维度表

countrystate/provincecityregion

支付方式维度表

payment_method_idpayment_method_name

DWS 数据汇总层

DWS 层是对数据进行聚合、汇总或预计算的地方,以优化复杂查询的性能,提供快速的汇总结果。它可以包括预聚合的数据或某些业务计算结果。

在 DWS 中,可能包括了每日销售总额、每月客户活跃度等预计算结果,以提高复杂查询的性能。

DWS 层表数据

每日销售总额表

datetotal_sales_amount

每月客户活跃度表

monthactive_customers_count

ADS 数据应用层

ADS 层是根据特定业务需求定制的数据服务层,它可能会整合来自多个层级的数据,提供给特定应用程序或业务需求使用。

构建了专门为某个特定业务应用程序提供数据支持的数据服务接口,使其能够访问 DWD、DWS 和 DIM 中的数据。

ADS 层接口示例

销售分析应用接口

接口提供从订单事实表和维度表获取信息,支持销售分析和报告。

用户行为分析应用接口

接口提供从订单事实表、客户维度表和时间维度表获取信息,支持用户行为分析和趋势报告。


这五层架构在数据仓库中起着不同但相互补充的作用,以支持各种层次的数据需求,从源系统的操作数据到支持决策分析的维度模型,再到特定应用的定制数据服务。

数仓分层的优势

  1. 数据组织和管理
    分层架构有助于将数据组织成不同的层级,使数据管理更为清晰和有序。每个层级都有特定的功能和目的,有利于更好地管理数据的流动和处理过程。

  2. 数据质量和一致性
    分层能够帮助确保数据的质量和一致性。在不同的层级对数据进行清洗、整合和转换,有助于消除数据中的错误或不一致性,并确保数据的准确性和可靠性。

  3. 多维度分析和查询
    分层架构中的维度模型和数据仓库层支持多维度的数据分析和查询,使得用户能够从不同的角度对数据进行探索和分析,支持更深入的业务理解和决策制定。

  4. 性能优化
    通过在数据仓库汇总层进行数据预计算和汇总,可以提高查询性能和响应速度。预计算结果可以在需要时被快速查询,降低复杂查询的计算成本。

  5. 灵活性和适应性
    分层架构使得数据仓库能够更灵活地适应不同的业务需求和数据访问模式。它能够根据特定需求提供定制化的数据服务,从简单操作到高级分析都能得到支持。

  6. 安全和数据治理
    每个层级都可以进行数据访问控制和安全管理,有利于实现数据的安全性和合规性。此外,分层架构有助于建立数据治理策略,确保数据在整个流程中得到适当的管理和监控。

  7. 业务与技术的分离
    分层架构可以帮助将业务逻辑与技术实现分离,使得业务用户更专注于数据的使用和分析,而技术团队则负责数据的处理和管理。

分层架构使得数据仓库更具可管理性、可扩展性和灵活性,支持了数据的高效管理、多样化使用和高质量分析,对企业的数据驱动决策和业务发展起到了关键作用。

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

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

相关文章

数据结构之链表练习与习题详细解析

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.习题解…

CICD 持续集成与持续交付——git

git使用 [rootcicd1 ~]# yum install -y git[rootcicd1 ~]# mkdir demo[rootcicd1 ~]# cd demo/ 初始化版本库 [rootcicd1 demo]# git init 查看状态 [rootcicd1 demo]# git status[rootcicd1 demo]# git status -s #简化输出 [rootcicd1 demo]# echo test > README.md[roo…

python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)

省流建议 本文针对以下需求: 想自动化标注一些目标不再想使用yolo想在目标检测/语意分割有所建树计算机视觉项目想玩一玩大模型了解自动化工具了解最前沿模型自定义目标P图替换… 确定好需求,那么我们发车! 实现功能与结果 该模型将首先…

Python中的迭代器、生成器和装饰器

当谈到Python中的迭代器、生成器和装饰器时,这三个概念都是与函数和数据处理密切相关的。让我们逐个深入了解它们。 1. 迭代器(Iterators): 迭代器是一个可以逐个访问元素的对象。在Python中,迭代器实现了两个方法&a…

6 Redis的慢查询配置原理

1、redis的命令执行流程 redis的慢查询只针对步骤3 默认情况下,慢查询的阈值是10ms

基于PHP+MySql的酒店信息管理系统的设计与实现

一、系统开发环境 运行环境:phpstudy或者wampserver, 开发工具:vscodephpstorm 数据库:mysql 二、酒店管理系统功能 1.前台功能: 首页客房推荐,周边特色介绍 酒店在线预订 订单查询,可以…

C++各种字符转换

C各种字符转换 一.如何将char数组转化为string类型二. string转char数组:参考 一.如何将char数组转化为string类型 在C中,可以使用string的构造函数或者赋值操作符来将char数组转换为string类型。 方法1:使用string的构造函数 const char* c…

【Web】Ctfshow SSTI刷题记录1

目录 ①web361 362-无过滤 ②web363-过滤单双引号 ③web364-过滤单双引号和args ④web365-过滤中括号[]、单双引号、args ⑤web366-过滤单双引号、args、中括号[]、下划线 ⑦web367-过滤单双引号、args、中括号[]、下划线、os ⑧web368-过滤单双引号、args、中括号[]、下…

原理Redis-动态字符串SDS

动态字符串SDS Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题: 获取字符串长度的需要通过运算非二进制安全…

qt-C++笔记之两个窗口ui的交互

qt-C笔记之两个窗口ui的交互 code review! 文章目录 qt-C笔记之两个窗口ui的交互0.运行1.文件结构2.先创建widget项目,搞一个窗口ui出来3.项目添加第二个widget窗口出来4.补充代码4.1.qt_widget_interaction.pro4.2.main.cpp4.3.widget.h4.4.widget.cpp4.5.second…

ClickHouse数据一致性

查询CK手册发现,即便对数据一致性支持最好的Mergetree,也只是保证最终一致性: 我们在使用 ReplacingMergeTree、SummingMergeTree 这类表引擎的时候,会出现短暂数据不一致的情况。 在某些对一致性非常敏感的场景,通常有…

Flask实现cookie 开发

要在Flask中实现cookie的开发,可以通过使用Flask提供的set_cookie()和get_cookie()函数来设置和获取cookie值。以下是一个示例,演示如何在Flask应用中使用cookie: from flask import Flask, request, make_responseapp Flask(__name__)app.…

庖丁解牛:NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片

文章目录 Pre概述缓冲区分配和包装 (allocate 、 wrap)缓冲区分片 (slice)缓冲区份片和数据共享只读缓冲区 (asReadOnlyBuffer)直接和间接缓冲区 (allocateDirect)内存映射文件 I/O将文件映射到内存(map) Pre 庖丁解牛&#xff1…

【服务器学习】timer定时器模块

timer定时器模块 以下是从sylar服务器中学的,对其的复习; 参考资料 定时器概述 通过定时器可以实现给服务器注册定时事件,这是服务器上经常要处理的一类事件,比如3秒后关闭一个连接,或是定期检测一个客户端的连接状…

NLP学习:深入NLP

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 之前学过一段时间NLP,因为其中涉及到一些深度学习常用的知识或者框架,但苦于不系统以及没有任务focus不能长久.这里借助微软的教程写点东西. tokenization&&representation 将一句话中的单词分割就是分词(…

使用cgroup控制CPU使用率

关键文件 cpu子系统中的关键文件。 cpu.cfs_period_uscpu.cfs_quota_ustaskscgroup.procs 常用命令 查看当前系统内的CPU。 lscpu 查看当前系统内的CPU。 cat /proc/cpuinfo 查看当前的子系统。 lssubsys -a 将进程加入到控制组内。 echo PID > tasks或者 echo PID &…

Python之冒泡排序(AI自动写文章项目测试)

全自动AI生成文章测试,如有不合理地方,请见谅。 一、冒泡排序简介 1.1 冒泡排序概述 冒泡排序(Bubble Sort)是一种简单的排序算法,通过不断交换相邻元素的位置,将最大(或最小)的元…

Rust开发——使用rust实现Redis中hset

一、Redis中hset HSET 是 Redis 中用于在哈希数据结构中设置指定字段的值的命令。哈希是一种类似于字典或映射的数据结构,它存储了键值对的集合,其中每个键都包含多个字段和与这些字段相关联的值。 哈希表在 Redis 中以键值对形式存储,并通…

【产品应用】一体化伺服电机在系留无人机中的应用

一体化伺服电机是一种将电机、驱动器、编码器结合在一起的伺服系统,具有高精度控制、快速响应和高效运行等优点。系留无人机则是一种通过绳索或链条与地面设施连接的无人机,能够实现长时间的稳定悬停和空中作业。 01.设备简介 电源线牵引装置&#xff1…

uniapp如何使用api相关提示框

uni.showToast:用于显示一条带有图标的提示框。title:提示的内容。icon:图标,可选值包括 success、loading、none。duration:提示框持续时间(单位:毫秒),默认为1500。 un…