数据仓库&数据库
数据仓库和数据库从文字上来看是比较相似的,所以一般不是很好区分,说起它们的区别通常会提到OLTP和OLAP
OLTP:On-Line Transaction Processing,联机事务处理,主要是业务数据,需要考虑高并发、事务
OLAP:On-Line Analytical Processing,联机分析处理,重点主要是面向分析,会产生大量的查询,一般很少涉及增删改
数据仓库中会有各种不同的数据库,但通常会将这些数据库分为不同类放到一起。
数据仓库&数据集市
数据仓库 | 数据集市 | |
---|---|---|
数据来源 | 遗留系统、OLTP系统、外部数据 | 数据仓库 |
范围 | 企业级 | 部门级或工作组级 |
主题 | 企业主题 | 部门或特殊的分析主题 |
数据粒度 | 最细的粒度 | 较粗的粒度 |
数据结构 | 规范化结构(第三范式) | 适度的历史数据 |
优化 | 处理海量数据 数据探索 |
便于访问和分析 快速查询 |
索引 | 高度索引 | 高度索引 |
数据仓库&数据潮
数据仓库 | 数据湖 |
---|---|
主要处理历史的、结构化的数据,而且这些数据必须与数据仓库事先定义的模型吻合 | 能处理所有类型的数据,如结构化数据、非结构化数据、半结构化数据等,数据的类型依赖于数据源系统的原始数据格式 |
处理结构化数据,将它们或者转化为多维数据,或者转换为报表,以满足后续的高级报表及数据需求 | 拥有足够的计算能力用于处理和分析所有类型的数据,分析后的数据会被存储起来供用户使用 |
数据仓库通常用于存储和维护长期数据,因此数据可以按需访问。 | 数据湖通常包含更多的相关的信息,这些信息有很高概率会被访问,并且能够为企业挖掘新的运营需求。 |
数据仓库分层
每个企业对数仓的分层没有固定的标准,有的分为四层,有的分为五层,例如一种一层分层方法是:
- ODS层:原始数据层(Operation Data Store),存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理
- DWD层:明细数据层(Data Warehouse Detail),对ODS层数据进行清洗(去除空值、脏数据、超过极限范围的数据)、脱敏等。保存明细数据,一行信息代表一次业务行为,例如一次下单。
- DWS层:服务数据层(Data Warehouse Service),以DWD层为基础,按天进行轻度汇总。一行信息代表一个主题对象一天的汇总行为,例如:一个用户一天的下单次数
- DWT层:数据主题层(Data Warehouse Topic),以DWS层为基础,对数据进行累积汇总。一行信息代表一个主题对象的累积行为,例如一个用户从未注册那天开始至今一共下了多少次单
- ADS层:数据应用层(Application Data Store),为各种统计报表提供数据
全名规范
表全名
- ODS层:ods_表名
- DWD层:dwd_dim/fact_表名
- DWS层:dws_表名
- DWT层:dwt_表名
- ADS层:ads_表名
- 临时表命名:xxx_tmp
- 用户行为表,以log为后缀
表字段类型
- 数量类型:bigint
- 金额类型:decimal(16, 2)
- 字符串(名字、描述信息等):string
- 主键外键类型:string
- 时间戳类型:bigint
# 数仓建模
关系建模
与普通数据库建模类型,严格遵循第三范式(3NF)
关系模型虽然冗余少,但是在大规模数据跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率。
维度建模
在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型
星型模型

雪花模型与星型模型的区别主要在于维度的层级,标准的星型模型维度只有一层,而雪花模型可能会涉及多级。
雪花模型

雪花模型,比较靠近3NF,但无法完全遵守,因为完全遵循3NF的性能成本太高
星座模型

星座模型与前两种的区别是事实表的数量,星座模型是基于多个事实表
模型选择
首先,星座与否只和数据和需求有关,和设计无关,不用选择。
星型还是雪花则取决于性能优先还是灵活优先
目前实际开发,通常会根据情况灵活选择,甚至并存。但是整体来看,更倾向于维度更少的星型模型。
表分类
- 维度表:一般是对事务的描述信息。每一张维度表对应现实世界中的一个对象或概念。如:用户、商品、日期、地区等
- 事实表:每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”表示的是业务事件的度量值(可统计次数、个数、金额等),具体又分为:
- 事务型事实表
- 周期型快照事实表
- 累积型快照事实表
数据仓库架构

离线数仓&实时数仓
离线数仓就是指数据源为离线数据所形成的数据仓库。
实时数仓就是指数据源为实时数据所形成的数据仓库。
