【数仓理论】

一、数仓建模方法论

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.hqwc.cn/news/266488.html

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

相关文章

从零开始搭建企业管理系统(六):RBAC 权限管理设计

RBAC 权限管理设计 前言权限分类功能权限设计什么是 RBACRBAC 组成RBAC 模型分类基本模型RBAC0角色分层模型RBAC1角色限制模型RBAC2统一模型RBAC3 RBAC0 权限设计用户管理角色管理权限管理关联表 总结 前言 作为一个后台管理系统,权限管理是一个绕不开的话题&#…

idea__SpringBoot微服务09——员工管理系统,(Springboot解决乱码),thymeleaf语法,404页面。

员工管理系统 完整项目地址:一、首页实现(注意的点)二、国际化三、乱码解决四、登录功能实现(注意的点)五、登录拦截器(注意的点)六、展示员工列表(注意的点)1、前端页面…

【每日一题】—— B. StORage room(Codeforces Round 912 (Div. 2))(位操作符)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

9.静态路由

静态路由 中小型网络都会用到,防火墙核心交换机用的很多,一般是用在出口 路由表:路由器用来转发数据包唯一的依据 NextHop下一跳 Static静态路由需要手动设置 ip route-static 目标网段 掩码 下一跳例如:ip route-static 192…

【UE5】初识MetaHuman 创建虚拟角色

步骤 在UE5工程中启用“Quixel Bridge”插件 打开“Quixel Bridge” 点击“MetaHumans-》MetaHuman Presets UE5” 点击“START MHC” 在弹出的网页中选择一个虚幻引擎版本,然后点击“启动 MetaHuman Creator” 等待一段时间后,在如下页面点击选择一个人…

程序员所需要的思维方式

# 程序员所需要的思维方式 ## 人与人最大的差距在于大脑 人与人最大的差距在于大脑。一个人不太可能吃别人饭量10倍的饭,也不太可能搬的起别人10倍多的砖,但是思考的速度和深度却差距非常大。花一秒钟就看透事物本质的人,和花一辈子都看不清的…

Tr0ll

信息收集 探测主机存活信息: nmap -sn --min-rate 10000 192.168.182.0/24Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-14 15:45 CST Nmap scan report for 192.168.182.1 Host is up (0.00026s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap…

STL源码剖析笔记——仿函数(函数对象)

系列文章目录 STL源码剖析笔记——迭代器 STL源码剖析笔记——vector STL源码剖析笔记——list STL源码剖析笔记——deque、stack,queue STL源码剖析笔记——Binary Heap、priority_queue STL源码剖析笔记——AVL-tree、RB-tree、set、map、mutiset、mutimap STL源…

redis(设置密码)配置文件详细

1.设置账号密码端口 config set requirepass 123456 设置密码为123456 config get requirepass 查看账号密码 auth 123456 登入的时候输入这个确定账号密码 1. 首先连接到Redis服务器: redis-cli 2. 然后使用CONFIG SET命令设置requirepass参数并指定密码: CONFIG SET requi…

​SSD在AI发展中的关键作用:从高速缓存到数据湖-2

二、大规模长期存储数据湖 大规模数据集: AI应用需要处理大量的数据,这些数据可能来自多个来源,包括图像、视频、文本、音频等。为了有效地管理这些数据,组织通常将其存储在大型的数据湖中。 容量扩展: 由于数据集的…

宏景eHR SQL 注入漏洞复现(CVE-2023-6655)

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR 中发现了一种被分类为关键的漏洞,该漏洞影响了Login Interface组件中/w_selfservice/oauthservlet/%2e../.%2e/genera…

分配栈空间的三种方式(基于适配qemu的FreeRTOS分析)

1、定义全局的数组 定义的全局数组属于bss段,相当于把bss段的一部分作为栈空间,栈空间的大小就是数组的大小如果把栈空间放在bss段,则在bss段清零时会多清零一段地址空间 2、在链接脚本中指定 用链接脚本在所有段的后面增加stack段&#xff…