0%

数据仓库

数据仓库&数据库

数据仓库和数据库从文字上来看是比较相似的,所以一般不是很好区分,说起它们的区别通常会提到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的性能成本太高

星座模型

星座模型
星座模型

星座模型与前两种的区别是事实表的数量,星座模型是基于多个事实表

模型选择

首先,星座与否只和数据和需求有关,和设计无关,不用选择。

星型还是雪花则取决于性能优先还是灵活优先

目前实际开发,通常会根据情况灵活选择,甚至并存。但是整体来看,更倾向于维度更少的星型模型

表分类

  • 维度表:一般是对事务的描述信息。每一张维度表对应现实世界中的一个对象或概念。如:用户、商品、日期、地区等
  • 事实表:每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”表示的是业务事件的度量值(可统计次数、个数、金额等),具体又分为:
    • 事务型事实表
    • 周期型快照事实表
    • 累积型快照事实表

数据仓库架构

数据仓库架构
数据仓库架构

离线数仓&实时数仓

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

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

离线数仓&实时数仓
离线数仓&实时数仓