数据仓库理论

概念:数仓(Data Warehouse)是一种思想,数仓是一种规范,数仓是一种解决方案

数据处理方式

数据处理可分为两大类:

1、联机事务处理OLTP(On-Line Transaction processing)

作用:管理事务、保证数据的安全性。

2、联机分析处理OLAP(On-Line Analytical Processing)

作用:分析数据、对以往的数据进行分享

image.png

数据建模

概念:指的是对现实世界各类数据的抽象组织,确定数据库管辖的范围、数据的组织形式等直至转化成现实的数据库
数据建模有两类:

ER建模

ER建模是面向应用,遵循三范式,以消除数据冗余为目标的设计技术。

三范式:

  • 1NF:列不可再分
  • 2NF:有主键,所有的列依赖于主键–自增主键–UUID–业务字段;
  • 3NF:有外键,有列依赖非主键的列,就移出去创建从表–主从表使用外键进行关联–一对一,一对多,多对多(减少数据冗余)

优点:规范性较好,冗余小,数据集成和数据一致性方面得到重视。

缺点:需要全面了解企业业务、数据和关系;实施周期非常长,成本昂贵;对建模人员的能力要求也非常高,容易烂尾。

维度建模

概念

维度建模以分析决策的需求构建模型,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能,更直接面向业务。维度建模是面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术

三个概念:

  • 事实表:发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中。从最低的粒度级别来看,事实表对应一个度量事件,反之亦然
  • 维度表:每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任何事实表的外键,当然,维度表行的描述环境应与事实表
  • 度量值:度量值是对一次行为的度量,也就是所谓的事实

优点:技术要求不高,快速上手,敏捷迭代,快速交付;更快速完成分析需求,较好的大规模复杂查询的响应性能

缺点:维度表冗余会较多,视野狭窄

维度建模表分类

事实表

事实表中的每行数据代表一个业务事件,事实表中一条记录所表达的业务细节程度被称为粒度。为了度量业务,需要定义度量值,度量值一般为数值类型。数值可以分为可加、半可加、不可加。维度属性可以存储到事实表中,这种存储到事实表中的维度列被称为退化维度。

  • 可加

image.png

  • 半可加

image.png

  • 不可加

image.png

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

image.png

  • 原则6:事实的单位要保持一致,应该采用统一的计量单位
  • 原则7:对事实的null值要处理
  • 原则8:使用退化维度提高事实表的易用性
设计方法:

1、选择业务过程以及确定事实表类型

2、明确了业务过程后,根据具体业务需求来选择与维度建模有关的业务过程。

3、声明粒度

4、确定维度

5、确定事实

6、冗余维度

事实表的分类
  • 事务型事实表

单事务事实表:将相同的事务放在一张事实表中一个事务就有一个事务表。缺点:会有很多张事实表,而且如果两个事务关联的时候,表连接速度慢。

多事务事实表:将多个事务存放在一张表中,可以避免表连接问题,但是对下游使用有理解难度,而且度量中会有很多o值。

image.png

  • 周期型快照事实表

固定时间间隔的数据去生产结果:一般情况下,我们查看事务型事实表就可以知道自己的交易情况,但是随着时间的推移,事实型数据越拉越多,就需要周期快照事实表帮我们去统计结果。

周期快照事实表统计结果:需要按照多个维度的组合间隔一段时间定时去生成

快照的粒度:事务型—取决于事务的细节程度;周期型—取决于时间 天 月 季度 年

密度:事务型—稀疏,事务发生的时候才会进行记录;周期型—密集,不管是否有事务发生,都会按照间隔进行计算

可加性:事务型—可加型;周期型—半可加型,统计的结果

  • 累积型快照事实表

跟踪业务事实的变化,覆盖过程的整个生命周期:数据仓库中可能需要累积或存储订单从下单开始,到订单商品被打包、运输、签收等各个业务阶段的时间点数据,来跟踪订单生命周期的进展情况。 当这个业务过程进行时,是事实表的记录也要不断更新
image.png

维度表

维度:数据分析的环境。

维度表的范围很宽:每个属性都可以作为查询条件。

维度的数量一般在一个有限的范围内,但比维度表多。

设计原则:

1、维度属性尽量丰富,为数据使用打下基础。

2、给出详实的,富有意义的文字描述 ID:用于表的关联 名称:标签,描述。

3、区分数值型属性和事实;一个数字可能是度量值还可能是属性值。维度属性:常用于查询约束条件或分组统计。事实:用于参与度量的计算。

4、退化维度:简单的维度表放在事实表中,减少表关联,加快查询效率。

5、缓慢变化维;直接覆盖原值:不看历史数据,简单粗暴;增加属性列:需要更改有限次;拉链表:需要在维度行再增加三列–有效日期、截止日期、行标识(可选)

设计方法:

数据仓库的能力直接与维度属性的质量和深度成正比。

分析出维度表,首先设计出主维度表,然后根据需求查看是否需要设计出从维度表。如果维度表属性比较少可以查看是否能够使用维度退化

整合:

  • 垂直整合

多张表–如果主键一致但是每张表属性不同,需要合并表的时候,就用垂直整合
image.png

  • 水平整合

