概念
什么是数据仓库
存储数据的仓库,主要是用于存储过去既定发生的历史数据,对这些数据进行数据分析的操作,从而对未来提供决策支持。
数据仓库最大的特点
既不生产数据,也不消耗数据,数据来源于各个数据源。
数据仓库的四大特征
- 面向于主题:分析的内容是什么,什么就是我们的主题。
- 集成性:数据是来源于各个数据源,将各个数据源数据汇总在一起。
- 非易失性(稳定性):存储在数据仓库中数据都是过去既定发生数据,这些数据都是相对比较稳定的数据,不会发生改变。
- 时变性:随着的推移,原有的分析手段以及原有数据可能都会出现变化(分析手动更换,以及数据新增)。
ETL是什么
ETL是三个英文单词的缩写。
E代表Extra
T代表Transform
L代表Load
翻译成中文分别是抽取、转换、加载。
数据从数据源将数据导入到ODS层,以及从ODS层将数据抽取出来,对数据进行转换处理工作,最终将数据加载到DW层,然后DW层对数据进行统计分析,将统计分析后的数据导入到DA层,整个全过程都是属于ETL范畴。
数据仓库 和 数据库的区别
数据库(OLTP):面向于事务(业务)的,主要是用于捕获数据,主要是存储的最近一段时间的业务数据,交互性强 一般不允许出现数据冗余。
数据仓库(OLAP):面向于分析(主题)的,主要是用于分析数据,主要是存储的过去历史数据,交互性较弱 可以允许出现一定的冗余。
数仓建模
数仓建模指的规定如何在hive中构建表,数仓建模中主要提供两种理论来进行数仓建模操作:三范式建模和维度建模理论。
- 三范式建模:主要是存在关系型数据库建模方案上,主要规定了比如建表的每一个表都应该有一个主键,数据要经历的避免冗余发生等等
- 维度建模:主要是存在分析性数据库建模方案上,主要一切以分析为目标,只要是利于分析的建模都行,允许出现一定的冗余,表也可以没有主键。
维度建模的两个核心概念:事实表和维度表。
事实表
事实表一般指的就是分析主题所对应的表,每一条数据用于描述一个具体的事实信息,这些表一般都是一坨主键(外键)和描述事实字段的聚集。
例如: 比如说统计2020年度订单销售情况
主题:订单
相关表:订单表(事实表)
相关字段:订单的ID、商品id、单价、购买的数量、下单时间、用户id、商家id、省份id、市区id、县id、商品价格……
进行统计分析的时候,可以结合商品维度、用户维度、商家维度、地区维度进行统计分析。在进行统计分析的时候,可能需要关联到其他的表(维度表)。
注意:一般需要计算的指标字段所在表,都是事实表。
事实表的分类:
- 事务事实表:保存的是最原子的数据,也称“原子事实表”或“交易事实表”。沟通中常说的事实表,大多指的是事务事实表。
- 周期快照事实表:周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等。周期表由事务表加工产生。
- 累计快照事实表:完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。
维度表
在对事实表进行统计分析的时候,基于某一个维度需要用到的表就是维度表。
维度表并不一定存在,但是维度是一定存在:
比如:根据用户维度进行统计,如果在事实表只存储了用户id,此时需要关联用户表,这个时候就是维度表。
比如:根据用户维度进行统计,如果在事实表不仅仅存储了用户id,还存储用户名称,这个时候有用户维度,但是不需要用户表的参与,意味着没有这个维度表。
维度表的分类
高基数维度表:指的表中的数据量是比较庞大的,而且数据也在发送的变化。例如:商品表,用户表。
低基数维度表:指的表中的数据量不是特别多,一般在几十条到几千条左右,而且数据相对比较稳定。例如:日期表,配置表,区域表。
维度分析
维度分析:针对某一个主题,可以从不同的维度的进行统计分析,从而得出各种指标的过程。
维度一般指的分析的角度,看待一个问题的时候,可以多个角度来看待,而这些角度指的就是维度。
比如:时间、地域、商品、来源、用户……
维度的分类:
- 定性维度:指的计算每天、每月、各个的维度,一般来说定性维度的字段都是放置在
group by
中。 - 定量维度:指的统计某一个具体的维度或者某一个范围下信息。比如说:2020年度订单额,统计20~30岁区间人群的人数 ,一般来说这种维度的字段都是放置在
where
中。
我们还可以对维度进行细分(分层)。
时间维度:
- 按年
- 按季度
- 按月份
- 按天
- 按每个小时
地域维度:
- 按省份
- 按市
- 按县
从实际分析中,统计的层级越多,意味统计的越细化,设置维度内容越多。
维度的下钻和上卷:以某一个维度为基准,往细化统计的过程称为下钻,往粗粒度称为上卷。
比如: 按照天统计,如果还需要统计出小时,指的就是下钻;如果还需要统计季度、月、年,称为上卷统计。
在实际分析中,下钻和上卷意味统计的维度层次变得更多了。
什么是指标
指标是衡量事务发展的标准,就是度量值。
常见的度量函数:count()、sum()、max()、min()、avg()
还有一些比例指标(转化率、流失率、同比)。
指标的分类:
- 绝对指标: 计算具体的值指标。总额、最高、平均。
- 相对指标: 计算比率问题的指标。转化率、流失率、同比。
维度建模的三种模型
- 星形模型:只有一个事实表,那么也就意味着只有一个分析的主题,在事实表的周围围绕了多个维度表 维度表与维度表之间没有任何的依赖。它是数仓发展初期最容易产生模型。
- 雪花模型:只有一个事实表,那么也就意味着只有一个分析的主题,在事实表的周围围绕了多个维度表,维度表可以接着关联其他的维度表。但是它属于畸形模型!这种模型一旦大量出现,对后期维护是非常繁琐,同时如果依赖层次越多,SQL分析的难度也会加大。在实际生产中,建议尽量减少这种模型产生。
- 星座模型:有多个事实表,意味着有了多个分析的主题,在事实表的周围围绕了多个维度表,多个事实表在条件符合的情况下,可以共享维度表。它是数仓发展中后期最容易产生模型。
缓慢渐变维
在离线数据分析中,如果一个维度的数据是随时间逐渐变化的,那么这个维度就属于缓慢渐变维。
在实际开发中,一般使用拉链表来维护。不删除、不修改已存在的数据,当数据发生变更后,会添加一条新的版本记录的数据。在建表的时候,会多加两个字段(起始时间,截止时间),通过这两个字段来标记每条数据的起止时间。
- 好处:适用于保存多个历史版本,方便维护实现。
- 弊端:会造成数据冗余情况,导致磁盘占用率提升。但是,我们可以压缩呀!