学习笔记
学习渠道:https://www.bilibili.com/video/BV1qv411y7Wv?p=1
1.1 数据仓库诞生原因
- 历史数据积存
历史数据使用频率低,堆积在业务库中,导致性能下降
随着业务的进行,会源源不断的产生数据,这些业务数据都会存储在业务数据库中,如 MySQL、Oracle 当中,支持业务系统的运行。
但当线上的业务系统运行超过一定时间,其积压的历史数据就会越来越多,对业务数据库就会产生一定的负载,导致业务系统运行速度降低。
而这些历史数据中,有相当一部分是冷数据,即业务系统一般对最近产生的数据(当天、一周内、一个月内)调用比较频繁,对较早之前的数据调用频率很低。
所以为了避免随着时间的推移,历史数据积压对业务数据库产生的影响,从而影响业务的正常运行,企业需要定期将积压的历史数据从业务数据库中转移出去,存储到一个专门存放历史数据的仓库中。这就是数据仓库。
- 企业数据分析需要
企业将历史数据存储到数据仓库中后,这些数据不仅可以改善业务数据库的性能;还可以用来进行数据分析,从而辅助管理层进行决策。以历史数据积存为导向,这种发展是顺其自然的。
但有的企业开始并没有历史数据积存,然而仅仅是对数据分析特别看重。这些企业可能会存在多个部门需要进行数据分析的任务。这些企业建立数据仓库的原由,是以数据分析为导向的。
小结
企业无论是以历史数据积存,还是数据分析为导向建立的数据仓库。数据积存、数据分析,这两个都是数据仓库的基本功能与建设目的。
1.2 基本概述
数据仓库(Data Warehouse,DW)
数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合
主要用于历史数据的积存,并使用分析方法(OLAP、数据分析)进行分析整理,进而辅助决策,为管理者、企业系统提供数据支持,构建商业智能
数据仓库特点
- 面向主题:为数据分析提供服务,根据主题将原始数据集合在一起
- 集成:原始数据来源于不同数据源,要整合成最终数据,需要经过抽取、清洗、转换的过程(对数据进行统一的标准化、规范化)
- 非易失:保存的数据是一系列历史快照,不允许被修改,只允许通过工具进行查询、分析
- 时变性:数仓会定期接收、集成新的数据,从而反映出数据的最新变化
数据仓库VS数据库
-
数据库面向事务设计,属于OLTP(在线事务处理)系统,主要操作是随机读写;在设计时尽量避免冗余,常采用符合范式规范来设计
-
数据仓库是面向主题设计的,属于OLAP(在线分析处理)系统,主要操作是批量读写;关注数据整合,以及分析、处理性能;会有意引入冗余,采用反范式方式设计
数仓主要是面向分析的
1.3 数据仓库的技术实现
传统数据仓库
由关系型数据库组成MPP(大规模并行处理)集群
大数据数据仓库
利用大数据天然的扩展性,完成海量数据的存放
将SQL转换为大数据计算引擎任务,完成数据分析
1.3.1 MPP架构 & 分布式架构(Hadoop架构)
1.4 常见数据仓库产品
传统数据仓库
- Oracle RAC
- DB2
- Teradata
- Greenplum
大数据数据仓库
- Hive
- Spark SQL
- HBase
- Impala
- HAWQ
- TIDB
2 第二部分
2.1 数据仓库的架构
ETL(抽取、转换、加载)完成数据的接入
ODS保存原始数据,完成数据的积存功能
DWS DWD 为数据分析提供服务
ADS 保存结果数据
2.2 ETL
将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程
ETL是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去
ETL规则的设计和实施约占整个数据仓库搭建工作量的60%~80%
ETL负责将分布的、异构数据源中的数据抽取到临时中间层后进行清洗,转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。
数据抽取(Extraction)
抽取的数据源可以分为结构化数据、非结构化数据、半结构化数据
结构化数据一般采用JDBC、数据库日志方式,非半结构化数据会监听文件变动
数据转换(Transformation)
数据转换要经历数据清洗和转换两个阶段
数据清洗主要是对出现的重复、二义性、不完整、违反业务或逻辑规则等问题的数据进行统一的处理
数据转换主要是对数据进行标准化处理,进行字段、数据类型、数据定义的转换
数据加载(Loading)
将最后处理完的数据导入到对应的目标源里
2.2.1 常见的ETL工具
-
结构化数据ETL工具
Sqoop
Kettle
Datastage
Informatica
Kafka -
非半结构化数据ETL工具
Flume
Logstash
2.3 ODS 数据操作层
数据存积
数据与原业务数据保持一致,可以增加字段用来进行数据管理
存储的历史数据是只读的,提供业务系统查询使用
业务系统对历史数据完成修改后,将update_type字段更新为UPDATE,追加回ODS中
在离线数仓中,业务数据定期通过ETL流程导入到ODS中,导入方式有全量、增量两种
-
全量导入:数据第一次导入时,选择此种方式
-
增量导入:数据非第一次导入,每次只需要导入新增、更改的数据,建议使用外连接&全覆盖方式
2.4 DWD 数据明细层
数据分析
数据明细层对ODS层的数据进行清洗、标准化、维度退化(时间、分类、地域)
数据仍然满足3NF模型,为分析运算做准备
2.5 DWS 数据汇总层
数据汇总层的数据对数据明细层的数据,按照分析主题进行计算汇总,存放便于分析的宽表
存储模型并非3NF,而是注重数据聚合,复杂查询、处理性能更优的数仓模型,如维度模型
2.6 ADS 数据应用层
数据应用层也被称为数据集市
存储数据分析结果,为不同业务场景提供接口,减轻数据仓库的负担
数据仓库擅长数据分析,直接开放业务查询接口,会加重其负担
第三部分
3.1 OLTP(在线事务处理)
OLTP(在线事务处理)系统中,主要操作是随机读写
为了保证数据一致性、减少冗余,常使用关系模型
在关系模型中,使用三范式规则来减少冗余
3.2 OLAP(在线联机分析)
OLAP系统,主要操作是复杂分析查询:关注数据整合,以及分析、处理性能
OLAP根据数据存储的方式不同,又分为ROLAP,MOLAP,HOLAP ,其目的都是加快数据分析功能
-
ROLAP(Relation OLAP,关系型OLAP):使用关系模型构建,存储系统一般为RDBMS
ROLAP系统建模方法,典型的数据仓库建模方法有ER模型、维度模型、Data Value,Anchor
宽表模型
宽表模型是维度模型的衍生,适合join性能不佳的数据仓库产品
宽表模型将维度冗余到事实表中,形成宽表,以此减少join操作 -
MOLAP(Multidimensional OLAP,多维型OLAP):预先聚合计算,使用多维数组的形式保存数据结果,加快查询分析时间
-
HOLAP(Hybrid OLAP,混合架构的OLAP):ROLAP和MOLAP两者的集成;如低层是关系型的,高层是多维矩阵型的;查询效率高于ROLAP,低于MOLAP
3.2.1 OLAP多维分析
OLAP主要操作是复杂查询,可以多表关联,使用COUNT,SUM,AVG等聚合函数
OLAP对复杂查询操作做了直观的定义,包括钻取、切片、切块、旋转