黑洞

这里藏着一些独特的想法

0%

数仓建模学习笔记

概念

什么是数据仓库

存储数据的仓库,主要是用于存储过去既定发生的历史数据,对这些数据进行数据分析的操作,从而对未来提供决策支持。

数据仓库最大的特点

既不生产数据,也不消耗数据,数据来源于各个数据源。

数据仓库的四大特征

  1. 面向于主题:分析的内容是什么,什么就是我们的主题。
  2. 集成性:数据是来源于各个数据源,将各个数据源数据汇总在一起。
  3. 非易失性(稳定性):存储在数据仓库中数据都是过去既定发生数据,这些数据都是相对比较稳定的数据,不会发生改变。
  4. 时变性:随着的推移,原有的分析手段以及原有数据可能都会出现变化(分析手动更换,以及数据新增)。

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、商品价格……

进行统计分析的时候,可以结合商品维度、用户维度、商家维度、地区维度进行统计分析。在进行统计分析的时候,可能需要关联到其他的表(维度表)。

注意:一般需要计算的指标字段所在表,都是事实表。

事实表的分类:

  1. 事务事实表:保存的是最原子的数据,也称“原子事实表”或“交易事实表”。沟通中常说的事实表,大多指的是事务事实表。
  2. 周期快照事实表:周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等。周期表由事务表加工产生。
  3. 累计快照事实表:完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。

维度表

在对事实表进行统计分析的时候,基于某一个维度需要用到的表就是维度表。

维度表并不一定存在,但是维度是一定存在:

比如:根据用户维度进行统计,如果在事实表只存储了用户id,此时需要关联用户表,这个时候就是维度表。

比如:根据用户维度进行统计,如果在事实表不仅仅存储了用户id,还存储用户名称,这个时候有用户维度,但是不需要用户表的参与,意味着没有这个维度表。

维度表的分类

高基数维度表:指的表中的数据量是比较庞大的,而且数据也在发送的变化。例如:商品表,用户表。

低基数维度表:指的表中的数据量不是特别多,一般在几十条到几千条左右,而且数据相对比较稳定。例如:日期表,配置表,区域表。

维度分析

维度分析:针对某一个主题,可以从不同的维度的进行统计分析,从而得出各种指标的过程。

维度一般指的分析的角度,看待一个问题的时候,可以多个角度来看待,而这些角度指的就是维度。

比如:时间、地域、商品、来源、用户……

维度的分类:

  • 定性维度:指的计算每天、每月、各个的维度,一般来说定性维度的字段都是放置在group by中。
  • 定量维度:指的统计某一个具体的维度或者某一个范围下信息。比如说:2020年度订单额,统计20~30岁区间人群的人数 ,一般来说这种维度的字段都是放置在where中。

我们还可以对维度进行细分(分层)。

时间维度:

  • 按年
  • 按季度
  • 按月份
  • 按天
  • 按每个小时

地域维度:

  • 按省份
  • 按市
  • 按县

从实际分析中,统计的层级越多,意味统计的越细化,设置维度内容越多。

维度的下钻和上卷:以某一个维度为基准,往细化统计的过程称为下钻,往粗粒度称为上卷。

比如: 按照天统计,如果还需要统计出小时,指的就是下钻;如果还需要统计季度、月、年,称为上卷统计。

在实际分析中,下钻和上卷意味统计的维度层次变得更多了。

什么是指标

指标是衡量事务发展的标准,就是度量值。

常见的度量函数:count()、sum()、max()、min()、avg()

还有一些比例指标(转化率、流失率、同比)。

指标的分类:

  • 绝对指标: 计算具体的值指标。总额、最高、平均。
  • 相对指标: 计算比率问题的指标。转化率、流失率、同比。

维度建模的三种模型

  • 星形模型:只有一个事实表,那么也就意味着只有一个分析的主题,在事实表的周围围绕了多个维度表 维度表与维度表之间没有任何的依赖。它是数仓发展初期最容易产生模型。
  • 雪花模型:只有一个事实表,那么也就意味着只有一个分析的主题,在事实表的周围围绕了多个维度表,维度表可以接着关联其他的维度表。但是它属于畸形模型!这种模型一旦大量出现,对后期维护是非常繁琐,同时如果依赖层次越多,SQL分析的难度也会加大。在实际生产中,建议尽量减少这种模型产生。
  • 星座模型:有多个事实表,意味着有了多个分析的主题,在事实表的周围围绕了多个维度表,多个事实表在条件符合的情况下,可以共享维度表。它是数仓发展中后期最容易产生模型。

缓慢渐变维

在离线数据分析中,如果一个维度的数据是随时间逐渐变化的,那么这个维度就属于缓慢渐变维。

在实际开发中,一般使用拉链表来维护。不删除、不修改已存在的数据,当数据发生变更后,会添加一条新的版本记录的数据。在建表的时候,会多加两个字段(起始时间,截止时间),通过这两个字段来标记每条数据的起止时间。

  • 好处:适用于保存多个历史版本,方便维护实现。
  • 弊端:会造成数据冗余情况,导致磁盘占用率提升。但是,我们可以压缩呀!
如果觉得文章写得不错或对您有帮助,请我喝杯柠檬茶吧!