数仓基本介绍
数仓四大特征:
1> 面向主题:要分析的需求是什么,对应的主题是什么;
2> 集成性;
3> 非易失性:存储的都是过去既定发生的数据,不会再进行更改;
4> 时变性:随时间推移,数据需要增加最新的相关的数据,同时分析手段也会发生变化;
数据仓库与数据集市区别:
数据仓库:将公司中所有的数据全部都聚合在一起,形成的数据集合,称为数据仓库;
数据集市:对数据仓库中数据,根据要分析的主题,抽取出相关性的数据,得到这个数据集合,称为数据集市;因此可以说,数据集市就是一个小型数据仓库;
维度分析:
1> 什么是维度:指看待问题的角度;
2> 维度分类:
定性维度:字符类型的特征,比如区域维度包括全国各省份,需要计算的各种情况,没有具体范围;(这种维度在SQL上最多的表示通过group by处理)
定量维度:数值类型的特征,如价格区间、销量区间等,需要计算某一个固定范围情况;(这种维度在SQL上最多的表示通过where来处理)
3> 维度的分层和分级:细化维度
例如:
时间维度:一个层次四个级别:年、月、天、小时;
课程维度:(4层)
课程名称:只有一个级别,每门课程的名称;
课程分类:有两个级别,大类和小类;
课程难度:有三个级别,简单、一般、困难;
课程等级:有三个级别,初、中、高;
地区维度:一个层次三个级别,省、市、县
4> 维度的上卷和下钻操作
上卷维度:年、月、天
下钻维度:小时、分
5> 什么是指标:衡量事务的标准或者度量
(常见指标关键词:sum max min avg count topN 比率)
6> 指标的分类:
绝对数值:指的是需要计算出具体结果的指标,具体的大小和多少,如价格、销量、分数等;
相对数值:指的需要计算比率范围的情况,相对数值反映一定的程度,如及格率、购买率、涨幅等。;
数仓建模
数仓建模主要适用于**指导**怎么在数据仓库中进行构建表,以及如何进行数据仓库的分层构建,以及包括表中应该有哪些字段,这都是由一套理论来指导的。
常见的数仓规范主要由两种:三范式建模规范、维度建模规范。
对于三范式建模,要求在构建的时候,尽可能避免数据冗余出现。同时每个表需要有一个主键,三范式建模方案一般应用RDBMS中,而对于维度建模理论更多侧重于数据分析,所以在建模过程中,只要是利于分析的建模都是合格的,在此基础上允许数据可以出现一定的冗余情况。
在维度建模的思想中,主要定义两种类型的表:事实表和维度表
维度建模的中心思想:宽表,空间换时间,减少join场景;
1.维度建模--事实表
1> 事实表:一般指定的分析主题,这个主题所对应的表就是事实表,后者可以说,包含指标字段的表就是事实表;
2> 事实表的分类:
+ 1.事务事实表:表示最开始的事实表,其实就是事务事实表,一条数据就是一个事实;
+ 2.周期快照事实表:以具有规律性的、可预见性的时间间隔来记录事实,时间间隔如每天、每月、每年。
+ 3.累计快照事实表:累计快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个时期字段,用来记录整个生命周期的关键时间点。
2.维度建模--维度表
1> 维度表:略
2> 维度表分类:
+ 高基数维度:数量大;
+ 低基数维度:数据量小,变动性小;
建模模型
- 建模模型主要是描述整个数仓在不断发展过程中,产生模型架构
- 建模流程:确认业务流程 -> 确认模型粒度 -> 确认维度 -> 确认事实
1> 星型模型:
+ 特点:只有一个事实表,意味着只有一个分析的主题,在事实表的周围围绕了多张维度表 且维度表和维度表没有任何的关联;
+ 说明:数仓发展初期易产生的模式;
2> 雪花模型:
+ 特点:只有一个事实表,意味着只有一个分析的主题,在事实表的周围围绕了多张维度表,维度表可以接着关联其它的维度表;
+ 说明:数仓发展进入畸形的时候产生的模型,此模型不利于后期的维护,关联的越多,对分析起来的难度越大,在生产中尽量不要出现这种模型架构,即使出现,不要出现维度层次过多的问题;
3> 星座模型:
+ 特点:有多个事实表,意味着有多个分析的主题,在事实表周围围绕了多个维度表,在条件符合情况下,多个事实表可以共享维度表;
+ 说明:数仓发展的中后期易产生的模型;
缓慢渐变维
- 概念:维度中字段值可能会随时间发生变化;
- 注意:如果不维护一个数据的历史变化信息,那么在进行数仓分析的时候,是有可能对未来分析结果产生影响;
如何实现缓慢渐变维呢?
1> SCD1: 对于历史变化的数据直接进行覆盖,此种操纵仅适合于对于错误的数据处理;
2> SCD2(拉链表): 对原有表增加两个新的字段,一个是起始时间字段start_time, 一个是截止时间字段end_time,当有数据发生变更后,只需要对上一次数据进行标记起止范围,新增一个变更后的数据即可,由此产生一个拉链数据状态;
+ 好处:不会修改原有记录数据,利于维护操作,而且可以对多个历史版本进行数据存储操作;
+ 弊端:造成数据冗余,占用更大的磁盘空间;
3> SCD3: 直接对原有表进行新增列的方案,一旦有数据发生变更,新增一列字段,标记当前最新数据即可,以此来维护历史变化的数据,适合于磁盘空间不足,而且只需要维护少量历史变化的情况;
+ 优点: 尽可能减少了数据冗余的情况;
+ 弊端:不利于维护,仅能维护少量的历史变化版本;
数仓分层架构
- 数仓分层目的:
- 让业务逻辑化繁为简,数据结构清晰;
- 层次分明,便于维护,统一数据口径
- 原有数仓分层:宽泛hive分层架构 三层
- ODS层:源数据层 Operation Data Store
- 作用:对接数据源,保持相同粒度(直接拷贝源数据,加个分区字段记录同步时间)
- DW层: 数据仓库层 Data Warehouse (主要是用于进行数据分析的工作,数据都是来源于ODS层;)
- 明细层DWD(Data Warehouse Detail)
- 表分类(维度、事实)
- 维度退化
- 少量清洗、转换(json拉平、脱敏、字段名修改、单位统一)
- 中间层DWM (Data Warehouse Middle)
- 提前聚合
- 业务层DWS (Data Warehouse Service)
- 形成宽表 (减少join操作,存储空间换取时间效率)
- 数据应用层(APP)
- 前端应用直接读取的数据源,或者根据报表、专题分析的需求而计算生成的数据。
- 维度层DIM (dimension)
- 高基数维度数据:用户资料表、商品资料表等类似资料表。数据可能达千万级或着上亿级别;
- 低基数维度数据:一般是配置表、字典表,如日期维度表。数据量可能是个位数或者几千、几万;
- 明细层DWD(Data Warehouse Detail)
- ODS层:源数据层 Operation Data Store