数据仓库
数据仓库的定义
数据仓库(Data Warehouse),简称DW。数据仓库顾名思义,是⼀个很⼤的数据存储集合(存储数据的仓库,主要是用于存储过去既定发生的历史数据,对这些数据进行数据分析的操作, 从而对未来提供决策支持),出于企业的分析性报告和决策⽀持⽬的⽽创建,对多样的业务数据进⾏筛选与整合。它能为企业提供⼀定的BI(商业智能:例如数据挖掘、数据分析和数据报表)能⼒。有了数据报表,还可以指导业务流程改进。
数据仓库最大的特点: 既不生产数据, 也不消耗数据, 数据来源于各个数据源
ETL
ETL: 抽取 转换 加载 指的: 数据从数据源将数据灌入到ODS层, 以及从ODS层将数据抽取出来, 对数据进行转换处理工作, 最终将数据加载到DW层, 然后DW层对数据进行统计分析, 将统计分析后的数据灌入到DA层, 整个全过程都是属于ETL范畴。现在的数据仓库模式更像是ELT。狭义上ETL: 从ODS层到DW层过程
数据库和数据仓库的区别
数据库和数据仓库的区别实际讲的是OLTP和OLAP的区别。
OLTP系统的典型应用就是RDBMS,也就是我们俗称的数据库,当然这里要特别强调此数据库表示的是关系型数据库,Nosql数据库并不在讨论范围内。
OLTP是面向于事务(业务)的 , 主要是用于捕获数据 , 主要是存储的最近一段时间的业务数据, 交互性强 一般不允许出现数据冗余
OLAP系统的典型应用就是DW,也就是我们俗称的数据仓库。
OLAP是面向于分析(主题)的 , 主要是用于分析数据, 主要是存储的过去历史数据 , 交互性较弱 可以允许出现一定的冗余。
数据仓库不是大型的数据库,虽然数据仓库存储数据规模大。
数据仓库的出现,并不是要取代数据库。
数据库是面向事务的设计,数据仓库是面向主题设计的。
数据库一般存储业务数据,数据仓库存储的一般是历史数据。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
数仓分层
-
ODS(operdation Data store)数据贴源层
-
DWD(data warehouse details)数据明细层
-
DWM(data warehouse middle)数据中间层
-
DWS(data warehouse service)数据服务层
-
ADS(application data service)数据应用层
数仓分层带来的好处:
-
数据结构清晰:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。
-
避免重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
-
统一数据口径:提供统一的数据出口,统一对外输出的数据口径。
-
复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题。
-
数据隔离:不必改一次业务就需要重新接入数据。另外,随着业务的变化,只需要调整底层的数据,对应用层对业务的调整零感知。
数仓建模
数仓建模指的规定如何在hive中构建表, 数仓建模中主要提供两种理论来进行数仓建模操作: 三范式建模和维度建模理论
三范式建模: 主要是存在关系型数据库建模方案上, 主要规定了比如建表的每一个表都应该有一个主键, 数据要经历的避免冗余发生等等
维度建模: 主要是存在分析性数据库建模方案上, 主要一切以分析为目标, 只要是利于分析的建模, 都是OK的, 允许出现一定的冗余, 表也可以没有主键。维度建模的两个核心概念:事实表和维度表。
事实表
事实表:一般指的就是分析主题所对应的表,每一条数据用于描述一个具体的事实信息, 这些表一般都是一坨主键(外键)和描述事实字段的聚集
1) 事务事实表: 保存的是最原子的数据,也称“原子事实表”或“交易事实表”。沟通中常说的事实表,大多指的是事务事实表。 2) 周期快照事实表: 周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等 周期表由事务表加工产生 3) 累计快照事实表: 完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点
维度表
维度表: 指的在对事实表进行统计分析的时候, 基于某一个维度, 二这个维度信息可能其他表中, 而这些表就是维度表
高基数维度表: 指的表中的数据量是比较庞大的, 而且数据也在发送的变化 例如: 商品表, 用户表 低基数维度表: 指的表中的数据量不是特别多, 一般在几十条到几千条左右,而且数据相对比较稳定 例如: 日期表,配置表,区域表
维度建模的三种模型
-
星型模型
-
特点:只有一个事实表, 那么也就意味着只有一个分析的主题, 在事实表的周围围绕了多个维度表, 维度表与维度表之间没有任何的依赖
-
反映数仓发展初期最容易产生模型
-
-
雪花模型
-
特点: 只有一个事实表, 那么也就意味着只有一个分析的主题, 在事实表的周围围绕了多个维度表, 维度表可以接着关联其他的维度表
-
反映数仓发展出现了畸形产生模型, 这种模型一旦大量出现, 对后期维护是非常繁琐, 同时如果依赖层次越多, SQL分析的难度也会加大
-
此种模型在实际生产中,建议尽量减少这种模型产生
-
-
星座模型
-
特点: 有多个事实表, 那么也就意味着有了多个分析的主题, 在事实表的周围围绕了多个维度表, 多个事实表在条件符合的情况下, 可以共享维度表
-
反映数仓发展中后期最容易产生模型
-
缓慢变化维
定义:数仓的重要特点是反映历史变化,所以如何处理维度的变化是非常重要的。现实世界中维度的属性并不是一成不变的,它随着时间发生缓慢的变化,与数据增长较为快速的事实相比,维度变化相对缓慢,如何处理变化的维度是数仓经常要面对的问题。
处理方式 | 优点 | 缺点 | 适用场景 | 案例 |
---|---|---|---|---|
原样保留 | 实现简单,维度属性无变化 | 丢失历史维度属性 | 维度不变的场景 | 例如身份信息 |
覆盖重写 | 简单粗暴,直接覆盖 | 丢失历史维度属性 | 只看最新维度属性 | 美团改名为美团美团点评(这种情况,产品的维度或者事实表的主键并未发生变化) |
新增维度行 | 反映历史维度属性 | 主键要求高,实现起来相对复杂 | 缓慢变化维的场景基本都适用 | 增加无业务含义的代理键。拉链表 |
新增维度列 | 保留历史维度属性,并且对新增和历史维度归一 | 扩展性不好,需要新增列 | 某个维度属性影响了维表中大量行的情况 | 一列为旧的属性,一列为新的属性。 |
微型维度 | 提取剧烈变化的维度属性,与缓慢变化的维度进行隔离 | 破坏了维度的可浏览性;需要使用代理键 | 大型维表或者快速变化的维表。 | |
其他维度 | 上面技术的组合,也称为混合缓慢变化维技术 |