2023.11.22 数据仓库2-维度建模

news2025/6/15 6:21:39

目录

1.数仓建设方案

2.数仓结构图,项目架构图

2.1项目架构图

 2.2数仓结构图

 3.建模设计

4.维度建模

 什么是事实表:

 什么是维度表:

 数据发展模式y以及对应的模型

5.数仓建设规范

数据库划分规范

表命名规范

表字段类型规范


1.数仓建设方案

ODS: 源数据层(临时存储层) 贴源层
    作用: 对接数据源, 用于将数据源的数据完整的导入到ODS层中, 一般ODS层的数据和数据源的数据保持一致, 类似于一种数据迁移的操作, 一般在ODS层建表的时候, 会额外增加一个 日期的分区, 用于标记何时进行数据采集

DW:  数据仓库层
    作用: 用于进行数据统计分析的操作, 数据来源于 ODS层


APP(DA|ADS | RPT |ST) :  数据应用层(数据展示层)
    作用: 存储分析的结果信息, 用于对接相关的应用, 比如  BI图表

2.数仓结构图,项目架构图

2.1项目架构图

集群管理工具: Cloudera Manager
数据源: 业务系统的Mysql与SQLServer数据库; 
数据抽取: 使用DataX实现关系型数据库和大数据集群的双向同步; 
数据存储: HDFS 
计算引擎: Hive
交互查询引擎: Presto
OLAP: PG
数据可视化: Fine Report
调度系统: DolphinScheduler(海豚调度)

 2.2数仓结构图

 

  • ODS层: 源数据层

    • 作用: 对接数据源, 将数据源中数据加载到ODS层中, 形成一张张表, 一般和数据源中数据保持同样粒度(数据一致)

    • 主要用于放置事实表数据, 和少量维度表数据

    • 注意: 在导入到ODS层, 可能也会对数据进行预处理工作(清洗) -- 并不一定存在

    • 例如:

      1) 如果数据直接来源于MYSQL数据源, 可能一般不需要进行预处理工作 本身数据就是结构化数据
      2) 如果数据直接来源于某个文件的, 可能需要对文件中数据进行判定, 如果有一些脏乱差的数据, 可能需要提前进行预处理工作, 转换为结构化数据

  • DW层: 数据仓库层

    • 作用: 进行数据的分析工作 数据来源于ODS层

    • 细化分层:

      • DWD层: 明细层

        • 作用: 根据要分析的主题, 从ODS层抽取相关的数据, 对数据进行清洗转换处理工作, 然后将数据加载到DWD层, 一般将此层称为 大聚合层, 一般将所有相关的数据全部糅杂在一个表中, 在此过程中, 可以进行一定的维度退化操作

        什么叫转换处理呢? 
            比如说: 对于时间而言, 在ODS表中有一个时间字段, 字段数据为:  2020-12-10 15:30:30
            说明:
                在ODS层这个时间字段上, 糅杂了太多字段数据, 包含 年  月  日 小时 分钟 秒
            此时, 需要将字段导入到DWD层时候, 将其转换为  年 月 日 小时 ...
      • DWM层: 中间层

        • 作用: 主要是用于对DWD层进行进一步聚合操作, 同时此层可以进行维度退化的操作, 此层的表一般就是周期快照事实表

        例如: 
            比如分析的维度中有时间维度: 
                需要分别计算 年  月  日 小时
            可以先将数据按照 小时进行聚合操作, 形成一张按照小时聚合的表, 当需要按照日来聚合的时候, 只需要将每个小时数据进行累加在一起即可, 从而提升效率
      • DWS层: 业务层

        • 作用: 主要对DWM层或者DWD层数据, 进行再次细化的聚合统计操作, 在此层需要针对各个维度都进行聚合统计结构了, 将所有维度统计的结果, 放置在一起, 形成宽表数据

        • 注意: 此层一般就是最终分析结果的数据了

  • APP(DA/ADS/RPT)层: 数据应用层

    • 作用: 主要是用于存储DW层分析之后的结果数据, 用于对接后续的应用(图表, 机器学习, 推荐 .....)

    • 注意: 如果不需要在针对DWS层, 在此进行统计工作, 注意DWS层就是最终结果数据

      什么时候需要使用APP层: 
          当DWS层统计结果, 被划分在多个不同结果表, 需要对DWS层数据进行再次的统计工作, 此时需要将统计的结果存储在APP层

  • DIM层: 维度层

    • 作用: 存储维度表数据

    • 说明: 当维度表较多的时, 建议将其放置在DIM层

 3.建模设计

