在 数据仓库(Data Warehouse)或数据集市(Data Mart) 的建设中,“分层设计” 是非常核心的概念。它有助于降低系统耦合度、简化数据逻辑、提高复用性与可维护性。下面我给你详细讲解一下数据集市常见的分层方式、每一层的职责和最佳实践。
🧭 一、数据集市分层的总体思路
分层的目标是:
“让数据流动有序、可追溯、可复用。”
通常从数据源到数据集市的整个链路分为以下几层:
| 层级 | 名称(常见缩写) | 主要作用 | 数据特点 |
|---|---|---|---|
| 1️⃣ | ODS(Operational Data Store)操作数据层 | 原始数据落地、保留历史 | 与源系统结构基本一致 |
| 2️⃣ | DWD(Data Warehouse Detail)明细数据层 | 数据清洗、标准化、去重 | 轻度加工后的明细级数据 |
| 3️⃣ | DWM(Data Warehouse Middle)中间数据层 / 汇总层 | 聚合计算、维度关联 | 面向业务过程的宽表或汇总表 |
| 4️⃣ | DWS(Data Warehouse Service)服务数据层 | 提供面向分析主题的宽表 | 面向主题域、常用于BI分析 |
| 5️⃣ | ADS(Application Data Service)应用数据层 | 提供报表、接口数据 | 面向报表/接口/产品需求的最终结果 |
🧩 二、各层详细说明
1️⃣ ODS 层(操作数据层)
-
数据来源:来自业务系统(ERP、CRM、APP日志等)。
-
特点:
-
与源表结构基本一致;
-
数据为原始数据;
-
通常按天分区存储;
-
保留一段时间的历史数据(如7天或30天)。
-
-
示例表名:
ods_order_info_di
📘 举例:
2️⃣ DWD 层(明细数据层)
-
作用:
-
数据清洗(去重、空值处理、格式标准化)
-
维度统一(时间、地区、用户、商品等)
-
-
粒度:保持与业务事实一致的明细粒度;
-
常见表类型:
-
事实表(事实业务事件)
-
维度表(业务对象属性)
-
-
示例表名:
dwd_fact_order_di,dwd_dim_user_info_full
📘 举例:
3️⃣ DWM 层(中间汇总层)
-
作用:在DWD的基础上进行初步聚合与计算;
-
用途:服务于多个主题的公共指标;
-
粒度:通常为“某维度 + 时间”的中间汇总;
-
示例表名:
dwm_order_user_day_sum
📘 举例:
4️⃣ DWS 层(服务数据层)
-
作用:按照业务主题进行汇总,生成主题域宽表;
-
面向对象:数据分析师、BI开发;
-
示例表名:
dws_trade_user_daywide
📘 举例:
5️⃣ ADS 层(应用数据层)
-
作用:最终的结果层,直接支撑报表或接口;
-
粒度:根据业务需求定制;
-
示例表名:
ads_sales_dashboard,ads_user_retention
📘 举例:
🎯 三、分层设计的好处
| 优点 | 说明 |
|---|---|
| ✅ 清晰的数据流向 | 从原始 → 明细 → 汇总 → 服务 → 应用,逻辑层次清晰 |
| ✅ 减少重复计算 | 公共指标可在DWM或DWS层复用 |
| ✅ 方便问题定位 | 出现异常可快速定位到某一层 |
| ✅ 提高性能与可维护性 | 下游直接使用汇总好的主题数据 |
| ✅ 数据血缘可追踪 | 支持全链路溯源与审计 |
🧠 四、常见扩展分层(可选)
-
DIM 层:专门存放维度数据(如地域、商品、用户信息)。
-
TMP 层:临时计算层,用于复杂ETL逻辑的中间结果。
-
APP 层:对接业务应用的数据表(如实时推送、API接口等)。
🏗️ 五、命名规范(建议)
| 类型 | 命名示例 | 说明 |
|---|---|---|
| ODS 层 | ods_{source}_{table}_di |
源系统+表名+分区周期 |
| DWD 层 | dwd_fact_{业务主题}_di |
事实表 |
| DWD 层 | dwd_dim_{维度名}_full |
维度表 |
| DWM 层 | dwm_{主题}_{维度}_{周期}_sum |
中间汇总表 |
| DWS 层 | dws_{主题}_{粒度}_wide |
宽表 |
| ADS 层 | ads_{主题}_{报表名} |
应用报表表 |

浙公网安备 33010602011771号