什么是数仓
数据仓库简称DW,就是一个用以更好地支持企业或组织的决策分析处理的、面向主题的、集成的、不可更新的、随时间不断变化的数据集合。
为什么要有数仓
主要因为面向应用型的应用的数据库设计一般是操作型的,而数据分析或者数据挖掘都是面向分析型的应用。这两种应用各有特点和适用的场景,对数据的处理应当分离。
业务数据库 | 数据仓库 |
---|---|
遵循3NF范式,表与表之前关联复杂 | 星型模型,事实表,维度表 |
数据较脏乱 | ETL去除脏数据,使用方便 |
理解困难,不同业务有不同操作代码 | 数据统一描述 |
缺少历史数据 | 设计拉链表记录业务状态变化 |
数据量大查询慢 | 由于结构简单,查询速度较快 |
数据模型设计
从分析决策的需求出发构建模型。步骤为:
- 选择需要进行分析决策的业务过程。如单个业务事件:交易的支付、退款;某个事件状态:当前账户余额;一系列相关业务事件组成的业务流过程等等。
- 选择粒度,粒度是维度的一个组合
- 识别维表,基于粒度设计维表,包括维度属性。
- 选择事实,确定分析需要衡量的指标。
数据分层
(1)ODS层:即操作数据层。数据来源于埋点上报,爬虫,以及业务数据库。功能包括同步,将非结构化的数据结构化,累积历史、清洗数据。几乎不做数据处理。
(2)DWD层:即数据明细层。以维度模型方法作为理论基础,更多地采用一些维度退化方法,将维度退化至事实表中,减少事实表和维表的关联。
(3)DW层:汇总数据层。加强指标的维度退化,采取更多的宽表化手段构建公共数据指标层,提升公共指标的复用性。
(4)DM层:存放主题数据,给不同的应用提供数据组装结果。如所有KOL相关的流量、交易、属性等数据,尽可能多地将相关的维度和指标汇集在一起。绝大部分数据由DM层分发到应用ADS层。
(5)ADS层:按需生成应用相关的数据接口的表。
设计基本原则
- 高内聚和低耦合:将业务相关或者相近,粒度相同的数据设计为一个逻辑或物理模型;将高概率同时访问的数据放在一起,低概率同时访问的分开。
- 核心模型与扩展模型体系:核心模型字段包括常用的字段支持核心业务,扩展模型包括的字段支持个性化或者少量应用的需要。不能让扩展模型的字段过度侵入核心模型,以免破坏核心模型的架构简洁性与可维护性。
- 公共处理逻辑下沉及单一:公用的处理逻辑应该在数据调度依赖的底层进行封装与实现,不要让公共逻辑暴露给应用层,不要让公共逻辑多处存在。
- 成本与性能平衡:适当的数据冗余可换取查询和刷新性能,但是不宜过度冗余与数据复制。
- 数据可回滚:处理逻辑不变,在不同时间多次运行数据结构确定不变。
- 一致性:具有相同含义的字段在不同表中的命名必须相同,必须使用规范定义中的名称。
- 命名清晰、可理解:表命名需清晰、一致,表名需易于消费者理解和使用。
参考
《大数据之路:阿里巴巴大数据实践》