概念:数仓(Data Warehouse)是一种思想,数仓是一种规范,数仓是一种解决方案
数据处理方式
数据处理可分为两大类:
1、联机事务处理OLTP(On-Line Transaction processing)
作用:管理事务、保证数据的安全性。
2、联机分析处理OLAP(On-Line Analytical Processing)
作用:分析数据、对以往的数据进行分享

数据建模
概念:指的是对现实世界各类数据的抽象组织,确定数据库管辖的范围、数据的组织形式等直至转化成现实的数据库 数据建模有两类:
ER建模
ER建模是面向应用,遵循三范式,以消除数据冗余为目标的设计技术。
三范式:
- 1NF:列不可再分
- 2NF:有主键,所有的列依赖于主键--自增主键--UUID--业务字段;
- 3NF:有外键,有列依赖非主键的列,就移出去创建从表--主从表使用外键进行关联--一对一,一对多,多对多(减少数据冗余)
优点:规范性较好,冗余小,数据集成和数据一致性方面得到重视。
缺点:需要全面了解企业业务、数据和关系;实施周期非常长,成本昂贵;对建模人员的能力要求也非常高,容易烂尾。
维度建模
概念
维度建模以分析决策的需求构建模型,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能,更直接面向业务。维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术
三个概念:
- 事实表:发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中。从最低的粒度级别来看,事实表对应一个度量事件,反之亦然
- 维度表:每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任何事实表的外键,当然,维度表行的描述环境应与事实表
- 度量值:度量值是对一次行为的度量,也就是所谓的事实
优点:技术要求不高,快速上手,敏捷迭代,快速交付;更快速完成分析需求,较好的大规模复杂查询的响应性能
缺点:维度表冗余会较多,视野狭窄
维度建模表分类
事实表
事实表中的每行数据代表一个业务事件,事实表中一条记录所表达的业务细节程度被称为粒度。为了度量业务,需要定义度量值,度量值一般为数值类型。数值可以分为可加、半可加、不可加。维度属性可以存储到事实表中,这种存储到事实表中的维度列被称为退化维度。
- 可加

- 半可加

- 不可加

设计原则:
- 原则1:尽可能包含所有与业务过程相关的事实
- 原则2:只选择与业务过程相关的事实
- 原则3:分解不可加性事实为可加的组件。例如:订单的优惠率是不可加的,分解为订单原价金额和订单优惠金额这两个事实存储在事实表中
- 原则4:在选择维度和事实之前必须先声明粒度,粒度越细越好。
- 原则5:在同一个事实表中不能有多种不同粒度的事实

- 原则6:事实的单位要保持一致,应该采用统一的计量单位
- 原则7:对事实的null值要处理
- 原则8:使用退化维度提高事实表的易用性
设计方法:
1、选择业务过程以及确定事实表类型
2、明确了业务过程后,根据具体业务需求来选择与维度建模有关的业务过程。
3、声明粒度
4、确定维度
5、确定事实
6、冗余维度
事实表的分类
- 事务型事实表
单事务事实表:将相同的事务放在一张事实表中一个事务就有一个事务表。缺点:会有很多张事实表,而且如果两个事务关联的时候,表连接速度慢。
多事务事实表:将多个事务存放在一张表中,可以避免表连接问题,但是对下游使用有理解难度,而且度量中会有很多o值。

- 周期型快照事实表
固定时间间隔的数据去生产结果:一般情况下,我们查看事务型事实表就可以知道自己的交易情况,但是随着时间的推移,事实型数据越拉越多,就需要周期快照事实表帮我们去统计结果。
周期快照事实表统计结果:需要按照多个维度的组合间隔一段时间定时去生成
快照的粒度:事务型---取决于事务的细节程度;周期型---取决于时间 天 月 季度 年
密度:事务型---稀疏,事务发生的时候才会进行记录;周期型---密集,不管是否有事务发生,都会按照间隔进行计算
可加性:事务型---可加型;周期型---半可加型,统计的结果
- 累积型快照事实表
跟踪业务事实的变化,覆盖过程的整个生命周期:数据仓库中可能需要累积或存储订单从下单开始,到订单商品被打包、运输、签收等各个业务阶段的时间点数据,来跟踪订单生命周期的进展情况。 当这个业务过程进行时,是事实表的记录也要不断更新
维度表
维度:数据分析的环境。
维度表的范围很宽:每个属性都可以作为查询条件。
维度的数量一般在一个有限的范围内,但比维度表多。
设计原则:
1、维度属性尽量丰富,为数据使用打下基础。
2、给出详实的,富有意义的文字描述 ID:用于表的关联 名称:标签,描述。
3、区分数值型属性和事实;一个数字可能是度量值还可能是属性值。维度属性:常用于查询约束条件或分组统计。事实:用于参与度量的计算。
4、退化维度:简单的维度表放在事实表中,减少表关联,加快查询效率。
5、缓慢变化维;直接覆盖原值:不看历史数据,简单粗暴;增加属性列:需要更改有限次;拉链表:需要在维度行再增加三列--有效日期、截止日期、行标识(可选)
设计方法:
数据仓库的能力直接与维度属性的质量和深度成正比。
分析出维度表,首先设计出主维度表,然后根据需求查看是否需要设计出从维度表。如果维度表属性比较少可以查看是否能够使用维度退化
整合:
- 垂直整合
多张表--如果主键一致但是每张表属性不同,需要合并表的时候,就用垂直整合
- 水平整合
多张表--如果主键不同,但是属性相差无几,需要合并表的时候,就用水平整合
拆分:
- 垂直拆分
将维度表拆分为主表和从表
主维表:存放稳定、产出时间早、热度高的属性
从维表:存放变化较快、产出时间晚、热度低的属性
- 水平拆分
业务不同,不同产品有自己的独特的维度属性
一张维度表要存储所有的商品信息,通用属性存放到主维表,独有属性存放从维度表。以后如果新增商品,商品的通用信息放主维表,独有属性存放到从维表

