数据仓库入门学习
声明:本文章根据B站数仓课程笔记整理而来。
数据仓库
数据仓库概念
数据仓库(Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。
数仓本身并不生产任何数据,其数据源与不同的外部系统;
同时数仓本身也不需要消费任何数据,其结果开放给外部应用使用。
数据仓库的特点
- **面向主题:**为数据分析提供服务,根据主题将原始数据集合在一起;
主题是一个抽象概念,是较高层次上企业信息中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。
比如一个保险行业数据仓库,所涉及到的主题有:
-
**集成性:**原始数据可能有多个数据源,即相关数据通常会分布在多个凑操作系统中,碧玺分散、独立、异构,要整合成最终数据,需要经过抽取、清晰、转换的过程。这一步是数仓建设中最关键、最负责的一步,要完成的所有工作有:
1、要统一元数据中所有矛盾之处,比如字段的同名异义、异名同义、单位不统一、字长不统一等;
2、进行数据综合和计算。数仓中的数据综合工作可以再原有数据库抽取数据时生成,但许多是再数仓内部生成的,即进入数仓以后进行综合生成的。
下图表示数仓数据的集成性:
-
**非易失性:**保存的数据是一系列历史快照,不允许被修改,只允许通过工具进行查询、分析;
-
**时变性:**数仓会定期接收、集成新的数据,从而反映出数据的最新变化,以适应决策的需要。从这个角度来讲,数仓建设是一个项目,更是一个过程。
数仓时变性的表现:
- 数据仓库的数据时限一般要远远长于操作型数据的数据时限;
- 操作型系统存储的是当前数据,而数据仓库中的数据是历史数据;
- 数据仓库中的数据是按照时间顺序追加的,它们都带有时间属性。
数据仓库、数据库、数据集市
OLTP、OLAP的区别
OLTP:
操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing),主要目标是做数据处理,他是针对具体业务在数据库联机的日常操作,通常对少数据进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。
在设计的时候尽量避免冗余,通常采用符合范式规范来设计
传统的关系型数据库(Mysql、Oracle)系统就是OLTP系统。
OLAP:
分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing),主要目标是做数据分析。一般针对某些主题的历史数据进行复杂的多位分析,支持管理决策。
关注数据整合、分析、处理性能;会有意引入冗余,采用反范式方式设计。
数据仓库就是OLAP系统,主要用于数据分析
数据库、数据仓库的区别
数据库和数据仓库的区别实际就是OLTP和OLAP的区别:
数据仓库、数据集市区别
**数据仓库是面向整个集团组织的数据,数据集市(Data Marts)是面向单个部门使用的。**可以认为数据集市是数据仓库的子集。数据集市通常只设计一个主题领域,例如市场营销或销售。它们通常较小且更具体,所以更易于管理和维护,并且具有更灵活的结构。
如上图所示:
各种操作型系统数据包括文件在内的其他数据作为数据源,经过ETL(抽取转换加载)填充到数据仓库中;
数据仓库中有不同主题数据,数据集市则根据部门特点面向指定主题,比如Purchasing(采购)、Sales(销售)、Inventory(库存);
用户可以基于主体数据开展各种应用:数据分析、数据报表、数据挖掘等。
传统数据仓库和大数据数据仓库
传统数据仓库
由关系型数据库组成MPP(Massively Parallel Processing大规模并行处理)集群。
MPP(Massively Parallel Processing大规模并行计算)
- 传统数仓中常见的技术架构,将单机数据库节点组成集群,提升整体处理性能;
- 节点间为非共享架构(Share Nothing),每个节点都有独立的磁盘存储系统和内存系统;
- 每台节点通过网络相互连接,彼此通信协同计算,为整体提供服务;
- 设计上优先考虑C(consistency一致性)其次A(availability可用性)最后P(partition分区容错)
架构优点:
- 运算方式精细,延迟低;
- 适合中等规模的结构化数据处理
架构缺点
- 存储位置不透明,通过Hash确定数据所在的物理节点,查询任务在所有节点均会执行;
- 并行计算,单节点瓶颈会成为单个系统短板,容错性差;
- 分布式事务的实现会导致扩展性降低。
大数据数据仓库
- 利用大数据天然的扩展性,完成海量数据的存放;
- 将SQL抓换为大数据计算引擎任务,完成数据分析。
分布式架构
- 大数据中常用的技术架构,也成为Hadoop架构;
- 各节点实现自治(可以单独运行局部应用),数据在集群中全局透明共享;
- 每台节点通过局域网或广域网相连,节点间的通信开销较大,在运算时致力减少数据移动;
- 有限考虑P(分区容错性)其次A(可用性),最后在考虑C(一致性)
架构优点: - 解决了单点故障问题,会将出错任务调度到其他副本节点;
- 吞吐量大;
- 扩展性极强,适合处理非结构化、半结构化数据
- 需要将中间结果进行存储,且数据移动开销较大(map、reduce阶段,频繁的IO操作)
传统数仓和大数据数仓的常见产品:
数据仓库的架构
下图为数据仓库的层级架构(阿里为例):
概念讲解
** ETL – Extract-Transform-Load**
- 将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程;
- 构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去;
- ETL 规则的设计和实施约占整个数据仓库搭建工作量的 60%~80%
** 数据抽取(Extraction):** - 抽取的数据源可以分为结构化数据、非结构化数据、半结构化数据;
- 结构化数据一般采用JDBC、数据库日志方式,非|半结构化数据会监听文件变动
抽取方式:
- 数据抽取方式有全量同步、增量同步两种方式;
- 全量同步会将全部数据进行抽取,一般用于初始化数据装载;
- 增量同步方式会检测数据的变动,抽取发生变动的数据,一般用于数据更新
数据转换(Transformation): - 数据转换要经历数据清洗和转换两个阶段:
1、数据清洗主要是对出现的重复、二义性、不完整、违反业务或逻辑规则等问题的数据进行统一的处理;
2、数据转换主要是对数据进行标准化处理,进行字段、数据类型、数据定义的转换 - 结构化数据在转换过程中的逻辑较为简单,非 | 半结构化数据的转换会较为复杂。
数据加载( Loading ):
- 将最后处理完的数据导入到对应的目标源里。
常见的ETL工具:
数据操作层ODS(Operational DATA Store)
- 数据与原业务数据保持一致,可以增加字段用来进行数据管理;
- 存储的历史数据是只读的,提供业务系统查询使用;
- 业务系统对历史数据完成修改后,将update_type字段更新为UPDATE,追加回ODS中;
- 在离线数仓中,业务数据定期通过ETL流程导入到ODS中,导入方式有全量、增量两种:
1、全量导入:数据第一次导入时,选择此种方式;
2、增量导入:数据非第一次导入,每次只需要导入新增、更改的数据,建议使用外连接&全覆盖方式。
数据明细层DWD(DATA Warehouse Detail)
- 数据明细层对ODS层的数据进行清洗、标准化、维度退化(时间、分类、地域);
- 此时数据不严格满足3NF模型,为分析运算做准备。
数据汇总层DWS(DATA Warehouse Summary)
- 数据汇总层的数据对数据明细层的数据,按照分析主题进行计算汇总,存放便于分析的宽表;
- 存储模型并非3NF,而是注重数据聚合,复杂查询、处理性能更优的数仓模型,如维度模型
数据应用层ADS(Application DATA Store)
- 数据应用层也被称为数据集市;
- 存储数据分析结果,为不同业务场景提供接口,减轻数据仓库的负担
数据仓库擅长数据分析,直接开放业务查询接口,会加重其负担
数据仓库分层的原因
**分层的主要原因是在管理数据的时候,能对数据有一个更加清晰的掌控,**其主要原因有;
- 清晰数据结构:
每一个数据分层都有它的作用域,在使用表的时候能更方便地定位和理解。 - 数据血缘追踪:
我们最终给业务呈现的是一个能直接使用业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。 - 减少重复开发:
规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。 - 把复杂问题简单化:
将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。 - 屏蔽原始数据的异常:
屏蔽业务的影响,不必改一次业务就需要重新接入数据。
建模方法
OLTP系统建模方法
- OLTP(在线事务处理)系统中,主要操作是随机读写;
- 为了保证数据一致性、减少冗余,常使用关系模型;
- 在关系模型中,使用三范式规则来减少冗余。
OLAP系统建模方法
- OLAP系统,主要操作是复杂分析查询;关注数据整合,以及分析、处理性能;
- OLAP根据数据存储的方式不同,又分为ROLAP、MOLAP、HOLAP;
- ROLAP(Relation OLAP,关系型 OLAP):使用关系模型构建,存储系统一般为RDBMS;
- MOLAP(Multidimensional OLAP,多维型 OLAP):预先聚合计算,使用多维数组的形式保存数据结果,加快查询分析时间;
- HOLAP(Hybrid OLAP,混合架构的 OLAP):ROLAP 和 MOLAP 两者的集成;如低层是关系型的,高层是多维矩阵型的;查询效率高于ROLAP,低于MOLAP。
ROLAP系统建模方法:
- 典型的数据仓库建模方法有ER模型、维度模型、Data Value、Anchor
维度模型: - 维度模型中,表被分为维度表、事实表,维度是对事实的一种组织;
- 维度一般包含分类、时间、地域等
- 维度模型分为星型模型、雪花模型、星座模型;
- 维度模型建立后,方便对数据进行多维分析
星型模型:
- 标准的星型模型,维度只有一层,分析性能最优
** 雪花模型:**
- 雪花模型具有多层维度,比较接近三范式设计,较为灵活
星座模型:
- 星座模型基于多个事实表,事实表之间会共享一些维度表;
- 是大型数据仓库中的常态,是业务增长的结果,与模型设计无关
宽表模型:
什么是宽表模型? - 宽表模型是维度模型的衍生,适合join性能不佳的数据仓库产品;
- 宽表模型将维度冗余到事实表中,形成宽表,以此减少join操作
MOLAP系统建模方法
- MOLAP将数据进行预结算,并将聚合结果存储到CUBE模型中;
- CUBE模型以多维数组的形式,物化到存储系统中,加快后续的查询;
- 生成CUBE需要大量的时间、空间,维度预处理可能会导致数据膨胀。
常见MOLAP产品: - Kylin
- Druid
OLAP多维分析
- OLAP主要操作是复杂查询,可以多表关联,使用COUNT、SUM、AVG等聚合函数;
- OLAP对复杂查询操作做了直观的定义,包括钻取、切片、切块、旋转
钻取:
- 对维度不同层次的分析,通过改变维度的层次来变换分析的粒度;
- 钻取包括上卷(Roll-up)、下钻(Drill-down);
- 上卷(Roll-up),也称为向上钻取,指从低层次到高层次的切换;
- 下钻(Drill-down),指从高层次到低层次的切换
切片(Slice)切块(Dice) - 选择某个维度进行分割称为切片;
- 按照多维进行的切片称为切块
旋转(Pivot) - 对维度方向的互换,类似于交换坐标轴上卷(Roll-up)