Data wareHouse
学习数据仓库概述的个人总结。
1. basic
- 数据的意义是什么?就是减少数据冗余,避免更新异常。而如5所述,分析型数据库中没有更新操作。因此,减少数据冗余也就没那么重要了。
- 某大公司Hadoop Hive里的关系表不完全满足完整/参照性约束,也不完全满足范式要求,甚至第一范式都不满足。这种情况正常吗?”,答曰是正常的。因为Hive是一种数据仓库,而数据仓库和分析型数据库的关系非常紧密(后文会讲到)。它只提供查询接口,不提供更新接口,这就使得消除冗余的诸多措施不需要被特别严格地执行了。
1.1 定义
- 面向分析的存储系统
- 关系数据库最少也要求满足第1范式,而数据仓库里的关系表可以不满足第1范式。也就是说,同样的记录在一个关系表里可以出现N次。但由于大多数数据仓库内的表的统计分析还是用SQL,因此很多人把它和关系数据库搞混了。
1.2 特点
- 面向主题
数据仓库和操作型数据库的根本区别 - 集成性
集成性是指数据仓库会将不同源数据库中的数据汇总到一起; - 企业范围
数据仓库内的数据是面向公司全局的。比如某个主题域为成本,则全公司和成本有关的信息都会被汇集进来; - 历史性
较之操作型数据库,数据仓库的时间跨度通常比较长。 - 时变性
时变性是指数据仓库包含来自其时间范围不同时间段的数据快照。
1.3 组件
- data source, ETL, data warahouse, front end(BI)
2. 数据仓库维度建模
2.1 基本概念
- 维度表(dimention)
- Dimension tables, also known as lookup or reference tables
- 对分析主题所属类型的描述, called as dimention
- 时间维度、地点维度、商品维度等等
- 事实表(fact table)
- 对分析主题的度量
- 常为数值类型, called as measure
- 事实表包含了与各维度表相关联的外码,并通过JOIN方式与维度表关联
- eg: 昨天早上张三在京东花费200元购买了一个皮包
- 时间维度(昨天早上),地点维度(京东), 商品维度(皮包), 200元为事实信息
2.2 缓慢变化维度
key需要配合时间戳,以及行标识符使用才能解决缓慢维度变化
2.3 流程
ER建模->关系建模->维度建模
3. 实现与使用
数据仓库建模、ETL工程、OLAP、BI
ETL
- Load
- 首次加载(first load)和刷新加载(refresh load)
OLAP/BI工具
- 对维度建模数据进行分析的SQL代码套路比较固定。于是,便有了OLAP工具,它专用于维度建模数据的分析。而BI工具则是能够将OLAP的结果以图表的方式展现出来,它和OLAP通常出现在一起。
Data cube
- N维,维度扩展后的二维表格
- 数据分析的对象就是这个逻辑概念上的数据立方体,基本用法是首先配置好维表、事实表,然后在每次查询的时候告诉OLAP需要展示的维度和事实字段和操作类型即可
- 操作
- slice, dice
- 对where的操作
- pivot
- select 顺序的操作
- roll up / drill down
- group by 操作
- 钻取(Drill-down) 使统计维度降到更细的层级,如下图时间维度从“季度”降到了“月份”层级,能降到多细要看底层数据有多细;
- 上卷(Roll-up) 则是反过程,“浙江”、“上海”、“江苏”的数据被汇总到了“江浙沪” 地区层级;
- slice, dice
OLAP架构模式
- MOLAP(Multidimensional OLAP)
- 在该立方体中,每一格对应一个直接地址,且常用的查询已被预先计算好
- ROLAP(Relational OLAP)
- ROLAP架构并不会生成实际的多维数据集,而是使用星形模式以及多个关系表对数据立方体进行模拟
- ROLAP中,所有的查询都是被转换为SQL语句执行的。而这些SQL语句的执行会涉及到多个表之间的JOIN操作,没有MOLAP速度快