维度建模步骤
- 业务处理过程:维度建模是紧贴业务。我们要分析的指标并不是凭空想象的,而是基于管理层或者产品想要了解的结果,我们要对原始数据进行分析得到对应的结果
- 声明粒度:选择最小粒度。维度选择越小:数据量越大,支持的业务越多,但是计算量会增多【上卷】 维度选择越大:数据量会减少,支持的计算也会减少。我们在进行计算的时候,只能计算当前粒度以及比当前粒度更大的数据
- 确认维度:维度退化:谁。什么时间,什么地点
- 确认事实:度量值:个数,件数,金额。同一事实表中的度量必须具有相同的粒度
维度建模分类
维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型
星型模型:
一个事实表和一组维度表组成。每个维度表都有一个维作为主键,所有这些维的主键组合事实表的主键。
雪花模型:
有一个或多个维度表没有直接连接到事实表上,而是通过其他维度表连接到事实表上,其图解就像多个雪花连接在一起,故称雪花模型相对比星型模型,虽然减少了数据的冗余,但是查询的是时候会增加表与表之间的连接。
星座模型:
需要多个事实表共享维度表,因而可以视为星型模型的集合,故称为星座模型。

数据仓库分层
数仓分层原因
- 空间换时间:速度快,提升用户体验,但会出现大量的冗余数据。
- 增强拓展性:上游数据的改变不会对下游产生影响,中间层可以把数据处理成你想要的样子。
- 分层管理:把一个复杂的工作拆成了多个简单的工作。
数仓分层优点
清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便定位和理解。
方便数据血缘追踪:简单来说,我们最终给业务呈现的是一个能直接使用业务表,但是它来源有很多,如果有一张来源出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有数据,只需要从有问题的步骤开始修复。
屏蔽原始数据的异常:屏蔽业务的影响。不必改一次业务就需要重新接入数据。
分层明细
ADS层
ADS(Application Data Service--应用数据服务),将计算的结果存储到ADS层,里面的数据要保证的原则就是---不需要进行二次计算。
DW层
DW(Data warehouse--数据仓库),该层从ODS中获取数据按照主题建立各种数据模型【维度建模】。再基于维度建模创建事实表与维度表。
DW层又分:DWD-存储事实表,并进行一些列的添加【维度退化】;DWS-存储宽表,事实数据+维度数据,方便进行计算,减少表的连接;DIM-存储维度表
ODS层
ODS(Operate data store--操作数据存储层),一般被称为原始数据层,存放的都是从业务系统抽取过来的数据,一般存放在ods的数据尽量保持数据的原貌。


大数据生态图

ETL
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程、ETL是将业务系统的数据经过抽取(Extract)、清洗转换(Transform)之后加载(Load)到数据仓库的过程。
ETL的流程:
- 数据抽取Extract:从各个不同的数据源抽取到ODS
- 数据清洗转换Transform: 在抽取的过程中,将数据转换成需要的字段类型或者改为指定字段值
①清洗:数据清洗的任务是过滤哪些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据
②转换:数据转换的任务主要进行不一致的数据转换、数据粒度的转换,以及一些商务规则的计算。
如:
空值处理-可捕获字段空值,进行加载或替换为其他含义数据,或数据分流问题库。
数据标准-统一元数据、统一标准字段、统一字段类型定义。
数据拆分-依据业务需求做数据拆分
数据验证-时间规则、业务规则、自定义规则
数据替换-对于因业务因素,可实现无效数据、缺失数据的替换
数据关联-关联其他数据或数学,保障数据完整性
常见概念描述
数据仓库:
用于支持决策,将企业的各业务系统产生的基础数据,通过维度建模的方式,将业务数据划分为多个主题(集市)统一存储,统一管理。
数据集市:
数据集市可以理解为一种"小型数据仓库",它只包含单个主题。数据仓库的一个子集,主要面向部门及业务,并且只面向某个特定的主题。i
数据孤岛:
业务系统之间各自为政、相互独立造成的数据孤岛,体现在业务不集成、流程不互通、数据不共享。
数据湖:
2010年、Pentaho首席技术官James Dixon创造了"数据湖"一词。是管理公司的最原始数据。存储企业各种各样的原始数据的大型仓库,包括结构化、非结构、二进制图像、音频、视频等等。
数据湖三剑客:Delta Lake、Hudi与Iceberg
数据中台:
超大型的数据仓库,并且提供了数据仓库的访问能力。
宽表:
宽表和窄表的依据是:数据列的多少而不是行的多少 字段比较多的数据库表 通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表