当前位置: 首页 > news >正文

2023.11.22 数据仓库2-维度建模

目录

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

相关文章:

2023.11.22 数据仓库2-维度建模

目录 1.数仓建设方案 2.数仓结构图,项目架构图 2.1项目架构图 2.2数仓结构图 3.建模设计 4.维度建模 什么是事实表: 什么是维度表: 数据发展模式y以及对应的模型 5.数仓建设规范 数据库划分规范 表命名规范 表字段类型规范 1.数仓建设方案 ODS: 源数据层(临时存储层) 贴…...

pycharm 创建的django目录和命令行创建的django再使用pycharm打开的目录对比截图 及相关

pytcharm创建django的项目 命令行创建的django 命令行创建项目时 不带路径时 (.venv) D:\gbCode>django-admin startproject gbCode 命令行创建项目时 带路径时 -- 所以如果有目录就指定路径好 (.venv) D:\gbCode>django-admin startproject gbCode d:\gbCode\...

【Pytorch】Visualization of Fature Maps(2)

学习参考来自 使用CNN在MNIST上实现简单的攻击样本https://github.com/wmn7/ML_Practice/blob/master/2019_06_03/CNN_MNIST%E5%8F%AF%E8%A7%86%E5%8C%96.ipynb 文章目录 在 MNIST 上实现简单的攻击样本1 训练一个数字分类网络2 控制输出的概率, 看输入是什么3 让正确的图片分…...

【目标检测】保姆级别教程从零开始实现基于Yolov8的一次性筷子计数

前言 一,环境配置 一,虚拟环境创建 二,安装资源包 前言 最近事情比较少,无意间刷到群聊里分享的基于百度飞浆平台的一次性筷子检测,感觉很有意思,恰巧自己最近在学习Yolov8,于是看看能不能复…...

笔记:内网渗透流程之信息收集

信息收集 首先,收集目标内网的信息,包括子网结构、域名信息、IP地址范围、开放的端口和服务等。这包括通过主动扫描和渗透测试工具收集信息,以及利用公开的信息源进行信息搜集。 本机信息收集 查看系统配置信息 查看系统详细信息&#xf…...

【2023.11.23】JDBC基本连接语法学习➹

