【数仓理论】

一、数仓建模方法论

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.mzph.cn/news/214564.shtml

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

相关文章

测距传感器

测距传感器 电子元器件百科 文章目录 测距传感器前言一、测距传感器是什么二、测距传感器的类别三、测距传感器的应用实例四、测距传感器的作用原理总结前言 测距传感器广泛应用于自动化控制、机器人导航、无人驾驶、测量仪器等领域。不同类型的测距传感器具有不同的测距范围、…

xtu oj 1178 Rectangle

题目描述 给你两个平行于坐标轴的矩形,请判断两者是不是相交(面积有重合的部分)? 输入 第一行是一个整数K,表示样例数。 每个样例占两行,每行是4个整数,表示一个矩形的对角线点的坐标&#x…

重磅!2023中国高校计算机大赛-人工智能创意赛结果出炉

目录 中国计算机大赛-人工智能创意赛现场C4-AI大赛颁奖及留影800个AI应用?这届大学生真能“搞事情”AI原生时代,百度要再培养500万大模型人才 中国计算机大赛-人工智能创意赛现场 12月8日,杭州,一位“白发老人”突然摔倒在地&…

[基础IO]文件描述符{C库函数\系统接口\初识fd}

文章目录 1.基础知识1.1对文件的认识1.2对系统调用接口的认识1.3如何理解LInux下一切皆文件? 2.C语言的库函数2.1FILE *fopen(const char *path, const char *mode);2.2对fopen()的mode的w/a的深层认识2.3fclose()2.4size_t fwrite(const void *ptr, size_t size, size_t nmem…

测试经理主管面试题

测试专业技能 请谈谈您对软件测试生命周期(STLC)的理解 需求分析:在这个阶段,测试团队仔细分析项目需求,理解产品功能和非功能需求。这有助于确定测试的范围和目标,为后续阶段奠定基础。测试计划&#xf…

【桌面应用开发】Tauri是什么?基于Rust的桌面应用

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

深入.NET平台和C#编程总结大全

第一章 简单认识.NET框架 (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework Class Library) 配图: (…

JSON

JSON指的是 JavaScript 对象表示法(JavaScript Object Notation) javascript对象:javascript中,除开JavaScript原始值(字符串,数字,布尔值,null,正则表达式)的都是javascript对象 JS…

Java - JVM内存区域的划分

Java 程序运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 分配:通过关键字new创建对象分配内存空间,对象存在堆中。 释放 &…

柔性数组详解

前言:柔性数组是C99中新添加的概念,它是结构体里面的最后一个成员,因为它的大小未知,所以很灵活,称之为柔 1 柔性数组占不占结构体的空间呢? 不占 typedef struct Stu {char y;int x;int arr[];//有些编译器…

数据在内存中的存储(整型篇)

1.辨析原码反码补码: 1.原码:有32位(int类四个字节,一个字节八个比特位),第一位是符号位,0正1负,其余为二进制位。 2.计算一般是对原码进行计算,但在负数计算使用原码会导…

强化学习(二)——Dueling Network(DQN改进)

与DNQ相比,使用优势函数(A函数)和状态价值函数(V)代替之前的Q(动作价值)函数, 最核心公式为 Q ∗ ( s , a ) A ∗ ( s , a ) V ∗ ( s ) − max ⁡ a A ∗ ( s , a ) Q^*(s,a)A^*(s,a)V^*(s)-\max_a A^*(s,a) Q∗(s,a)A∗(s,a)V…

高效利用内存资源之动态内存管理详解

目录 一、为什么存在动态内存分配 二、动态内存函数的介绍 2.1malloc 2.2free 2.3calloc 2.4realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2对动态开辟空间的越界访问 3.3对非动态开辟内存使用free释放 3.4使用free释放一块动态开辟内存的一部分 3.…

Spring Boot 3 集成 Druid 连接池详解

在现代的Java应用中,使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池,提供了丰富的监控和管理功能,成为很多Java项目的首选。本文将详细介绍如何在Spring Boot 3项目中配置数据源,集成Druid连接池&…

【ACM独立出版、确定的ISBN号】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议(CNSCT 2024) 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 随着互联网和网络应用的不断发展,网络安全在计算机科学中的地位越来越重要&…

Android Kotlin 泛型:强大的类型抽象和重用利器

一、什么是泛型? 泛型是一种参数化类型的机制,它允许我们在定义类、接口和方法时使用类型参数,从而实现代码的重用和类型安全。通过使用泛型,我们可以将类型作为参数传递给类或方法,在不同的场景中实现灵活的类型适配…

精选:免费且高效的邮件营销软件推荐

好用的邮件营销软件可以帮助企业获取客户、维系客户关系。对于有想做邮件营销想法,但是想先试试的企业来讲,免费版邮件营销软件就是个不错的选择。当然,免费的邮件邮件营销软件虽然在价格上有极大的优势,但是功能上会有各种限制。…

Java生态系统最受欢迎的工具类使用指南 ‍

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 �…

【小白专用】MySQL查询数据库所有表名及表结构其注释

一、先了解下INFORMATION_SCHEMA 1、在MySQL中,把INFORMATION_SCHEMA看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INF…

网络安全——SSH密码攻击实验

一、实验目的要求: 二、实验设备与环境: 三、实验原理: 四、实验步骤:​ 五、实验现象、结果记录及整理: 六、分析讨论与思考题解答: 一、实验目的要求: 1、了解SSH密码攻击、FTP密码攻击…