数据仓库分层设计(ODS/DWD/DWS/ADS)
请解释数据仓库的典型分层架构:ODS、DWD、DWS、ADS各层的职责和转换逻辑,并说明为什么要分层。
回答
Yahuda
数据仓库分层设计(以阿里巴巴数据中台为例):
分层架构图:
应用层(ADS) → 报表/BI/数据产品
↑
汇总层(DWS) → 轻度汇总(按主题域)
↑
明细层(DWD) → 清洗/去重/维度退化/标准化
↑
操作层(ODS) → 原始数据(源系统数据直入)
↑
数据源 → MySQL/日志/API/消息队列
各层详解:
1. ODS(Operational Data Store,操作数据存储层):
- 数据来源: MySQL Binlog、业务日志、第三方API
- 特点: 保持原样,不做任何业务逻辑处理
- 存储: 外部表(防止误删),使用LZO/Snappy压缩
- 生命周期: T+7原始保留,可归档
2. DWD(Data Warehouse Detail,明细数据层):
- 核心任务:
- 数据清洗: 去重、空值处理、格式标准化
- 维度退化: 将维度属性退化到事实表(如城市名直接存入事实表)
- 数据脱敏: 手机号、身份证等敏感信息加密
- 统一编码: 全局统一的ID和时间格式
- 存储: ORC/Parquet列式存储
- 粒度: 与ODS一致(保留最细粒度)
3. DWS(Data Warehouse Summary,汇总数据层):
- 核心任务:
- 按主题域(用户/商品/交易/流量)进行轻度汇总
- 生成多维汇总指标(如日活跃用户数、商品PV/UV)
- 退化维度到汇总表
- 存储: 列式+分区(按天/按小时)
4. ADS(Application Data Store,应用数据层):
- 核心任务:
- 按业务需求定制数据集市
- 支持大宽表(预Join、预聚合)
- 输出到BI系统(MySQL/ClickHouse/Druid/Elasticsearch)
为什么要分层:
- 解耦: 源系统变更不影响下游
- 复用: 公共逻辑在一层处理,供多次使用
- 血缘清晰: 问题可追溯
- 效率: 汇总层减少重复计算