多张表–如果主键不同,但是属性相差无几,需要合并表的时候,就用水平整合
image.png

拆分:

  • 垂直拆分

将维度表拆分为主表和从表

主维表:存放稳定、产出时间早、热度高的属性

从维表:存放变化较快、产出时间晚、热度低的属性

  • 水平拆分

业务不同,不同产品有自己的独特的维度属性

一张维度表要存储所有的商品信息,通用属性存放到主维表,独有属性存放从维度表。以后如果新增商品,商品的通用信息放主维表,独有属性存放到从维表

image.png

维度建模步骤

  • 业务处理过程:维度建模是紧贴业务。我们要分析的指标并不是凭空想象的,而是基于管理层或者产品想要了解的结果,我们要对原始数据进行分析得到对应的结果
  • 声明粒度:选择最小粒度。维度选择越小:数据量越大,支持的业务越多,但是计算量会增多【上卷】 维度选择越大:数据量会减少,支持的计算也会减少。我们在进行计算的时候,只能计算当前粒度以及比当前粒度更大的数据
  • 确认维度:维度退化:谁。什么时间,什么地点
  • 确认事实:度量值:个数,件数,金额。同一事实表中的度量必须具有相同的粒度

维度建模分类

维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型

星型模型:

一个事实表和一组维度表组成。每个维度表都有一个维作为主键,所有这些维的主键组合事实表的主键。
image.png

雪花模型:

有一个或多个维度表没有直接连接到事实表上,而是通过其他维度表连接到事实表上,其图解就像多个雪花连接在一起,故称雪花模型相对比星型模型,虽然减少了数据的冗余,但是查询的是时候会增加表与表之间的连接。
image.png

星座模型:

需要多个事实表共享维度表,因而可以视为星型模型的集合,故称为星座模型。

image.png

数据仓库分层

数仓分层原因

  • 空间换时间:速度快,提升用户体验,但会出现大量的冗余数据。
  • 增强拓展性:上游数据的改变不会对下游产生影响,中间层可以把数据处理成你想要的样子。
  • 分层管理:把一个复杂的工作拆成了多个简单的工作。

数仓分层优点

清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便定位和理解。

方便数据血缘追踪:简单来说,我们最终给业务呈现的是一个能直接使用业务表,但是它来源有很多,如果有一张来源出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。

减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有数据,只需要从有问题的步骤开始修复。

屏蔽原始数据的异常:屏蔽业务的影响。不必改一次业务就需要重新接入数据。

分层明细

ADS层

ADS(Application Data Service–应用数据服务),将计算的结果存储到ADS层,里面的数据要保证的原则就是—不需要进行二次计算。

DW层

DW(Data warehouse–数据仓库),该层从ODS中获取数据按照主题建立各种数据模型【维度建模】。再基于维度建模创建事实表与维度表。

DW层又分:DWD-存储事实表,并进行一些列的添加【维度退化】;DWS-存储宽表,事实数据+维度数据,方便进行计算,减少表的连接;DIM-存储维度表

ODS层

ODS(Operate data store–操作数据存储层),一般被称为原始数据层,存放的都是从业务系统抽取过来的数据,一般存放在ods的数据尽量保持数据的原貌。

image.png

image.png

大数据生态图

image.png

ETL

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程、ETL是将业务系统的数据经过抽取(Extract)、清洗转换(Transform)之后加载(Load)到数据仓库的过程。

ETL的流程:

  • 数据抽取Extract:从各个不同的数据源抽取到ODS
  • 数据清洗转换Transform:
    在抽取的过程中,将数据转换成需要的字段类型或者改为指定字段值

①清洗:数据清洗的任务是过滤哪些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据

②转换:数据转换的任务主要进行不一致的数据转换、数据粒度的转换,以及一些商务规则的计算。

如:

空值处理-可捕获字段空值,进行加载或替换为其他含义数据,或数据分流问题库。

数据标准-统一元数据、统一标准字段、统一字段类型定义。

数据拆分-依据业务需求做数据拆分

数据验证-时间规则、业务规则、自定义规则

数据替换-对于因业务因素,可实现无效数据、缺失数据的替换

数据关联-关联其他数据或数学,保障数据完整性

常见概念描述

数据仓库:

用于支持决策,将企业的各业务系统产生的基础数据,通过维度建模的方式,将业务数据划分为多个主题(集市)统一存储,统一管理。

数据集市:

数据集市可以理解为一种“小型数据仓库”,它只包含单个主题。数据仓库的一个子集,主要面向部门及业务,并且只面向某个特定的主题。i

数据孤岛:

业务系统之间各自为政、相互独立造成的数据孤岛,体现在业务不集成、流程不互通、数据不共享。

数据湖:

2010年、Pentaho首席技术官James Dixon创造了“数据湖”一词。是管理公司的最原始数据。存储企业各种各样的原始数据的大型仓库,包括结构化、非结构、二进制图像、音频、视频等等。

数据湖三剑客:Delta Lake、Hudi与Iceberg

数据中台:

超大型的数据仓库,并且提供了数据仓库的访问能力。

宽表:

宽表和窄表的依据是:数据列的多少而不是行的多少
字段比较多的数据库表
通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值