ODS层使用关系建模开发,DW层和ADS层采用维度建模开发。

维度建模一般按照以下四个步骤:选择业务过程→声明粒度→确认维度→确认事实
1)选择业务过程
在业务系统中,挑选业务方感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。

2)声明粒度
数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。
声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。
典型的粒度声明如下:
订单事实表中一行数据表示的是一个订单中的一个商品项。
支付事实表中一行数据表示的是一个支付记录。

3)确定维度
维度的主要作用是:描述业务的事实情况。主要表示的是“谁,何处,何时”等信息。
确定维度的原则是:后续需求中是否要分析相关维度的指标。例如,需要统计什么时间下的订单多,哪个地区下的订单多,哪个用户下的订单多。需要确定的维度就包括:时间维度、地区维度、用户维度。

4)确定事实
此处的“事实”一词,指的是业务中的度量值(次数、个数、件数、金额,可以进行累加),例如订单金额、下单次数等。
在DWD层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。
事实表和维度表的关联比较灵活,但是为了应对更复杂的业务需求,可以将能关联上的表尽量关联上。

4.维度建模

维度模型将复杂的业务通过事实和维度两个概念进行呈现。事实通常对应业务过程,而维度通常对应业务过程发生时所处的环境。

 什么是事实表:

事实表: 指的主题,要统计的主题是什么, 对应事实就是什么, 而主题所对应的表, 其实事实表
    事实表一般是一堆主键(外键)的聚集
    事实表一般是反应了用户某种行为表

比如说: 
    订单表, 收藏表, 登录表, 购物车表 ...
    
事实表分类: 
    事务事实表 : 最初始确定的事实表 其实就是事务事实表
    周期快照事实表:  指的对数据进行提前聚合后表, 比如将事实表按照天聚合统计 结果表
    累计快照事实表: 每一条数据, 记录了完整的事件 从开始 到结束整个流程, 一般有多个时间组成

 什么是维度表:

维度表: 当对事实表进行统计分析的时候, 可能需要关联一些其他表进行辅助, 这些表其实就是维度表
    维度表一般是由平台或者商家来构建的表, 与用户无关, 不会反应用户的行为

比如说: 地区表  商品表 时间表, 分类表...


维度表分类: 
    高基数维度表:  如果数据量达到几万 或者几十万 甚至几百万的数据量, 一般这样维度表称为高基数维度表
        比如:  商品表 , 用户表
    低基数维度表: 如果数据量只有几条 或者 几十条 或者几千条, 这样称为低基数维度表
        比如: 地区表 时间表  分类表  配置表

 数据发展模式y以及对应的模型

● 星型模型: 
  ○ 特点:  只有一个事实表, 也就意味着只有一个分析的主题, 在事实表周围围绕了多张维度表, 维度表与维度表没有任何关联
  ○ 数仓发展阶段: 初期
● 雪花模型: 
  ○ 特点:  只有一个事实表, 也就意味着只有一个分析的主题, 在事实表周围围绕了多张维度表, 维度表可以接着关联其他的维度表
  ○ 数仓发展阶段:  异常, 出现畸形状态 在实际数仓中, 这种模型建议越少越好, 尽量避免这种模型产生
● 星座模型: 
  ○ 特点:  有多个事实表, 也就意味着有了多个分析的主题, 在事实表周围围绕了多张维度表, 在条件吻合的情况下, 事实表之间是可以共享维度表
  ○ 数仓发展阶段: 中期 和 后期

 

