CodeWalk

数据仓库分层设计(ODS/DWD/DWS/ADS)

作者:Yahuda · 2026-05-30 12:55

请解释数据仓库的典型分层架构: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)

为什么要分层:

  1. 解耦: 源系统变更不影响下游
  2. 复用: 公共逻辑在一层处理,供多次使用
  3. 血缘清晰: 问题可追溯
  4. 效率: 汇总层减少重复计算