数据仓库原理 - 概念、架构、建模方法

1、介绍

1.1 数据仓库诞生原因

  1. 历史数据积存
    历史数据使用频率低,堆积在业务库中,导致性能低,所以会将其存放在数据仓库
  2. 企业数据分析需要
    各个部门自己建立独立的数据抽取系统,导致数据不一致已经资源浪费
    为解决问题,引入数据仓库

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对复杂查询操作做了直观的定义:包括钻取、切片、切块、旋转

钻取:
对维度不同层次的分析,通过改变维度的层次来变换分析的粒度
钻取包括上卷、下钻
上卷:低层次到高层次的切换
下钻:高层次到低层次的切换
在这里插入图片描述

切片、切块
对某个维度进行分割称为切片
按照多维进行的切片称为切块
在这里插入图片描述
旋转
对维度方向的互换,类似交换坐标轴上卷

在这里插入图片描述