在数据仓库(数仓)领域,ODS、DWD、DWS、ADS 是常见的数据分层概念,用于规范数据处理流程、提升数据复用性和可维护性。以下是它们的全称、定义及核心作用:
一、ODS(Operational Data Store,操作数据存储层)
- 定义:
直接对接业务系统数据源(如 MySQL、Oracle 等),原始数据的直接存储层,结构与业务系统基本一致,保留数据的原始性和完整性。 - 特点:
- 数据原样存储:不做清洗、转换,仅做简单的格式统一(如日期格式)和去重(可选)。
- 时效性高:通常实时或准实时同步业务数据(如通过 Flink、Kafka 等工具)。
- 短期存储:数据保留周期较短(如几天到几周),用于支撑实时数据同步和临时查询。
- 作用:
- 作为数据仓库与业务系统之间的缓冲层,避免直接访问业务库影响性能。
- 为后续数据清洗和分层提供原始数据源。
二、DWD(Data Warehouse Detail,数据仓库细节层)
- 定义:
对 ODS 层数据进行清洗和标准化处理后的明细数据层,是数仓的核心基础层。 - 特点:
- 数据清洗:去除无效数据(如空值、异常值)、清洗脏数据(如重复记录)、统一编码(如性别字段统一为 0/1 或男/女)。
- 维度退化:将维度表与事实表合并(如将订单表与用户表的关联字段直接冗余到事实表),减少后续查询的关联复杂度。
- 长期存储:数据保留周期较长(如几年),且保持数据的可追溯性。
- 作用:
- 提供干净、一致的明细数据,供下游层复用。
- 隔离上游业务系统的变更影响(如业务表字段调整时,只需在 DWD 层适配,不影响上层)。
三、DWS(Data Warehouse Summary,数据仓库汇总层)
- 定义:
基于 DWD 层的明细数据,按主题域、维度和粒度进行聚合统计的轻度汇总层,用于减少重复计算和提升查询性能。 - 特点:
- 按维度聚合:例如按时间(天/周/月)、地域、用户类型等维度,对指标进行汇总(如统计每日活跃用户数、每月销售额)。
- 轻度冗余:数据粒度通常比 DWD 层粗(如按天汇总而非按订单明细),但比 ADS 层细(如不跨多个维度聚合)。
- 定期更新:一般按天或按小时更新,而非实时更新。
- 作用:
- 预计算常用聚合结果,加速报表和分析查询(如 BI 工具直接读取 DWS 层数据)。
- 减少下游应用对明细数据的依赖,降低计算资源消耗。
四、ADS(Application Data Store,应用数据层)
- 定义:
面向具体业务应用场景的数据层,直接为前端应用(如报表系统、可视化工具、APP 等)提供数据服务,是数仓的输出层。 - 特点:
- 高度业务定制:根据业务需求(如运营报表、用户画像、风控模型)定制数据结构,可能跨多个主题域组合数据。
- 数据集市化:可看作“小而专”的数据集市,聚焦特定业务场景(如营销数据集市、财务数据集市)。
- 实时性要求高:部分场景需支持实时查询(如实时大屏),可能结合缓存(如 Redis)或实时数仓(如 Apache Doris)实现。
- 作用:
- 直接对接业务需求,避免业务方直接访问底层复杂的数据模型。
- 提供即席查询(Ad-hoc Query)和定制化数据服务,快速响应业务分析需求。
五、分层对比与核心逻辑
分层 | 定位 | 数据处理深度 | 数据粒度 | 更新频率 | 典型应用 |
---|---|---|---|---|---|
ODS | 原始数据缓冲层 | 无清洗,原样存储 | 与业务系统一致 | 实时/准实时 | 业务数据同步、临时查询 |
DWD | 基础明细层 | 清洗、标准化 | 明细粒度 | 每日/实时 | 提供干净的基础数据 |
DWS | 轻度汇总层 | 按维度聚合 | 轻度聚合粒度 | 每日/小时 | 预计算常用统计指标 |
ADS | 应用输出层 | 业务定制聚合 | 高度聚合粒度 | 按需(实时/离线) | 报表展示、业务分析、模型训练 |
六、数仓分层的核心价值
- 数据标准化:通过 DWD 层统一数据口径,避免“数据孤岛”和指标混乱。
- 性能优化:通过 DWS 层预计算聚合结果,减少重复计算,提升查询效率。
- 业务隔离:底层变更(如数据源调整)不影响上层应用,通过分层解耦降低维护成本。
- 复用性提升:中间层(DWD、DWS)可被多个业务场景复用,避免重复开发。
七、常见变体与扩展
- DIM(维度层):独立于四层结构,专门存储维度数据(如用户维度、商品维度),用于支撑各层的维度关联。
- 实时数仓分层:在流式数据场景中,分层逻辑类似(如 ODS→DWD→DWS→ADS),但处理工具替换为 Flink、Kafka Streams 等流式框架。
- 三层架构简化版:部分小型数仓可能合并 DWS 和 ADS 层,直接基于 DWD 层构建应用数据。
通过合理的数据分层,数仓能够更高效地管理数据生命周期,满足不同业务场景对数据时效性、粒度和复杂度的需求。