数仓设计概论
1.OLTP与OLAP的应用和区别?
- OLTP
- 应用:联机事务处理,满足业务数据的存储
- 特点:数据量相对较小、性能快、需要满足事务
- 工具:数据库管理工具,MySQL、Oracle
- OLAP
- 应用:联机分析处理,满足基于数据处理的数据分析存储和管理
- 特点:数据量相对较大、性能相对可以慢一些、没有事务性需求
- 工具:数据仓库管理工具,Hive
2.数据仓库概述
- 2.1 功能:
为了满足OLAP(联机分析处理)场景下的数据管理(存储、处理)需求
- 存储:管理,将公司所有数据进行统一化的存储管理
- 处理:将各种原始数据进行规范化处理,然后提供给各需求方
- 2.2 本质:
一种分布式的、统一化的、规范化的数据管理设计模型 - 2.3 应用:
满足企业中所有数据的统一化存储,通过规范化 的数据处理来实现企业数据分析应用的需求 - 2.4 特点:
- 1.面向主题:
数据仓库(DW,整个公司的数据)–>数据集市(DM,常见按照部门或者业务进行划分,又称作主题域)–>主题(针对具体的需求划分不同的主题) - 2.数据集成:存储所有需要采集的数据
- 3.非易失性(稳定性):几乎不存在更新和删除
- 4.时变性:数仓数据随着时间的推移数据不断增加
- 2.5 数据仓库与数据库的区别
- 数据库:面向业务,为捕获数据而设计(实时),主要为OLTP服务
- 数据仓库:面向主题,大多用于储存历史数据,弱事务,重分析(OLAP),一般不支持修改
3.数据仓库的核心流程和重点应用
- 核心流程:ETL、分层、建模
- 3.1 ETL:Extract(抽取)、Transform(转换)、Load(加载)
- 将原始数据根据需求进行数据处理后写入HDFS
- 一般发生两次:
- 一次在数据采集之后,写入HDFS的过程中,一次在Hive数仓中
- 实现功能:过滤(SQL中select对列过滤,MR中调用MAP方法过滤)、转换、补全
- 3.2 分层:决定数据的规范性
- 目的:将各种数据的处理流程规范化
- 为什么要分层?
- 1.清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
- 2.数据血缘追踪:简单来讲可以这样理解,我们最终给业务诚信的是一能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
- 3.减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
- 4.把复杂问题简单化:一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。
- 5.屏蔽原始数据的异常对业务的影响:不必改一次业务就需要重新接入数据
- 整体分层一般分为三层:ODS(原始数据层)、DW(数据仓库层)、APP(数据应用层)
- 实现:数据仓库是有Hive进行构建的,分层是通过数据库实现的
- 3.3 建模:决定了数据的存储方式和表的设计
- 目的:为了实现数据存储二设计的数据表的存储模型
- 为什么要建模?
- 大数据系统需要数据模型方法来帮助更好地组织和存储数据,以便在性能、成本、效率和质量之间取得最佳平衡。
- 1.性能:良好的数据模型能帮助我们快速查询所需要的数据,减少数据的I/O吞吐
- 2.成本:良好的数据模型能极大地减少不必要的数据冗余,也能实现计算结果复用,极大地降低大数据系统中的存储和计算成本
- 3.效率:良好的数据模型能极大地改善用户使用数据的体验,提高使用数据的效率
- 4.质量:良好的数据模型能改善数据统计口径的不一致性,减少数据计算错误的可能性
4.指标
- 概述:统计分析的一个度量值,用于反映一个事实
- 常见指标
- 1.PV —— page view:页面访问量
- 2.UV —— Unique View:唯一访问量,即用户访问数
- 3.IP —— 用户访问IP地址
- 4.跳出率 —— 用户跳出率、会话跳出率,用户只访问了一个页面就离开了的会话个数,一般此数据越多越不好,一看即走说明网内内容毫无吸引力
- 5.二跳率 —— 用户至少访问两个页面的会话个数,与跳出率相反,此数据越多说明网页质量越高
- 6.平均访问时长 —— Sum(每个访问会话的时长)/会话个数
- ……
5.维度设计
- 维度概述:用于描述事实【指标】的角度(表格里的分组字段)
- 注:指标如果不基于组合维度进行分析得到,这个指标就毫无意义,所以指标一般基于多个组合维度来看:时间维度+地区维度等。 - 功能:细化对事实的描述,更精确的发现事实的结果
- 常见维度:时间、地区、用户、IP、平台、操作系统……
- 术语了解:
- 下钻:当前基于一个大的维度进行分析,要下钻到一个更细、更小的维度进行分析
- 上卷:当前分析的是一个小维度,要上卷到一个大的颗粒维度分析
6.模型
- 6.1. ER模型
- 概述:实体关系模型,一般应用于OLTP的关系型数据系统来实现业务数据库的建模
- 应用:实现满足业务的数据存储
- 流程:
- 1.找到所有实体以及每个实体的相关属性
- 2.找到所有实体之间的关系
- 3.建表,每个实体和每个关系都是一张表
- 优缺点:
- 优点:符合数据库的设计规范,没有冗余数据,保证性能和业务的需求
- 缺点:设计时较复杂,必须找到所有实体以及它们之间的关系才能构建
- 6.2. 维度模型
- 6.2.1 概述:基于维度表和事实表进行关联,反应一件事的好坏
- 维度:用于反映事情好坏的角度
- 事实:统计分析指标的度量值
- 6.2.2 应用
- 一般应用于大数据的数据仓库的模型构建,用于通过不同维度来反映一件事情的好坏
- 6.2.3 维度表
- 概述:一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。 例如:用户、商品、日期、地区等。
- 特征:
- 1.维表的范围很宽(具有多个属性、列比较多)
- 2.跟事实表相比,行数相对较小:通常< 10万条
- 3.内容相对固定:编码表
- 6.2.4 事实表
- 概述:事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”这个术语表示的是业务事件的度量值(可统计次数、个数、金额等),例如,订单事件中的下单金额。
- 特征:
- 1.非常的大
- 2.内容相对的窄:列数较少
- 3.经常发生变化,每天会新增加很多
- 6.2.4.1 事实指标分类
- 1.可累加事实值:基于不同的维度和统计可以直接进行累加的值
- 2.半可累加事实值:基于某些维度和统计可以进行累加的值,而某些维度不可以
- 3.不可累加事实值:在任何维度下,指标的累加是没有意义的,比如两个比率的相加或者平均数的相加
- 4.可累加事实值:不建议产生空值,事实表中是不会出现空值,一般就前三种,此种情况不会出现
- 6.2.4.2 事实表分类
- 1.事务事实表:原始事务事实的数据,如订单表,登录日志等
- 2.周期快照事实表:周期性对事务事实进行聚合的结果
- 3.累计快照事实表:累积性完善事实的结,如快递订单的物流更新
- 4.无事实事实表:没有事实度量,都是维度外键,一般用于与事实表进行关联求差值
- 6.2.5 维度表模型
- 6.2.5.1 雪花模型
- 设计思路(特点):部分维度直接与事实表相关联,部分维度通过其他维度间接关联事实表
- 优点:没有冗余数据,保证业务的需求
- 缺点:关联层次较多,层层JOIN,查询性能较低
- 6.2.5.2 星型/星座模型
- 设计思路(特点):所有维度直接与事实表相关联
- 1.星型模型:
- 优点:直接查询,不用关联其他维度表,性能高
- 缺点:数据冗余度高
- 2.星型模型:基于星型模型的演变,多个事实共同使用一个维度表,真实场景中常用
7. 渐变维(SCD)
- 7.1. 概述(什么是渐变维?)
维度可以根据变化剧烈程度主要分为无变化维度、缓慢变化维度和剧烈变化维度。例如一个人的相关信息,身份证号、姓名和性别等信息数据属于不变的部分,政治面貌和婚姻状态属于缓慢变化部分,而工作经历、工作单位和培训经历等在某种程度上属于急剧变化字段。
大多数维度表随时间的迁移是缓慢变化的。比如增加了新的产品,或者产品的ID号码修改了,或者产品增加了一个新的属性,此时,维度表就会被修改或者增加新的记录行。这样,在设计维度和使用维度的过程中,就要考虑到缓慢变化维度的处理。
缓慢渐变维,即维度中的属性可能会随着时间发生改变,比如包含用户住址Address的DimCustomer维度,用户的住址可能会发生改变,进而影响业务统计精度,DimCustomer维度就是缓慢渐变维(SCD) - 7.2. 缓慢渐变维类型(渐变维的处理方案)
- SCD1:通过更新维度记录直接覆盖已存在的值(覆盖历史记录只保留最新数据,结果不准确)
- SCD2:构建拉链表,根据不同的时间来标记这一列不同的状态(重点,最常用)
参见《数仓分析之拉链表》 - SCD3:通过增加列的方式来记录每个状态(不能满足需求,一般不用)
8. 分层:
- 功能:规范数据从进入数仓开始到被应用这个过程整体被处理的过程
- 整体分层一般分为三层:ODS(原始数据层)、DW(数据仓库层)、APP(数据应用层)
- 常见分层(细化分层):
- 1.ODS:原始数据层
- 功能:存储采集的所有数据
- 数据:几乎是原始数据
- 2.DWD:明细数据层
- 功能:对ODS层数据进行ETL
- 数据:ETL后的数据
- 3.DWM:中间数据层
- 功能:轻度聚合,依需求和公司习惯而定,有些公司无此分层
- 数据:基于基础维度对DWD层的数据进行轻度聚合后的数据
- 4.DWS/DM:汇总数据层/数据集市层
- 功能:按业务需求划分主题域,将主题域中所需要的维度和指标进行最后的聚合,构建宽表
- 数据:对上层数据进行整体聚合,得到业务指标的宽表
- 5.APP/DA/ADS:数据应用层
- 功能:存储最后要用的数据,划分具体主题,构建每个主题的结果表
- 数据:基于DWS层进行主题划分的数据
- 6.DIM:维度数据表
- 功能:存放维度表的数据
- 7.TMP:临时数据层
- 功能:存储一些临时数据数据