1.导入jar包依赖:mysql-connector-java-8.0.27.jar 2.连接数据库! 3.无法解析类->导入java.sql.*,(将项目方言改为Mysql) JDBC,启动!! public class Main {public static voi…...

ubuntu 安装python3.13

列出 /usr/bin/ 目录下所有以 python 开头的文件和目录 ls /usr/bin/python* 添加Python软件源。您可以通过以下命令将Python的软件源添加到您的系统中 sudo add-apt-repository ppa:deadsnakes/ppa 然后运行以下命令以更新软件包列表: sudo apt-get update 安…...

OpenCV数据类型及CV_16UC1深度图ros订阅

最近用到深度图,对其数据类型及显示有些迷惑,记笔记于此: 目录 一、cv::Mat 的数据类型及转换方式1. cv::Mat 数据类型2. cv::Mat 数据类型互转2.1 OpenCV数据类型转换的函数2.2 可视化深度图像(CV_16UC1)二、cv::Mat 与 sensor_msgs::msg::Image 互转(基于cv_bridge)1.…...

华清远见嵌入式学习——网络编程——小项目

项目要求&#xff1a; 代码实现&#xff1a; 服务器端&#xff1a; #include <myhead.h>//定义协议包 struct proto {char type;char name[20];char text[128]; };int main(int argc, const char *argv[]) {//判断从终端输入的字符串的个数if(argc ! 3){printf("…...

分库分表、分布式数据库、MPP

分库分表、分布式数据库、MPP的区别吗&#xff1f; 一、MySQL分库分表和MySQL分布式集群在性能方面各有优劣&#xff0c;具体取决于应用场景和需求。 MySQL分库分表&#xff1a; 在分库分表的场景下&#xff0c;可以将负载分散到多个数据库实例上&#xff0c;从而提高整体性能…...

浅学指针(2)数组函数传值调用

系列文章目录 文章目录 系列文章目录前言1. 指针的使⽤和传址调⽤结论&#xff1a;实参传递给形参的时候&#xff0c;形参会单独创建⼀份临时空间来接收实参&#xff0c;对形参的修改不影响实 参。那么这个时候&#xff0c;就要搬出指针大哥&#xff0c;在main函数中将a和b的地…...

C++之unordered_map/set的使用

前面我们已经学习了STL中底层为红黑树结构的一系列关联式容器——set/multiset 和 map/multimap(C98). unordered系列关联式容器 在C98中, STL提供了底层为红黑树结构的一系列关联式容器, 在查询时效率可达到log2N,即最差情况下需要比较红黑树的高度次, 当树中的节点非常多时,…...

docker打包chatpdf(自写)

docker打包上传 docker build -t kitelff/chatpdf:v0.1 .##修改镜像名字 docker tag c2c1a0eb4e08 kitelff/chatpdf:v0.1## push docker push kitelff/chatpdf:v0.1上传文件&#xff0c;测试效果...

shell基础

一.Shell脚本编程概述 1.基本概念 将要执行的命令按顺序保存到一个文本文件&#xff1b; 给该文件可执行权限&#xff1b; 可结合各种Shell控制语句以完成更复杂的操作。 2.作用 Linux系统中的Shell是一个特殊的应用程序&#xff0c;它介于操作系统内核与用户之间&#x…...

力扣1038. 从二叉搜索树到更大和树(java,树的中序遍历解法)

Problem: 1038. 从二叉搜索树到更大和树 文章目录 题目描述思路解题方法复杂度Code 题目描述 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c; 二叉搜索树 满足下列约束条件&#xff…...

使用正则表达式来判断一个字符串只是否包含数字

使用正则表达式来判断一个字符串只是否包含数字 1、第一种 import java.util.regex.Pattern;public class Main {public static void main(String[] args) {String inputString "12345";if (containsOnlyDigits(inputString)) {System.out.println("字符串只…...

C#Wpf关于日志的相关功能扩展

目录 一、日志Sink(接收器) 二、Trace追踪实现日志 三、日志滚动 一、日志Sink(接收器) 安装NuGet包&#xff1a;Serilog Sink有很多种&#xff0c;这里介绍两种&#xff1a; Console接收器&#xff08;安装Serilog.Sinks.Console&#xff09;; File接收器&#xff08;安装…...

亚马逊云科技AI创新应用下的托管在AWS上的数据可视化工具—— Amazon QuickSight

目录 Amazon QuickSight简介 Amazon QuickSight的独特之处 Amazon QuickSight注册 Amazon QuickSight使用 Redshift和Amazon QuickSightt平台构建数据可视化应用程序 构建数据仓库 数据可视化 Amazon QuickSight简介 亚马逊QuickSight是一项可用于交付的云级商业智能 (BI…...

MySQL安全性:用户认证、防范SQL注入和SSL/TLS配置详解

MySQL作为广泛使用的关系型数据库管理系统&#xff0c;安全性至关重要。在本篇技术博客中&#xff0c;我们将深入探讨MySQL的用户认证方式、防范SQL注入攻击的方法以及SSL/TLS加密的配置。 1. MySQL用户认证方式 MySQL支持多种用户认证方式&#xff0c;其中两种常见方式是cac…...

EMG肌肉信号处理合集 (一)

本文归纳了常见的肌肉信号预处理流程&#xff0c;方便EMG信号的后续分析。使用pyemgpipeline库 来进行信号的处理。文中使用了 UC Irvine 数据库的下肢数据。 目录 1 使用wrappers 定义数据类&#xff0c;来进行后续的操作 2 肌电信号DC偏置去除 3 带通滤波器处理 4 对肌电…...

解决虚拟机启动报:此主机支持AMD-V,但AMD-V处于禁用状态

开启VMware虚拟机弹出以下异常解决方法&#xff1a;将SVM Mode设置成允许 解决步骤&#xff1a; 1&#xff0c;将电脑关机&#xff0c;然后进行启动&#xff0c;启动过程中多按delete&#xff08;f1或者f2&#xff0c;不同电脑按键的方式有所不同&#xff09;键&#xff0c;进入…...

STM32CubeIDE HAL库实战:搞定W25Q128跨页跨扇区写入的坑(附完整代码)

STM32CubeIDE HAL库实战&#xff1a;W25Q128跨页跨扇区写入的终极解决方案 在嵌入式存储应用中&#xff0c;W25Q128这颗16MB的SPI Flash芯片因其高性价比被广泛使用。但当开发者尝试实现跨页或跨扇区写入时&#xff0c;往往会遇到数据丢失或写入失败的问题。本文将深入剖析这些…...

异地容灾、双活、多活怎么做?NineData的数据复制与数据比对实践

异地容灾、双活、多活怎么做&#xff1f;很多团队第一反应是先选云厂商方案、数据库内核方案&#xff0c;或者先搭主备和多机房架构。但真正落到生产环境&#xff0c;企业最后要解决的往往不是“架构图怎么画”&#xff0c;而是更具体的问题&#xff1a;数据怎么持续同步&#…...

保姆级教程:魔百盒CM201-2长虹代工刷机,EMMC/NAND通刷固件实测(附TTL替换命令)

魔百盒CM201-2长虹代工刷机全流程实战指南 第一次接触电视盒子刷机时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。手里这台中国移动的魔百盒CM201-2长虹代工版&#xff0c;原本功能受限&#xff0c;无法自由安装应用&#xff0c;存储空间也捉襟见肘。经过多次实践和踩坑…...

从仿真到实战:如何用VPI+Matlab复现一篇光通信顶会论文的DSP算法?

从仿真到实战&#xff1a;如何用VPIMatlab复现光通信顶会论文的DSP算法&#xff1f; 在光通信领域&#xff0c;学术论文中提出的数字信号处理&#xff08;DSP&#xff09;算法往往需要经过严格的仿真验证才能应用于实际工程。本文将带你深入探索如何利用VPI和Matlab联合仿真环境…...

QModMaster:如何用开源方案解决工业ModBus通信的三大技术挑战

QModMaster&#xff1a;如何用开源方案解决工业ModBus通信的三大技术挑战 【免费下载链接】qModbusMaster Fork of QModMaster (https://sourceforge.net/p/qmodmaster/code/ci/default/tree/) 项目地址: https://gitcode.com/gh_mirrors/qm/qModbusMaster 在工业自动化…...

告别手动计数!STM32定时器主从模式新玩法:TIM3+TIM4自动发完脉冲就停

STM32定时器主从模式实战&#xff1a;精准脉冲控制的工程艺术 在嵌入式系统开发中&#xff0c;精确控制脉冲数量是许多应用场景的核心需求——从步进电机驱动到LED灯带控制&#xff0c;再到伺服系统定位。传统方案往往依赖CPU持续监控和软件计数&#xff0c;不仅占用宝贵的处理…...

别再折腾虚拟机了!用WSL2在Win11上5分钟搞定Ubuntu 22.04开发环境(附阿里云源配置)

5分钟极速搭建&#xff1a;WSL2Ubuntu 22.04开发环境全攻略 对于Windows平台的开发者而言&#xff0c;传统虚拟机总是让人又爱又恨——完整的Linux环境固然诱人&#xff0c;但沉重的资源占用和缓慢的启动速度常常令人抓狂。直到WSL2的出现&#xff0c;这个困扰开发者多年的痛点…...

如何轻松激活Windows系统:KMS_VL_ALL_AIO智能激活工具完整指南

如何轻松激活Windows系统&#xff1a;KMS_VL_ALL_AIO智能激活工具完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗&#xff1f;KMS_VL_ALL_AIO是一款功能…...

WinForm 中轻松绘制实时曲线,彻底告别图表控件焦虑

前言工业监控、科学实验或金融分析等场景中&#xff0c;数据可视化是不可或缺的一环。尤其当面对动态变化的实时数据时&#xff0c;如何高效、清晰地呈现趋势与异常&#xff0c;成为上位机软件开发的关键挑战。传统的图表控件往往功能有限、扩展性差&#xff0c;而完全自绘又耗…...