维度建模从需求出发,重点关注快速完成需求分析,围绕性能和易理解性构建模型,以事实表与维度表的形式重新组织数据。
在OLAP应用中主要有两大优势:
   1):前期建模成本较低,从业务需求出发,快速迭代;
   2):查询性能高,通过数据冗余降低查询的复杂度。

主要劣势: 数据冗余, 数据一致性维护增大

因此,从整体来说维度建模的开发和使用成本较低,但是维护成本较高,比较适合在接近业务分析的数据集市层、分析层来使用。

5.数仓建设规范

数据库划分规范

MySQL:dim/sale/member
SQL Server: order/stock
Hive:
    dim:用于存放 维表 表信息及数据
    ods:用于存放 ods层 表信息及数据
    dwd:用于存放 dwd层 表信息及数据
    dwm:用于存放 dwm层 表信息及数据
    dws:用于存放 dws层 表信息及数据
    ads:用于存放 ads层 表信息及数据
PostgreSQL: dm

 

表命名规范

命名规则: 分层_主题_实体+业务+维度_分区
分层:ods  dwd  dwm  dws  ads
主题:dim/sale/sold/sell/mem/shop/order/stock
数据域:dim/goods/category/store/marketing/saleorder/abnormal/pay/mem/shop/order

实体+业务+维度:
示例:
    store_goods_statistics_day
    store_member_statistics_day
分区:
    i : 分区表(increment增量)
    f : 全量表(full全量)

 

表字段类型规范

数量类型整数为:bigint
金额类型为:decimal(27, 2),表示:27位有效数字,其中小数部分2位
字符串(名字,描述信息等)类型为:string
日期类型为:string
时间类型为:timestamp

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

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

相关文章

不停的挖掘硬盘的最大潜能

从 NAS 上退休的硬盘被用在了监控的存储上了。 随着硬盘使用寿命的接近尾声,感觉就是从高附加值数据到低附加值数据上。监控数据只会保留那么几个月的时间,很多时候都会被覆盖重新写入。 有人问为什么监控数据不保留几年的,那是因为监控数据…

个人博客项目 - 测试报告

文章目录 一、项目背景二、测试报告功能测试1.编写测试用例2.登录测试3.编写文章测试4.查看文章测试5.删除文章测试7.注销登录测试 自动化测试性能测试1.VUG2.进行场景设计3.生成性能测试报告 总结 本文开始 一、项目背景 通过学习测试相关的知识,动手实践并测试一…

【人工智能入门学习资料福利】

总目录如下(部分截取): 百度网盘链接:https://pan.baidu.com/s/1bfDVG-xcPR3f3nfBJXxqQQ?pwdifu6 提取码: ifu6

记录小白第一次EDUsrc:任意密码漏洞

目录 一、漏洞说明: 二、漏洞复现: 三、漏洞修复建议: 一、漏洞说明: xxxx学院身份认证系统有严重的逻辑设计缺陷:账户登录、手机登录、密码找回三个接口找到n个逻辑漏洞包括任意账号密码修改、信息泄露&#xff0…

在中国企业出海的大浪潮下,亚马逊云科技提供遍及全球的基础设施和技术支持

中国技术出海是中国企业更高层次更高质量的全球化。在人类文明发展史上,凝聚中国古人智慧结晶的造纸术、印刷术、火药、指南针等,曾为中国技术出海写下过浓墨重彩的一笔。在今天,如金山办公、店匠科技、ADVANCE.AI等公司又以技术立业&#xf…

Apache POI简介

三十二、Apache POI 32.1 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用POI在Java程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI都是用于操作Excel文件。 Apache POI 的应用场…

百度发布Q3财报:AI原生应用驱动业绩增长 公司股价应声涨超5%

作为中国科技巨头,百度一直走在人工智能(AI)技术的前沿。 11月21日,百度发布的第三季度财务报告再次证明了其在AI领域的领先地位。报告显示,第三季度百度实现营收344.47亿元,归属于百度的净利润&#xff0…

