【数仓理论】

news2024/12/23 14:01:19

一、数仓建模方法论

1.1 ER模型(Entity Relationship、实体关系模型、范式模型)

ER模型是Bill Inmon提出的一种建模方法,实体关系模型将复杂的数据抽象为两个概念 ---- 实体和关系
该模型在范式理论上符合3NF,这种模型目的是减少数据冗余,保证数据的一致性,这种模型不适合直接用于分析统计

范式一共有6种,范式级别越高,数据冗余越低:
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)
巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)

如下图为根据ER模型所建立的模型,较为松散,物理表多(需多表join,所以不适合分析统计)
在这里插入图片描述

1.1.1 第一范式(1NF)

第一范式(1NF)的核心原则:属性不可切割
如下图,“5台电脑”要拆分为数量“5”和商品“电脑”两个字段
在这里插入图片描述

1.1.2 第二范式(2NF)

第二范式(1NF)的核心原则:不能存在非主键字段“部分函数依赖”于主键字段【除主键外其他字段完全依赖于主键】
如下图,主键是(学号,课名),姓名完全依赖于学号,部分依赖于(学号,课名),因此是不满足第二范式的,需将姓名拆分出来
在这里插入图片描述

1.1.3 第三范式(3NF)

第三范式(1NF)的核心原则:不能存在传递函数依赖【决定某字段值的必须是主键】
如下图,系主任传递依赖于学号(系主任依赖于系名,系名依赖于学号,因此为传递依赖)
在这里插入图片描述

1.2 维度模型(重点)

维度模型是Ralph Kimball提出的一种建模方法,维度模型将复杂的业务抽象为两个概念 ---- 事实和维度
该模型关注的重点在于用户如何更快的完成需求分析及数据分析
如下图为根据维度模型所建立的模型,中间是事实表,周围是一圈维度表,模型更清晰、简洁
在这里插入图片描述

1.2.1 事实表

事实表是数据仓库维度建模的核心,紧紧围绕着业务过程来设计,其包含与该业务过程有关的维度引用(维度表外键)以及该业务过程的度量(通常是数字类型)
以上图为例,维度表外键对应OderId,ProductId,LocationId等,度量对应SalesAmount
事实表的三种类型分为:事务事实表、周期快照事实表、累计快照事实表

事务事实表(重点)

事务型事实表用来记录各业务过程,它保存的是各业务过程的最细粒度的操作事件。

设计事务事实表时一般可遵循以下四个步骤:
选择业务过程→声明粒度→确认维度(维度外键)→确认事实(度量)

周期快照事实表

周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标。一般是直接从业务系统同步获得。

比如有一张记录账户余额变动的表,每次计算账户余额要进行聚合操作,而使用周期快照事实表则可以直接获得其余额,不用再进行聚合操作
对于空气温度、行驶速度这些状态型指标,由于它们的值是连续的,所以无法使用事务型事实表统计而只能定期对其进行采样,构建周期型快照事实表。

累计快照事实表

累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。
累积型快照事实表通常具有多个日期字段,每个日期对应业务流程中的一个关键业务过程(里程碑)。

订单id用户id下单日期支付日期发货日期确认收货日期订单金额支付金额
100112342020-06-142020-06-152020-06-162020-06-1710001000

累积型快照事实表主要用于分析业务过程(里程碑)之间的时间间隔等需求。使用累积型快照事实表进行统计,就能避免事务事实表的关联操作,从而变得十分简单高效。

1.2.2 维度表

事实表围绕业务过程进行设计,而维度表则围绕业务过程所处的环境进行设计
维度表主要包含一个主键和各种维度字段维度字段称为维度属性

设计维度表时一般可遵循以下三个步骤:
确定维度表→确定主维表和相关维表→确定维度属性

1)确定维度表:

确定与每个事实表相关的维度

  1. 如果存在多个事实表与同一个维度都相关的情况,这种情况需保证维度的唯一性,即只创建一张维度表。
  2. 如果某些维度表的维度属性很少,例如只有一个**名称,则可不创建该维度表,而把该表的维度属性直接增加到与之相关的事实表中,这个操作称为维度退化
2)确定主维表和相关维表:

主维表与相关维表指的是业务系统中某维度相关的表

3)确定维度属性:

确定维度属性即确定维度表字段。维度属性主要来自于业务系统中与该维度对应的主维表和相关维表。维度属性可直接从主维表或相关维表中选择,也可通过进一步加工得到。

1.3 维度表的星型模型、雪花模型

规范化是指使用一系列范式设计数据库的过程,其目的是减少数据冗余,增强数据的一致性。通常情况下,规范化之后,一张表的字段会拆分到多张表。
反规范化是指将多张表的数据冗余到一张表,其目的是减少join操作,提高查询性能。

