1. 数仓概念
1.1 为什么学习数据仓库
- 数据不兼容, 很难被整合
- 战略决策需要数据的分析
- 推荐系统
1.2 什么是数据仓库
数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合。
1.2.1 面向主题
- 主题(Subject)是在较高层次上将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念
- 每一个主题基本对应一个宏观的分析领域
- 在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象
例如“销售分析”就是一个分析领域,因此这个数据仓库应用的主题就是“销售分析”
一个面向事务处理的“商场”数据库系统,其数据模式如下:
-
采购子系统:
订单(订单号,供应商号,总金额,日期)
订单细则(订单号,商品号,类别,单价,数量)
供应商(供应商号,供应商名,地址,电话) -
销售子系统:
顾客(顾客号,姓名,性别,年龄,文化程度,地址,电话)
销售(员工号,顾客号,商品号,数量,单价,日期) -
库存管理子系统:
领料单(领料单号,领料人,商品号,数量,日期)
进料单(进料单号,订单号,进料人,收料人,日期)
库存(商品号,库房号,库存量,日期)
库房(库房号,仓库管理员,地点,库存商品描述) -
人事管理子系统:
员工(员工号,姓名,性别,年龄,文化程度,部门号)
部门(部门号,部门名称,部门主管,电话)
1.2.2 集成
- 集成性是指数据仓库中数据必须是一致的
- 数据仓库的数据是从原有的分散的多个数据库、数据文件和数据段中抽取来的
- 数据来源可能既有内部数据又有外部数据
- 例如F/M,0/1,A/B
- 集成方法
- 统一:消除不一致的现象
- 综合:对原有数据进行综合和计算
1.2.3 非易失
- 数据仓库中的数据是经过抽取而形成的分析型数据
- 不具有原始性
- 主要供企业决策分析之用
- 执行的主要是‘查询’操作,一般情况下不执行‘更新’操作
- 一个稳定的数据环境也有利于数据分析操作和决策的制订
1.2.4 随时间变化
- 数据仓库以维的形式对数据进行组织,时间维是数据仓库中很重要的一个维度
- 不断增加新的数据内容
- 不断删去旧的数据内容
- 更新与时间有关的综合数据
1.3 数据仓库和数据库的区别
- 数据库是为捕获和存储数据而设计
- 数据仓库是为分析数据而设计
** ** | 数据库 | 数据仓库 |
---|---|---|
本质 | 数据的集合 | 数据的集合 |
定位 | 事务处理OLTP | 数据分析OLAP |
面向群体 | 前端用户 | 管理人员 |
操作 | 增删改查 | 查询 |
数据粒度 | 事件记录 | 维度 |
表结构 | 3NF | 星型、雪花 |
1.4 OLTP和OLAP的区别
- 联机事务处理OLTP
On-Line Transaction Processing
OLTP是传统的关系型数据库的主要应用
对比属性 | OLTP | OLAP |
---|---|---|
读特性 | 每次查询只返回少量记录 | 对大量记录进行汇总 |
写特性 | 随机、低延时写入用户的输入 | 批量导入 |
使用场景 | 用户,Java EE项目 | 内部分析师,为决策提供支持 |
数据表征 | 最新数据状态 | 随时间变化的历史状态 |
数据规模 | GB | TB到PB |
2. 数据仓库的架构
2.1 Inmon架构
2.2 Kimball架构
2.3 混合型架构
3. 数据仓库的解决方案
- 数据采集
Flume,Sqoop,Logstash,Datax - 数据存储
MySQL,HDFS,HBase,Redis,MongoDB - 数据计算
Hive,Tez,Spark,Flink,Storm,Impala - 数据可视化
Tableau,Echarts,Superset,QuickBI,DataV - 任务调度
Oozie,Azkaban,Crontab
4. 数据ETL
- 抽取(Extract)
从操作型数据源获取数据 - 转换(Transform)
转换数据,使之转变为适用于查询和分析的形式和结构 - 装载(Load)
将转换后的数据导入到最终的目标数据仓库
ETL工具
- Oracle
OWB和ODI - 微软
SQL Server Integration Services - SAP
Data Integrator - IBM
InfoSphere DataStage、Informatica - Pentaho
Kettle
5. 数据仓库的建模
5.1 选择业务流程
- 确认哪些业务处理流程是数据仓库应该覆盖的
例如:了解和分析一个零售店的销售情况 - 记录方式
使用纯文本
使用业务流程建模标注(BPMN)方法
使用同一建模语言(UML)
5.2 声明粒度
- 用于确定事实中表示的是什么
例如:一个零售店的顾客在购物小票上的一个购买条目 - 选择维度和事实前必须声明粒度
- 建议从原始粒度数据开始设计
- 原始记录能够满足无法预期的用户查询
- 不同的事实可以有不同的粒度
5.3 确认维度
- 说明了事实表的数据是从哪里采集来的
- 典型的维度都是名词
例如:日期、商店、库存等 - 维度表存储了某一维度的所有相关数据
例如:日期维度应该包括年、季度、月、周、日等数据
5.4 确认事实
- 识别数字化的度量,构成事实表的记录
- 和系统的业务用户密切相关
- 大部分事实表的度量都是数字类型的
可累加,可计算
例如:成本、数量、金额
5.5 星型模型
5.5.1星型模型特点
- 由事实表和维度表组成
- 一个星型模式中可以有一个或多个事实表,每个事实表引用任意数量的维度表
- 星型模式将业务流程分为事实和维度
- 事实包含业务的度量,是定量的数据
如销售价格、销售数量、距离、速度、重量等是事实 - 维度是对事实数据属性的描述
如日期、产品、客户、地理位置等是维度
- 事实包含业务的度量,是定量的数据
5.5.2 优点
- 简化查询
- 简化业务报表逻辑
- 获得查询性能
- 快速聚合
- 便于向立方体提供数据
5.5.3 缺点
- 不能保证数据完整性
- 对于分析需求来说不够灵活
5.6 雪花模型
5.6.1 雪花模型特点
- 一种多维模型中表的逻辑布局
- 由事实表和维度表所组成
- 将星型模式中的维度表进行规范化处理
- 把低基数的属性从维度表中移除并形成单独的表
- 一个维度被规范化成多个关联的表
5.6.2 优点
- 一些OLAP多维数据库建模工具专为雪花模型进行了优化
- 规范化的维度属性节省存储空间
5.6.3 缺点
- 维度属性规范化增加了查询的连接操作和复杂度
- 不确保数据完整性
6. 数仓分层
6.1 数仓分层
ODS层:原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
DWD层:对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据)、维度退化、脱敏等
DWS:以DWD为基础,按天进行轻度汇总。
DWT:以DWS为基础,按主题进行汇总。
ADS层:为各种统计报表提供数据
6.2 数据仓库为什么要分层
1)把复杂问题简单化。将复杂的任务分解成多层来完成,每一层只处理简单的任务,方便定位问题。
2)减少重复开发。规范数据分层,通过的中间层数据,能够减少极大的重复计算,增加一次计算结果的复用性。
3)隔离原始数据。不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开。