大数据DWD与DWS层区别及应用场景
DWD(Data Warehouse Detail, 数据明细层)“企业统一的、清洁的、标准化的明细数据层”。它基于ODS数据,经过清洗、整合、维度退化后,得到原子粒度的、高质量的明细数据。它的核心是“数据质量”和“一致性”。DWS(Data Warehouse Service, 数据服务层)“面向主题的、轻度汇总的数据层”。它以维度(如用户、商品、地区)为视角,对DWD层的明细数据进行轻度聚合(
·
我们来深入解析大数据数据仓库中两个极易混淆但至关重要的核心层级:DWD层(数据明细层) 和 DWS层(数据服务层)。
这两层是数据加工流水线上的关键环节,理解了它们的区别,就抓住了数据从原始细节到服务应用的升华过程。
核心概念与一句话总结
- DWD(Data Warehouse Detail, 数据明细层):“企业统一的、清洁的、标准化的明细数据层”。它基于ODS数据,经过清洗、整合、维度退化后,得到原子粒度的、高质量的明细数据。它的核心是 “数据质量”和“一致性”。
- DWS(Data Warehouse Service, 数据服务层):“面向主题的、轻度汇总的数据层”。它以维度(如用户、商品、地区)为视角,对DWD层的明细数据进行轻度聚合(如按天、按用户),形成一系列公共维度指标,为上层应用提供可复用的数据服务。它的核心是 “复用性”和“效率”。
详细对比:DWD层 vs DWS层
为了更清晰地理解,我们从多个维度进行对比:
维度 | DWD(数据明细层) | DWS(数据服务层) |
---|---|---|
定位 | 企业统一事实细节层、数据质量治理层 | 公共维度汇总层、可复用数据服务层 |
数据粒度 | 原子粒度。每条数据代表一个不可再分的业务事件。例如:一条订单记录、一次点击记录。 | 轻度汇总粒度。每条数据代表一个维度在某时间段的聚合。例如:一个用户一天的总下单金额、一个商品一周的被浏览次数。 |
表设计 | 面向业务过程(如交易、日志)。通常是事实表和维度表。采用维度退化等技术生成宽表,减少关联。 | 面向分析主题/维度(如用户主题、商品主题)。是典型的宽表模式,围绕某个维度聚合了多个相关指标。 |
核心任务 | 数据清洗、数据整合、维度退化、保证数据质量和一致性。 | 数据聚合、指标加工、提供服务复用、提升查询效率。 |
主要使用者 | 数据开发工程师(用于问题排查)、需要原子粒度数据的数据分析师/科学家(进行深度钻取和明细分析)。 | 上层ADS应用、BI报表工具、大部分数据分析师(进行快速的主题分析)。 |
数据量 | 非常大。存储所有最细粒度的原始数据。 | 较小。由于进行了聚合,数据量比DWD层减少1-2个数量级。 |
查询性能 | 较慢。由于数据量大且粒度细,直接查询效率不高。 | 很快。数据已经过预聚合,查询时通常不需要再进行大量的GROUP BY 和JOIN 操作。 |
应用场景举例
我们继续用电商公司的例子来说明,追踪用户“小王”购买一个100元耳机的行为。
1. DWD层(数据明细层)应用场景
DWD层记录的是“发生了什么”的原始事实。
- 场景:订单明细事实表 (
dwd_order_detail_df
)- 数据来源:来自ODS层的原始订单表和用户表。
- 处理过程:
- 数据清洗:过滤掉金额为负或为Null的异常订单。
- 维度退化:将用户维度表(
dwd_dim_user_df
)中的常用字段(如user_name
,city
)直接冗余到订单事实表中。 - 规范化:将订单状态
status
从数字(1,2,3)映射为易懂的英文(‘paid’, ‘delivered’, ‘completed’)。
- 产出数据:
order_id user_id user_name city amount status dt (分区) 1001 200 小王 北京市 100.00 paid 2023-10-27 - 应用:
- 明细查询:财务需要查询订单ID为1001的所有详细信息。
- 问题排查:追踪某一笔特定订单的完整生命周期。
- 深度分析:数据分析师基于最细粒度的数据,进行复杂的用户行为路径分析。
2. DWS层(数据服务层)应用场景
DWS层记录的是“某个对象在某段时间内表现如何”的汇总结果。
- 场景:用户主题宽表 (
dws_user_1d_summary
)- 数据来源:扫描DWD层的多张事实表,如订单明细表 (
dwd_order_detail_df
)、点击日志表 (dwd_click_log_df
)。 - 处理过程:
- 按维度聚合:以
user_id
和dt
(日期)为分组键。 - 指标加工:
- 从订单表中计算:
sum(amount)
得到order_amount_1d
(日下单金额),count(order_id)
得到order_count_1d
(日下单次数)。 - 从点击日志表中计算:
count(page_id)
得到pv_1d
(日页面浏览量)。
- 从订单表中计算:
- 数据整合:将计算出的所有指标整合到一张以用户为主键的宽表中。
- 按维度聚合:以
- 产出数据:
user_id dt order_count_1d order_amount_1d pv_1d …(其他指标) 200 2023-10-27 1 100.00 15 … - 应用:
- 快速报表:BI工具直接查询此表,快速生成“每日用户行为分析报表”,而无需去关联多张巨大的DWD表。
- 数据服务:ADS层的“用户画像表”可以直接使用这里的聚合指标(如近7天下单总额
order_amount_7d
),无需重复计算。 - 特征工程:算法工程师直接使用此表中的聚合特征(如
pv_7d
,order_amount_30d
)来训练模型。
- 数据来源:扫描DWD层的多张事实表,如订单明细表 (
协同工作流程:从细节到服务
让我们看数据如何从DWD流转到DWS,完成从“事实”到“服务”的转变:
-
DWD层(记录事实):
- 小王的购买行为在
dwd_order_detail_df
中生成一条原子记录。 - 他的浏览行为在
dwd_click_log_df
中生成多条原子记录。
- 小王的购买行为在
-
DWS层(聚合服务):
- 在凌晨,一个每日调度的ETL任务启动。
- 它扫描DWD层所有2023-10-27的分区数据。
- 对于用户ID=200,它从订单表计算出 1笔订单,100元金额;从点击日志表计算出 15次浏览。
- 将这些结果聚合到
dws_user_1d_summary
表中user_id=200
且dt='2023-10-27'
的这一行记录里。
-
ADS层(直接应用):
- 一个销售大屏应用要展示“今日TOP10消费用户”,它不再需要去计算庞大的DWD层数据,而是直接查询
dws_user_1d_summary
表,按order_amount_1d
降序排列取前10即可,速度极快。
- 一个销售大屏应用要展示“今日TOP10消费用户”,它不再需要去计算庞大的DWD层数据,而是直接查询
总结与比喻
层级 | 角色比喻 | 核心价值 | 问题 |
---|---|---|---|
DWD | 标准化零件生产厂 | 质量与一致性。生产出高质量、标准化、原子级的零件(如螺丝、芯片)。 | 零件太多太散,直接组装产品(出报表)效率太低。 |
DWS | 公共组件/模组仓库 | 复用与效率。将零件预先组装成通用的组件/模组(如手机屏幕模组、电脑主板)。 | 产品经理(ADS)可以直接取用这些模组快速拼装成品,而无需从螺丝开始拧起。 |
为什么需要这两层分工?
- DWD层保证了数据分析的深度和灵活性,你可以基于最细粒度的数据做任何复杂的分析。
- DWS层保证了数据分析的效率和复用性,避免了不同应用重复计算相同指标,极大提升了查询速度。
简单来说,DWD是“原材料”,DWS是“半成品”。直接使用“原材料”做饭(做分析)虽然可能,但效率低下;而基于“半成品”则可以快速做出各式各样的菜肴(数据应用)。
更多推荐
所有评论(0)