一、ODS层(Operation Data Store)- 原始数据层
核心定位:
- 数据仓库的"原始档案库"
- 与业务系统数据保持1:1的镜像关系
- 保持"贴源"特性,不做业务逻辑处理
核心功能:
-
数据缓冲:
- 全量/增量同步业务系统数据
- 保留历史变更记录(CDC)
- 示例:MySQL Binlog日志、API接口原始数据
-
数据标准化:
- 统一数据格式(如时间戳统一为UTC+8)
- 基础清洗(去除乱码、控制字符)
- 不改变原始数据结构
-
数据保留:
- 通常保留30-180天(根据存储成本调整)
- 支持数据重放和回溯
技术实现:
- 存储格式:TextFile/Json/Avro(原始格式)
- 分区策略:按日期分区(
dt=20230101) - 工具:DataX、Flink CDC、Sqoop
二、DWD层(Data Warehouse Detail)- 明细数据层
核心定位:
- 数据仓库的"标准化细节数据层"
- 业务过程的数据建模层
- 数据资产化的核心层
核心功能:
-
数据清洗:
- 空值处理(填充/过滤)
- 异常值处理(如年龄=200)
- 数据脱敏(手机号、身份证)
-
维度退化:
- 将维度表属性合并到事实表
- 示例:订单表增加"用户等级"字段
-
数据标准化:
- 统一枚举值(如"男"统一为"M")
- 单位统一(金额统一为元)
- 代码标准化(地区代码统一为国标)
-
业务建模:
- 星型模型构建
- 拉链表处理(缓慢变化维)
- 分桶表优化(大表Join)
技术实现:
- 存储格式:Parquet/ORC(列存)
- 分区策略:按日期+业务线分区
- 工具:Spark SQL、Flink SQL、Hive SQL
三、DWS层(Data Warehouse Summary)- 汇总数据层
核心定位:
- 数据仓库的"业务指标计算层"
- 数据服务的核心支撑层
- 数据价值的主要输出层
核心功能:
-
指标计算:
- 原子指标(GMV、UV)
- 派生指标(日活率、复购率)
- 衍生指标(同比、环比)
-
数据聚合:
- 按时间维度(日/周/月)
- 按业务维度(品类/区域/渠道)
- 按用户维度(新老客/会员等级)
-
宽表构建:
- 多表关联(订单+用户+商品)
- 预计算(TopN、漏斗分析)
- 数据压缩(减少重复计算)
-
数据服务化:
- 支持OLAP查询
- 支持API接口
- 支持自助分析
技术实现:
- 存储格式:Druid/Kylin(OLAP)
- 分区策略:按时间粒度分区
- 工具:Presto、ClickHouse、Kylin
四、各层对比分析
| 维度 | ODS层 | DWD层 | DWS层 |
|---|---|---|---|
| 数据粒度 | 最细粒度(原始记录) | 明细粒度(业务事件) | 聚合粒度(指标) |
| 数据量 | 最大(TB级) | 中等(百亿级) | 较小(亿级) |
| 更新频率 | 实时/准实时(分钟级) | 批处理(小时级) | 批处理(天级) |
| 数据延迟 | 1-5分钟 | 1-2小时 | 1天 |
| 数据质量 | 原始质量(可能含脏数据) | 清洗后(高质量) | 业务可用(高价值) |
| 使用对象 | 数据工程师 | 数据分析师 | 业务人员 |
| 典型表 | ods_order_raw | dwd_order_detail | dws_user_daily |
五、扩展说明
-
ADS层(Application Data Store):
- 应用数据层(报表/看板)
- 数据量最小(千万级)
- 更新频率最高(分钟级)
-
DIM层(Dimension):
- 维度数据层(用户/商品/地区)
- 通常与DWD层并行存在
- 数据量较小(百万级)
-
数据流动:
业务系统 → ODS → DWD → DWS → ADS ↑ ↑ ↑ ↑ CDC 数据清洗 指标计算 数据服务 -
设计原则:
- ODS层:保持原始性,不丢失信息
- DWD层:保持灵活性,支持多种业务需求
- DWS层:保持稳定性,支持快速查询
-
最佳实践:
- ODS层保留至少30天数据
- DWD层建立数据质量监控
- DWS层建立指标口径文档
- 各层建立数据血缘关系