在设计维度表时,如果对其进行规范化,得到的维度模型称为雪花模型,如果对其进行反规范化,得到的模型称为星型模型
雪花模型与星型模型是针对于维度表来说的,区别在于是否进行规范化
如下图,item表和location表,雪花模型对其进行了规范化,拆分出来了一张表
在这里插入图片描述
数据仓库系统的主要目的是用于数据分析和统计,所以是否方便用户进行统计分析决定了模型的优劣。采用雪花模型,用户在统计分析的过程中需要大量的关联操作,而采用星型模型,则方便、易用且性能好。所以出于易用性和性能的考虑,维度表一般是很不规范化的

1.4 维度表的变化

维度属性是会随时间变化的,比如客户的手机号。
保存维度数据的历史状态,通常有以下两种做法,分别是全量快照表拉链表

全量快照表

离线数据仓库的计算周期通常为每天一次,所以可以每天保存一份全量的维度数据。
优点: 简单有效,方便理解和使用
缺点: 浪费存储空间,尤其是当数据的变化比例比较低时。

拉链表

拉链表,记录每条信息的生命周期,一旦生命周期结束,就重新开始一条新的记录,把当前日期放入生效开始日期,如果当前信息至今有效,在生效结束日期中填入一个极大值(如9999-12-31)。
该方式更加高效的保存维度信息的历史状态。
在这里插入图片描述
拉链表适合于:数据会发生变化,但是变化频率不高的维度。

二、数据的同步策略

数据的同步策略有全量同步增量同步

2.1 全量同步

全量同步,就是每天都将业务数据库中的全部数据同步一份到数据仓库,这是保证两侧数据同步的最简单的方式。

2.2 增量同步

增量同步,就是每天只将业务数据中的新增及变化数据同步到数据仓库。采用每日增量同步的表,通常需要在首日先进行一次全量同步。

通常维度表使用全量同步,事实表使用增量同步

同步策略
事务事实表增量同步
周期快照事实表全量同步
累计快照事实表增量同步
维度表中的全量快照表全量同步
维度表中的拉链表增量同步

三、数仓设计

1.1 数仓分层规划

在这里插入图片描述
维度建模的事实表存放在DWD层,维度表存放在DIM层

1.2 数仓构建流程

在这里插入图片描述
数据仓库模型设计除横向的分层外,通常也需要根据业务情况进行纵向划分数据域。
划分数据域(主题域) 的意义是便于数据的管理和应用。
通常可以根据业务过程或者部门进行划分。

1.3 业务总线矩阵

业务总线矩阵中包含维度模型所需的所有事实(业务过程)以及维度,以及各业务过程与各维度的关系。
矩阵的行是一个个业务过程,矩阵的列是一个个的维度,行列的交点表示业务过程与维度的关系。
在这里插入图片描述

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

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

相关文章

VTK学习(入门级教程,包括安装和使用)~持续更新中

说明:研究QTVTK有段时间了,准备把学到的东西分享给大家,这篇博客以VSQTVTK为主进行展开学习的。 VTK学习 VTK安装和使用教程VTK入门级教程设计界面vtkStudy.ui的操作vtkStudy.h头文件说明完整代码 vtkStudy.cpp绘制球体绘制长方体绘制圆柱绘制…

wordpress多語言插件Polylang與GTranslate會有衝突

wordpress多語言插件Polylang與GTranslate會有衝突,會導致分頁顯示不完整,需要禁用或卸載其中一個 分頁顯示才會沒問題 GTranslate必須要先按一種語言編輯好你要發佈網站,GTranslate這種語言為基礎去翻譯出來,其實內裡是套用了google 翻譯的…

第二证券:结构性行情或将延续 泛科技有望继续走强

展望未来,当时已进入重要的方针窗口期,能否有超预期的新方针推出是改变商场的要害。但复盘2023年的行情来看,过早买卖方针预期的成功率并不高,因而主张该方位以防御性资产为主,高股息资产从本年9月份至今现已调整了2个…

ubuntu dns 相关

查看dns配置 systemd-resolve --status 修改dns vim /etc/resolv.conf sudo apt install traceroute 追踪 traceroute www.baidu.com

windows下docker环境安装

开启硬件虚拟化技术 win10中开启 Hyper-V Win10 下是否开启硬件虚拟化技术,在控制面板,启用 window 功能,找到 Hyper-V 选项,点勾选确认。如图: Windows 11 家庭中文版新增 Hyper-V选项 注意以下的解决方案来自win1…

Vision Transformer模型架构详解

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

自动化测试 (一) 12306火车票网站自动登录工具

