数据仓库分层体系
数据仓库
一个典型的数据流向是:业务系统 → ODS(原始数据) → DWD(清洁明细数据) → DWS(主题汇总宽表) → ADS(应用指标)
1. 分层体系介绍
ODS(Operational Data Store)层
表前缀: ods_
核心职责: 数据引入层,与源业务系统保持同构,完成原始数据的采集和备份。
特点: 数据是原始的、未经清洗的,可能存在数据质量问题。通常只做简单的字段脱敏和格式转换。
DWD(Data Warehouse Detail)层
表前缀: dwd_
核心职责: 数据明细层,对ODS层数据进行清洗、标准化、维度退化,形成业务过程的原子粒度事实表和一致性维度表。
特点: 数据仍然是明细的,但已经是干净、规范的。例如,一个订单从创建到支付的所有状态变更,都可能是一条条独立的明细记录。
DWS(Data Warehouse Summary)层
表前缀: dws_
核心职责: 如上所述,面向主题的轻度汇总,形成宽表。
ADS(Application Data Service)层
表前缀: ads_ 或 app_
核心职责: 应用数据层/数据产品层,存放为特定业务场景或报表需求而高度聚合的指标数据。
特点: 这层的表是面向最终应用的,查询速度极快。数据通常非常聚合。
举例: ads_daily_sales_by_category(每日按商品类目统计的销售总额表),里面可能只有date, product_category, total_sales_amt 几个字段。
DIM(Dimension)层
表前缀: dim_
核心职责: 维度表层,存放几乎不变或变化缓慢的维度数据,如商品维度表(品牌, 品类, 描述, 价格)、用户维度表、地区维度表等。
特点: 通常在全库中共享,被DWD、DWS等层广泛关联使用。
2. 电商场景举例
以一个典型的电商“用户浏览下单”场景为例
ods
点击表: ods_user_click_log
{ "user_id": 123, "item_id": 1, "time": "2026-02-27 10:00:00", "action": "click", "ip": "192.168.1.1" }订单表: ods_order_info
order_id | user_id | product_id | order_amount | order_time | status ----------------------------------------------------------------------- 1001 | 123 | 1 | 100.00 | 2024-05-27 11:30:00 | 1 (已支付)dwd
对以上数据作清洗, 且关联商品维表, 直接获取 商品标题, 类目信息, 避免后续频繁关联.
同样是两张表分开: dwd_fact_user_click_log 和 dwd_fact_order_detail .
dws 轻度汇总
用户一日行为宽表, 表名: dws_user_behavior_1d
user_id | dt | pv_count | cart_count | order_count | order_amount --------------------------------------------------------------------------- 123 | 2024-05-27 | 10 | 2 | 1 | 100.00下游价值:
数据分析师想要分析小明的行为轨迹,不再需要去关联复杂的dwd_fact_user_click_log和dwd_fact_order_detail表,直接查询这张宽表即可快速得到汇总结果。
ads 高度聚合汇总
从dws_user_behavior_1d中,按dt分组,汇总出全平台当日的核心指标。
表名: ads_platform_daily_stats (平台日统计报表)
dt | total_pv | total_uv | total_cart_users | total_order_users | gmv ----------------------------------------------------------------------------------- 2024-05-27 | 5000000 | 1000000 | 200000 | 50000 | 5000000.00