最易上手的电子期刊制作工具,快来使用!

快节奏时代,纸质书籍逐渐淡出人们的视野,取而代之的就是电子刊物制作。而电子期刊开始寻求更多的互动和丰富的内容形式,给人以良好的阅读体验。 如何制作呢?便成为了当下必须要学会的新技能,接下来分享一个比PPT更简单…

【电子通识】USB3.0和USB2.0有什么区别?

版本 USB2.0是2000年4月27日由USB-IF组织提出了USB2.0总线协议规范。 USB3.0是2008年11月17日由USB-IF组织提出了超高速USB3.0规范。 图标对比 USB2.0的标志就是和USB1.1的标志基本上没啥区别,还是以前的那个样子,使用黑色颜色用标识 USB3.0它有一个S…

[原创]解决老款AMD CPU在Win10/Win11无故重启的问题.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse、C Bui…

一篇文章搞懂WPF动画的使用技巧

WPF 动画系统提供了丰富的功能,用于为 UI 元素创建流畅的动态效果。动画可以应用于任何可用于渲染的属性,比如位置、颜色、大小等。在 WPF 中,动画是通过更改随时间变化的属性来实现的。 WPF动画基本用法 例如实现如下的动画效果&#xff1…

关于软raid的实现及常见问题

RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM&…

SSH连接远程服务器报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 解决方法

一.错误描述 报错信息里提示了路径信息/root/.ssh/known_hosts:20 二.解决方案 方法一 输入以下指令: ssh-keygen -R XXX(需要连接远程服务器的ip) 按照我的例子ip:10.165.7.136,会返回以下信息: 重新尝试连接: 输…

[操作系统]进程和线程

目录 1.什么是进程 1.1进程控制块抽象 1.2 CPU 分配 —— 进程调度(Process Scheduling) 1.3内存分配 —— 内存管理(Memory Manage) 1.4进程间通信(Inter Process Communication) 2.线程 2.1概念 2.2为什么要有线程 2.3线…

基于单片机停车场环境监测系统仿真设计

**单片机设计介绍, 基于单片机停车场环境监测系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的停车场环境监测系统是一种利用单片机技术实现环境监测和数据处理的系统。它可以感知停车场的温湿…

Threejs_12 物体阴影的实现

所以在Threejs的画布世界之中,一个物体有自己的影子呢? 阴影效果的实现 你需要先知道在threejs世界中,有哪些灯光或者材质是可以产生阴影效果的 环境光没有阴影 平行光有阴影(太阳) 点光源有阴影(灯泡) 聚光灯有阴影(手电筒) 平面光源没有…

【C++干货铺】list的使用 | 模拟实现

个人主页点击直达:小白不是程序媛 C专栏:C干货铺 代码仓库:Gitee 目录 list的介绍及使用 list的介绍 list的使用 list的构造 list迭代器的使用 list的增删查改 list的模拟实现 结点的封装 迭代器的封装 list成员变量 构造函数 …

VMware三种网络模式

桥接模式 NAT(网络地址转换模式) Host-Only(仅主机模式) 参考: vmware虚拟机三种网络模式 - 知乎 (zhihu.com)

强化学习--多维动作状态空间的设计

目录 一、离散动作二、连续动作1、例子12、知乎给出的示例2、github里面的代码 免责声明:以下代码部分来自网络,部分来自ChatGPT,部分来自个人的理解。如有其他观点,欢迎讨论! 一、离散动作 注意:本文均以…

93.STL-系统内置仿函数

目录 算术仿函数 关系仿函数 逻辑仿函数 C 标准库中提供了一些内置的函数对象&#xff0c;也称为仿函数&#xff0c;它们通常位于 <functional> 头文件中。以下是一些常见的系统内置仿函数&#xff1a; 算术仿函数 功能描述&#xff1a; 实现四则运算其中negate是一元…