还记得2011年春运,12306火车票预订网站经常崩溃无法登录吗。 今天我们就开发一个12306网站自动登录软件。 帮助您轻松订票 Web的原理就是,浏览器发送一个Request给Web服务器,Web服务器处理完这个请求之后发送一个HTTP Response给浏览器。 …

【JAVA】黑马MybatisPlus 学习笔记【一】

1.快速入门 为了方便测试,我们先创建一个新的项目,并准备一些基础数据。 1.1 环境配置 导入项目 注意配置一下项目的JDK版本为JDK11。首先点击项目结构设置: 导入两张表,在课前资料中已经提供了SQL文件: 最后&am…

python用来干什么的,python用来做什么的

大家好,小编来为大家解答以下问题,python用来干什么的,python用来做什么的,今天让我们一起来看看吧! 随着互联网行业的发展,编程越来越受到人们的重视,但是始终很多人并不了解编程是什么&#x…

Linux——MySQL数据库系统

一、 MySQL的编译安装 1、准备工作 (1)为了避免发生端口冲突,程序冲突等现象,建议先查询MySQL软件的安装情况,确认没有使用以Rpm方式安装的mysql-server、mysql软件包,否则建议将其卸载 [rootlocalhost ~]…

13、RockerMQ消息类型之广播与集群消息

RocketMq中提供两种消费模式:集群模式和广播模式。 集群模式 集群模式表示同一个消息会被同一个消费组中的消费者消费一次,消息被负载均衡分配到同一个消费者上的多个实例上。 还有另外一种平均的算法是AllocateMessageQueueAveragelyByCircle&#xff…

element table表格内进行表单验证(简单例子,一看就会,亲测有用~)开箱即用!!

效果图&#xff1a; 代码&#xff1a; <div> <el-form ref"form" :model"form" ><el-table :data"form.tableData" align"center" border><el-table-column label"名称"><template slot-scope&…

国标GB28181安防视频云平台EasyCVR出现持续重启现象,是什么问题?该如何解决?

视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能…

边缘计算系统设计与实践

随着科技的飞速发展&#xff0c;物联网和人工智能两大领域的不断突破&#xff0c;我们看到了一种新型的计算模型——边缘计算的崛起。这种计算模型在处理大规模数据、实现实时响应和降低延迟需求方面&#xff0c;展现出了巨大的潜力。本文将深入探讨边缘计算系统的设计原理和实…

MySQL5 和 MySQL8 的配置区别 一些注意事项

1、使用命令行查看MySQL的版本 先保证你的mysql正在运行&#xff0c;假如用户名是root&#xff0c;密码是123456&#xff0c;运行下边的代码可以查看mysql的版本号。 mysql -uroot -p123456这里我的版本是5.7.19。也就是5版本的。 2、不同版本对应的数据库驱动jar包&#x…

【docker 】 安装docker(centOS7)

官网 docker官网 github源码 官网 在CentOS上安装Docker引擎 官网 在Debian上安装Docker引擎 官网 在 Fedora上安装Docker引擎 官网 在ubuntu上安装Docker引擎 官网 在RHEL (s390x)上安装Docker引擎 官网 在SLES上安装Docker引擎 最完善的资料都在官网。 卸载旧版本 …

AOP跨模块捕获异常遭CGLIB拦截而继续向上抛出异常

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、BUG详情 1.1 报错信息 1.2 接口响应信息 1.3 全局异常处理器的定义 二、排查过程 三、解决方案 四、总结 前言 最近&…

【SpringBoot】入门精简

目录 一、初识 SpringBoot 1.1 介绍 1.2 项目创建 1.3 目录结构 1.4 修改配置 二、SpringBoot 集成 2.1 集成 Mybatis框架 2.2 集成 Pagehepler分页插件 2.3 集成 Druid数据库连接池 2.4 集成 Log日志管理 一、初识 SpringBoot 1.1 介绍 Spring Boot是一个用于简化Sp…

无人零售柜:快捷舒适购物体验

无人零售柜&#xff1a;快捷舒适购物体验 通过无人零售柜和人工智能技术&#xff0c;消费者在购物过程中可以自由选择商品&#xff0c;根据个人需求和喜好查询商品清单。这种自主选择的购物环境能够为消费者提供更加舒适和满意的体验。此外&#xff0c;无人零售柜还具有节约时间…

Python手撕kmeans源码

参考了两篇文章 K-Means及K-Means算法Python源码实现-CSDN博客 使用K-means算法进行聚类分析_kmeans聚类分析结果怎么看-CSDN博客 # 定义kmeans类 from copy import deepcopy from sklearn.datasets import make_blobs import numpy as np import matplotlib.pyplot as pltc…