数仓的基本概念
什么是数仓
1.数仓:存储数据的仓库,主要是面相于主题,进行数据分析工作,主要是存储历史过去的数据,通过对过去历史数据分析从而对未来提供决策支持
2.数仓最大的特征:即不生产数据,也不消耗数据,数据来源与各个数据源
数仓的特征
- 面向主体:分析什么,什么就是主体
- 集成性:数据的种类,来源比较多 ,需要将各个来源的数据全部的集中在一起在这里插入代码片
- 非易失性:存储的都是过去既定发生数据,这些数据一般不会出现变更
- 时变性:随着时间的推移,原有分析方案可能无法满足分析要求,需要更新分析手段以及数据也会进行新增操作
OLAP和OLTP
对比需求 | OLTP | OLAP |
---|---|---|
功能 | 面向交易的事物处理 | 面向分析查询 |
设计 | 面向业务 | 面向主体 |
数据 | 最新数据,二维数据 | 历史数据,多维数据 |
存储 | M,G(存储单位) | T,P,E |
响应时间 | 快 | 慢 |
用户 | 业务操作人员 | 管理决策人员 |
ETL:抽取,转换,加载
狭义上ETL:
从ODS层将数据抽取处理啊,对数据进行清洗转换处理,将处理后数据加载到DW层过程
宽泛上ETL:
整个数仓全过程包含从数据源到ODS,从ODS到DW到DA过程DA到业务库
维度分析基本操作
维度:
分析问题的角度,当面对一个主题进行分析到时候,可以从不同到角度来分析,而这些角度其实就是维度
分类:
定性维度:在编写SQL的时候,这些维度对应字段会放置SQL的group by或则窗口函数中
定量维度:主要指求某一个具值相关内容,或某个范围的维度,在编写SQL的时候,这些维度对应字段会放置在SQL的where条件中
维度下钻和上卷:
一天为标准,需要进行上卷统计 周 月 季度 年 下钻统计 小时
从分析角度,不管下钻和上卷,其实都是增加了细化维度而已,统计维度变多了而已
指标
衡量事物发展的标准,也叫度量
数仓建模
- 数仓建模中,主要有两种建模方案:三范式建模,维度建模
三范式建模:三范式建主要是应用在关系型数据库中,三范式建模规定,在创建一个表的时候,这个表应该有一个主键,在构建的过程中,尽可能避免数据冗余存储问题
维度建模:
维度建模主要是应用OLAP数据库中(数仓环境中),维度建模规定,在构建表的时候,以能满足分析要求前提,如果能降低分析难度,即使出现了一些数据冗余问题,也不影响,而且主键也可以不存在
维度建模的两个核心概念:事实表和维度表
事实表
事实指的就是分析的主题,而事实表就是要分析的主题对应的表
一般都是通过事实表进行指标统计操作,在统计过程中,需要结合着各个维度,此时可能需要其他维度表参与
维度表
事实表中外键所对应的表其实都是维度表。
在进行统计分析的时候,除了使用事实表以外,还需要结合着一些其他表进行统计分析,而 这些表其实就是维度表。
维度退化操作
将维度信息数据从维度表抛离处理,将这些信息冗余到事实表中,这个过程称为维度退化
数仓发展模型
星型模型
只有一个分析的主体,也就是只有一个事实表,在事实表周围围绕了多个维度表,而且维度表于维度表之间没有任何联系
这种模型,一般是数仓发展初期的时候最容易产生的模型
雪花模型
只有一个分析的主题,也就是只有一个事实表,在事实表周围围绕了多个维度表,维度表可以接着关联其他的维度表
这种模型一般是数仓发展走歪了,做容易产生模型,这种模型在数仓构建过程中,尽量的表面出现,主要原因,这种模型不利于维护,而且会加大分析需求难度
星座模型
有多个分析的主题,也就是说有了多个事实表,在每个事实表周围都围绕了多个维度表,维度表和维度表在条件符合的情况下,是可以共享维度的;
这种模型,一般是数仓发展中,后期的时候最容易产生模型
缓慢渐变维
作用:是为了记录数据历史表更行为的
- SCD1:最简单的记录方案:不维护历史变更数据,每次都是直接将原来的数据覆盖掉,仅适合于错误数据处理工作
- SCD2(拉链表):采用拉链表的形式维护历史变化信息,采取方案:在原有表增加二个字段(start_time,end_time),通过这两个字段,来维护用户每一段变化的数据经历周期,从而形成拉链数据过程。
弊端:只要有其中一个字段发生变更,都需要对整条数据重新记录,冗余程度比较高
好处:实现比较简单,可以非常简单的维护更多的历史版本数据 - SCD3:当数据发生变更后,对表结构进行处理,可以新增一类数据,用于记录最新变更数据即可
适用于:空间不足,需要记录版本也不会特别多,可应采用scd3模型,否则建议都采集scd2拉链表方案
好处:冗余变小了
弊端:无法维护太多历史版本(3,5个左右),实现较为繁琐,不利于维护
数仓分层介绍
数仓分层原因:分层本质是认为划分操作,可以将某几个或者某几个表划分在各个层次中,分层主要的目的:明确各个层次作用(任务分工)利用后续维护工作
ODS层:源数据层
作用:对接数据源,用于将数据源中数据采集到ODS层,会和数据源保持相同粒度(将数据源中数据完整拷贝到ODS层)
注意:在生产中,有可能会出现在ODS层之前,会对数据进行预处理操作
DW层:数据仓库层
作用:对数据进行统计分析操作,构建同一宽表统计结果数据,数据来源于ODS层
注意:磁层主要会根据分析主体,形成主题统计宽表,服务DA层
DA(app层):数据应用层
作用:存储分析的结果表,会对DW层统计宽表,根据需求要求,从宽表中获取想要的数据,将这些数据灌入DA层