数据仓库原理 - 概念、架构、建模方法
目录
1、介绍
1.1 数据仓库诞生原因
- 历史数据积存
历史数据使用频率低,堆积在业务库中,导致性能低,所以会将其存放在数据仓库 - 企业数据分析需要
各个部门自己建立独立的数据抽取系统,导致数据不一致已经资源浪费
为解决问题,引入数据仓库
1.2 数据仓库概述
定义:数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合
作用:主要用于组织积累的历史数据,并使用分析方法(OLAP、数据分析)进行分析整理,进而辅助决策,为管理者、企业系统提供数据支持,构建商业智能
数据仓库特点:
- 面向主题。根据主题将原始数据集合在一起
- 集成:数据来源于不同的数据源,通过抽取、清洗、转换等整合成最终数据
- 非易失:数仓保存的数据是一系列的历史快照,和业务那边同步的数据,不允许被修改,只允许通过工具进行查询、分析
- 时变性:数仓会定期接受、集成新的数据【即历史数据不能改,最新数据进行载入】
数据仓库VS数据库
- 数据库面向事务设计,属于OLTP(在线事务处理)系统,主要操作是随机读写,设计时避免冗余,常采用符合规范来设计
- 数据仓库面向主题设计的,属于OLAP(在线分析处理)系统,主要操作是批量读写,关注数据整合,会有意引入冗余,采用反范式方式设计
1.3 数仓的技术实现
两种:传统数仓,大数据数库
传统数据仓库:
由关系型数据库组成MPP(大规模并行处理)集群,利用单机数据库形成
问题:扩展性有限,热点问题
大数据数据仓库:
将SQL转换为大数据计算引擎任务,完成数据分析
分布式文件系统 —解决扩展性问题
备份三份,可选 — 解决热点问题
自身问题:SQL支持率不高,缺少事务支持
1.4 MPP&分布式架构
MPP架构
- 传统数仓中常见的技术架构,将单机数据库节点组成集群,来提升处理性能
- 每个节点都有独立的磁盘存储系统和内存系统
- 每个数据节点通过专用网络或者商业网络互相连接,彼此协同计算,为整体服务,每个节点不能单独作用
- 设计上优先考虑C(一致性),再A(可用性),最后考虑P(分区容错性)
优点:
- 运算方式精细,延迟低,吞吐低
- 适合中等规模的结构化数据处理
缺点:
- 存储位置不透明
- 分布式事务的实现会导致扩展性降低
- 并行计算时,一个节点的瓶颈就会造成整个系统的短板,一个节点的问题会造成其他节点也需要等它,所以没法实现超大的结构,越多节点出错概率越高
分布式架构
- 大数据中常见的技术架构,也称为Hadoop架构/批处理架构
- 每个节点即包含存储资源,也含有计算资源。可以单独的运行局部任务。
- 相比于MPP不共享数据,而分布式架构数据全局透明共享
- 每台节点通过局域网或广域网相连,节点间的通信开销大,在运算时致力于减少数据移动
- 优先考虑P(分区容错性),再A(可用性),再考虑C(一致性)
- 随着数据增大,分布式架构的优势越发明显。数据量较小时,可能分布式架构的运行速度慢于MPP
MPP+分布式架构
- 数据存储采用分布式架构的公共存储,提供分区容错性
- 上层架构采用MPP,减少运算延迟
1.5 常见产品
传统数据仓库:
- Oracle(使用方便,but单个集群只能支持100左右的节点,适合数据量不大)
- DB2(企业很少用,经常会被赠送)
- Teradata(贵,但优秀,企业常用)
- Greenplum(开源)
大数据数据仓库:
- Hive(主流。原理:SQL转成大数据的计算引擎)(延迟大,离线批处理优秀)
- Spark SQL(产生原因:Hive运算速度太慢了)
- HBase(高并发读)
- Lmpala(数据查询引擎)
- HAWQ(Greenplum在Hadoop上的移植产品)
- TLDB(MPP+SMP)
2、架构
2.1 架构图
根据数据流方向,依次是ETL (数据接入)-- > ODS (保存原始数据)–> CDM (数据分析)–>ADS(保存结果数据)
ETL
数据同步模块,将从业务数据库进行抽取,交互转换,清洗,标准化,再加载到目的地
ETL(extranct抽取,transform转换,load加载)
采用sqoop或kattle或其他工具,或者定制专有的ETL系统
ODS
对原始数据不进行修改,存储作用,到了ODS层后不允许修改,即体现”不易失性“
CDM
CDM层为数据分析提供服务
DWD数据明细层:接收ODS来的原始数据,对其清洗,编码,字段描述等,拿到统一规范的数据
DWS数据汇总层:聚合汇总成一个大表,宽表,减少对其他表的操作
ADS
DWS拿到的结果表,存储进ADS数据应用层
为外部查询提供接口
2.2 ETL流程
将数据从来源端经过抽取、交互转换、加载至目的端的过程
将数据按照定义好的格式加载到数据仓库中去
ETL规则的设计和实施约占整个数据仓库搭建工作量的60%-80%
数据抽取
抽取的数据源可以分为:机构化数据、非结构化数据、半结构化数据
结构化数据采用JDBC、数据库日志方式。非/半结构化数据会监听文件变动
抽取方式:
- 数据抽取方式有全量同步、增量同步两种
- 全量同步将全部数据进行抽取,一般用于初始化数据装载(一开始数据仓库刚搭建好的时候)
- 增量同步:检测数据的变动,抽取变动的数据,一般用于数据更新
- (在一开始数据仓库搭建好的时候全量同步,后面就都增量同步)
数据转换
数据转换包括数据清洗和转换两阶段
- 数据清洗:对重复数据,二义性,不完整,违反业务逻辑的数据处理
- 数据转换:对数据进行标准化处理,进行字段、数据类型、数据定义的转换
数据加载
将处理完的数据导入目标层
ETL工具
结构化数据ETL工具:Sqoop、Kettle、Datastage、Informatica、Kafka、
非半/结构化数据ETL工具:Flume、Logstash
2.3 数据积存
操作数据层ODS
数据与原业务数据保存一致,可以增加字段用来进行数据管理
扩充集,可以增加字段:(比如增加数据进入时间字段)
业务数据库里的数据是可以修改的,ODS这里不能修改,但能增加字段
在离线数仓中,业务数据定期通过ETL流程导入ODS中,导入方式有全量、增量两种:
- 全量导入:数据第一次导入时,用此方式
- 增量导入:非第一次导入时,每次需要导入新增、更改的数据,建议使用外连接&全覆盖方式
2.4 数据分析
数据明细层DWD
对ODS层的数据进行清洗、标准化、维度退还(时间、分类、地域)
数据仍然满足3NF模型,为分析运算做准备
维度退化:三张表合并成一个大表,避免多次的join
比如来自不同地域的多张表,通过增加字段,合并成一个大表
数据汇总层DWS
数据汇总层的数据对数据明细层的数据,按照分析主题进行计算汇总,存放便于分析的宽表
数据应用层ADS
数据应用层也被称数据集市
存储数据分析结果,为不同业务场景提供接口,减轻数据仓库的负担
数据仓库擅长数据分析,直接开发业务查询接口,会加重负担
3、建模方法
3.1 基本概念
OLTP
OLTP(在线事务处理)系统中,主要操作是随机读写
为了保证数据一致性、减少冗余,常使用关系模型
在关系模型中,使用三范式规则来减少冗余
OLAP
在线联机分析,主要操作是复杂分析查询,关注数据整合,以及分析、处理性能
OLAP根据数据存储的方式不同,又分为ROLAP、MOLAP、HOLAP
目的:加快计算性能
ROLAP(relation OLAP 关系型OLAP):使用关系模型构建,存储系统一般为RDBMS
MOLAP(multidimensional OLAP 多维型OLAP):预先聚合计算
HOLAP(hybrid OLAP混合架构的OLAP):ROLAP与MOLAP两者的集成
查询效率ROLAP < HOLAP <MOLAP
3.2 ROLAP
经典的数据仓库建模方法有ER模型、维度模型、Data Value 、Anchor
维度模型灵活,多采用维度模型
维度模型中,表被分为维度表、事实表,维度是对事务的一种组织
维度一般包含分类、时间、地域等
维度模型分为星型模型、雪花模型、星座模型
维度模型建立后,方便对数据进行多维分析
星型模型
维度只有一层,带一层维度(时间or地域等),分析性能最优
雪花模型
多层维度,维度细分维度 or 维度下面接事实
比较接近三范式设计,较为灵活,性能较低
星座模型
基于多个事实表,事实表之间会共享一些维度表
是大型数据仓库中的常态,是业务增长的结果,与模型设计无关
业务增大的结果,常态
宽表模型
是维度模型的衍生,适用join性能不佳的数据仓库产品
宽表模型将维度冗余到事实表中,形成宽表,减少join操作
3.3 MOLAP
空间换时间的方式
只存储预计算结果
缺点:生成cube需要大量的时间、空间,维度预处理可能会造成数据膨胀
常见的MOLAP产品:Kylin、Druid
依靠产品的性能
3.4 多维分析
OLAP:主要操作是复杂查询,可以多表关联
OLAP对复杂查询操作做了直观的定义:包括钻取、切片、切块、旋转
钻取:
对维度不同层次的分析,通过改变维度的层次来变换分析的粒度
钻取包括上卷、下钻
上卷:低层次到高层次的切换
下钻:高层次到低层次的切换
切片、切块
对某个维度进行分割称为切片
按照多维进行的切片称为切块
旋转
对维度方向的互换,类似交换坐标轴上卷