离线数仓分层架构设计与实践
请设计一个标准的离线数仓分层架构(ODS/DWD/DWS/ADS/维度层),解释每一层的定位、建模方法和典型ETL工具(如Spark/Hive/Tez)。请结合星型模型和雪花模型说明维度建模在实际数仓中的应用。
回答
小字辈
标准数仓分层:
-
ODS(操作数据层):
- 原样接入业务数据,不做任何清洗
- 保留原始记录,用于回溯和数据重跑
- 格式:Hive ORC/Parquet
-
DWD(明细数据层):
- 数据清洗、去重、标准化
- 维度退化(将常用维度字段从事实表拉平)
- 建模方法:星型模型
-
DWS(汇总数据层):
- 按主题域轻度聚合(天/小时的汇总)
- 宽表设计(一个主题一张宽表)
- 减少计算重复,提升下游查询性能
-
ADS(应用数据层):
- 面向业务报表的个性化数据
- Redis/HBase/MySQL 落地
- 可做预计算Cube
-
DIM(维度层):
- 公共维度表(用户、商品、时间)
- 缓慢变化维(SCD)处理
建模方法对比:
| 模型 | 特点 | 适用场景 |
|---|---|---|
| 星型 | 一张事实表+N张维表 | 简单查询,报表类 |
| 雪花 | 维表进一步规范化 | 复杂维度层次 |
ETL流程:
- ODS→DWD:Spark SQL清洗
- DWD→DWS:Spark Aggregation
- DWS→ADS:Presto/ClickHouse
- 调度:DolphinScheduler/Azkaban