ZhangZhihui's Blog  

数据仓库(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

📘 举例

CREATE TABLE ods_order_info_di (
  order_id STRING,
  user_id STRING,
  order_time TIMESTAMP,
  order_amount DECIMAL(10,2)
) PARTITIONED BY (dt STRING);

 


2️⃣ DWD 层(明细数据层)

  • 作用

    • 数据清洗(去重、空值处理、格式标准化)

    • 维度统一(时间、地区、用户、商品等)

  • 粒度:保持与业务事实一致的明细粒度;

  • 常见表类型

    • 事实表(事实业务事件)

    • 维度表(业务对象属性)

  • 示例表名dwd_fact_order_di, dwd_dim_user_info_full

📘 举例

CREATE TABLE dwd_fact_order_di AS
SELECT
  order_id,
  user_id,
  product_id,
  CAST(order_time AS TIMESTAMP) AS order_time,
  CAST(order_amount AS DECIMAL(10,2)) AS order_amount
FROM ods_order_info_di
WHERE dt = '${biz_date}';

 


3️⃣ DWM 层(中间汇总层)

  • 作用:在DWD的基础上进行初步聚合与计算;

  • 用途:服务于多个主题的公共指标;

  • 粒度:通常为“某维度 + 时间”的中间汇总;

  • 示例表名dwm_order_user_day_sum

📘 举例

CREATE TABLE dwm_order_user_day_sum AS
SELECT
  user_id,
  date_format(order_time, 'yyyy-MM-dd') AS order_date,
  COUNT(DISTINCT order_id) AS order_count,
  SUM(order_amount) AS total_amount
FROM dwd_fact_order_di
GROUP BY user_id, date_format(order_time, 'yyyy-MM-dd');

 


4️⃣ DWS 层(服务数据层)

  • 作用:按照业务主题进行汇总,生成主题域宽表;

  • 面向对象:数据分析师、BI开发;

  • 示例表名dws_trade_user_daywide

📘 举例

CREATE TABLE dws_trade_user_daywide AS
SELECT
  u.user_id,
  u.gender,
  o.order_date,
  o.total_amount,
  o.order_count
FROM dwm_order_user_day_sum o
JOIN dwd_dim_user_info_full u
  ON o.user_id = u.user_id;

 


5️⃣ ADS 层(应用数据层)

  • 作用:最终的结果层,直接支撑报表或接口;

  • 粒度:根据业务需求定制;

  • 示例表名ads_sales_dashboard, ads_user_retention

📘 举例

CREATE TABLE ads_sales_dashboard AS
SELECT
  order_date,
  SUM(total_amount) AS daily_sales,
  COUNT(DISTINCT user_id) AS active_users
FROM dws_trade_user_daywide
GROUP BY order_date;

 


🎯 三、分层设计的好处

优点说明
清晰的数据流向 从原始 → 明细 → 汇总 → 服务 → 应用,逻辑层次清晰
减少重复计算 公共指标可在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_{主题}_{报表名} 应用报表表

 

posted on 2025-11-03 16:09  ZhangZhihuiAAA  阅读(6)  评论(0)    收藏  举报