数仓分层基础理论

1 .为什么要分层?

数据仓库为什么要进行分层呢? 当然肯定是有好处的

  1. 复杂的任务进行简单化, 拆分为一个一个的小任务,方便错的时候进行定位
  2. 通过中间的分层数据,能极大的提高一次性结果的复用性,减少数据的重复性计算
  3. 隔离开原始数据, 与原始数据解耦开来,提高数据的安全性

2. 数据集市与数据仓库的区别(面试)?

数据集市其实就是一种微型的数据仓库, 不管是主题,还是历史数据,都要小于数据仓库,是部门级的,只能为某个部门的人员提供服务,而数据仓库则是企业级的,数据可以为企业做一个决策支持

3.数仓理论

先来说一下下面几个知识点:
完全函数依赖: 通过AB能推出C,但是单独通过A或B无法推出C, 这就叫C完全依赖于AB
部分函数依赖:单独通过A或B能推出C,那么说C部分依赖于AB
传递函数依赖: A能得到B,B能得到C,但C不能得到A,那么说C传递依赖于A

3.1 范式理论:

分类: 目前业界范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF)。

1)定义
范式可以理解为设计一张数据表的表结构,符合的标准级别。 规范和要求
2)优点
关系型数据库设计时,遵照一定的规范要求,目的在于降低数据的冗余性。
为什么要降低数据冗余性?
(1)十几年前,磁盘很贵,为了减少磁盘存储。
(2)以前没有分布式系统,都是单机,只能增加磁盘,磁盘个数也是有限的
(3)一次修改,需要修改多个表,很难保证数据一致性
3)缺点
范式的缺点是获取数据时,需要通过Join拼接出最后的数据。

三范式区分:

第一范式: 属性不可分割
第二范式: 不能存在部分函数依赖
第三范式: 不能存在传递函数依赖

3.2 关系建模和维度建模

当今的数据处理大致可以分成两大类:联机事务处理OLTP、联机分析处理OLAP
OLTP: 是传统的关系型数据库的主要应用
OLAP: 主要应用于维度模型

区别: OLTP能够减少数据的冗余量, 但是会造成很多的松散的表,在进行查询时,得进行多表join连接查询,会降低性能, 为了应用于大数据中, 方便快速的得到数据,数据仓库一般使用OLAP

维度建模又分为3种: 星型模型、雪花模型、星座模型

星型模型: 以事实表为中心,维度的层级只有一层
雪花模型: 以事实表为中心, 维度的层级可能会有多层, 但外面将多层维度进行维度退化,得到星型模型
星座模型: 星座模型的选择与前面两种并不冲突,只用观察多个事实表之间是否有共享的维度表

3.3 维度表与事实表的区分

维度表:
一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。
例如:用户、商品、日期、地区等。

事实表:
事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”这个术语表示的是业务事件的度量值(可统计次数、个数、件数、金额等),例如,订单事件中的下单金额。 事实表一般来说是比较大的

事实表又分为下面3种:
1)事务型事实表
以每个事务或事件为单位,例如一个销售订单记录,一笔支付记录等,作为事实表里的一行数据。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新
2)周期型快照事实表
周期型快照事实表中不会保留所有数据,只保留固定时间间隔的数据,例如每天或者每月的销售额,或每月的账户余额等。
3)累积型快照事实表
累计快照事实表用于跟踪业务事实的变化。例如,数据仓库中可能需要累积或者存储订单从下订单开始,到订单商品被打包、运输、和签收的各个业务阶段的时间点数据来跟踪订单声明周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新。

4 分层的层级

数仓的分层目前市面上很多的叫法都不同,当时实际的应用都是差不多的, 以下分层是参照尚硅谷视频进行的

4.1 ODS层:

(1)保持数据原貌不做任何修改,起到备份数据的作用。
(2)数据采用压缩,减少磁盘存储空间(例如:原始数据100G,可以压缩到10G左右)
(3)创建分区表,防止后续的全表扫描

4.2 DWD层:

**四要素: 选择业务过程→声明粒度→确认维度→确认事实**

(1)选择业务过程: 其实就是根据业务需求,拿到事实表数据
在业务系统中,挑选我们感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。
如果是中小公司,尽量把所有业务过程都选择。
如果是大公司(1000多张表),选择和需求相关的业务线。

(2)声明粒度:
数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。
声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。
典型的粒度声明如下:
订单当中的每个商品项作为下单事实表中的一行,粒度为每次。
每周的订单次数作为一行,粒度为每周。
每月的订单次数作为一行,粒度为每月。
注意: 如果在DWD层粒度就是每周或者每月,那么后续就没有办法统计细粒度的指标了。所以建议采用最小粒度。一般不对得到的数据进行操作直接拿到的就是最小粒度

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

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

4.3 DWS层:

DWS层统计各个主题对象的当天行为,服务于DWT层的主题宽表。

记忆点:

1.根据每天聚合统计;
2. 建什么表: 维度宽表
3. 表的字段?: 站的维度表的角度去看事实表, 关注事实表的度量值

4.4 DWT层:

DWT层统计各个主题对象的累积行为。
将表的度量值 根据一定的累积时间,计算出首次,末次,或一段时间内要得到的数据

记忆点:

  1. 关注一段累积的时间的度量值
  2. 建表 : 维度主题宽表
  3. 表的字段?: 站的维度表的角度去看事实表, 关注事情的首次,末次, 一段时间的度量值
    在这里插入图片描述

4.5 ADS: 对电商系统各大主题指标分别进行分析,用于最后的数据应用

猜你喜欢

转载自blog.csdn.net/First_____/article/details/121443741
今日推荐