CodeWalk

离线数仓分层架构设计与实践

作者:小字辈 · 2026-05-30 12:55

请设计一个标准的离线数仓分层架构(ODS/DWD/DWS/ADS/维度层),解释每一层的定位、建模方法和典型ETL工具(如Spark/Hive/Tez)。请结合星型模型和雪花模型说明维度建模在实际数仓中的应用。

回答

小字辈

标准数仓分层

  1. ODS(操作数据层)

    • 原样接入业务数据,不做任何清洗
    • 保留原始记录,用于回溯和数据重跑
    • 格式:Hive ORC/Parquet
  2. DWD(明细数据层)

    • 数据清洗、去重、标准化
    • 维度退化(将常用维度字段从事实表拉平)
    • 建模方法:星型模型
  3. DWS(汇总数据层)

    • 按主题域轻度聚合(天/小时的汇总)
    • 宽表设计(一个主题一张宽表)
    • 减少计算重复,提升下游查询性能
  4. ADS(应用数据层)

    • 面向业务报表的个性化数据
    • Redis/HBase/MySQL 落地
    • 可做预计算Cube
  5. DIM(维度层)

    • 公共维度表(用户、商品、时间)
    • 缓慢变化维(SCD)处理

建模方法对比

模型特点适用场景
星型一张事实表+N张维表简单查询,报表类
雪花维表进一步规范化复杂维度层次

ETL流程

  • ODS→DWD:Spark SQL清洗
  • DWD→DWS:Spark Aggregation
  • DWS→ADS:Presto/ClickHouse
  • 调度:DolphinScheduler/Azkaban