清晰的分层是数据仓库体系结构的核心,它体现了“高内聚、低耦合”的设计思想。
目前最经典和通用的数仓分层模型是四层结构。下面我将详细解释每一层的目的、作用、特点以及数据流向。
核心思想:为什么要分层?
在深入各层细节之前,先理解分层的好处:
- 清晰数据结构:每一层都有明确的职责,方便理解和维护。
- 数据血缘追踪:当数据出现问题时,可以清晰地回溯到问题源头。
- 减少重复开发:规范的数据处理流程,中间结果可以共享。
- 统一数据口径:通过中间层加工,保证出口数据的一致性。
- 屏蔽原始数据的影响:当业务系统变更时,只需调整底层(如ODS层),而不影响上层的应用。
- 空间换时间:通过预处理和聚合,用存储空间换取应用查询的高性能。
经典的四层数据仓库架构
数据流向通常为:数据源 -> ODS -> DWD -> DWS -> ADS/APP。
1. ODS(Operational Data Store)层:操作数据层
这是数据仓库的最接近数据源的一层。
- 作用:
- 数据同步与备份:将来自各个业务系统(如MySQL、Oracle等)的表、日志文件等数据几乎无修改地同步到数据仓库中。这相当于数据源的一个镜像或备份。
- 保持数据原始性:数据结构和内容与源系统基本一致,一般只做简单的清洗(如去除明显脏数据)或字段剪裁。
- 表命名建议:
ods_table_name或ods_[业务源系统]_table_name - 典型操作:
- 全量同步:每天导入全量数据(如维度表)。
- 增量同步:每天导入新增和变化的数据(如事务事实表),通常通过时间戳或增量日志(如MySQL的binlog)捕获。
2. DWD(Data Warehouse Detail)层:数据明细层
这一层是数据仓库的核心层,对ODS层的数据进行清洗、整合和规范化。
- 作用:
- 数据清洗与标准化:处理脏数据(如非法日期、空值)、数据格式化(如统一时间格式)、统一编码(如将“男”、“Male”统一为“M”)。
- 维度退化:将一些常用的维度字段(如用户昵称、商品分类名)直接关联到事实表中,减少后续查询的关联次数,提高易用性。
- 数据建模:根据维度建模理论,将数据拆解成一个个清晰的事实表(如交易事实表、点击事实表)和维度表(如用户维度表、商品维度表)。
- 形成公共明细层:这一层的数据是干净、规范、粒度为最细的(通常是单次行为或事务级别),可供多个业务方使用。
- 表命名建议:
dwd_[主题域]_table_name - 典型操作:
JOIN(关联维度表)、FILTER(过滤)、DATA CLEANSING(数据清洗)、TYPE CONVERSION(类型转换)。
3. DWS(Data Warehouse Service)层:数据汇总层/数据轻度汇总层
这一层以DWD层为基础,按主题域进行跨业务的轻度聚合汇总。
- 作用:
- 面向主题聚合:不再关注单次行为,而是围绕某个分析对象(如用户、商品、门店),将与其相关的所有行为数据聚合到一起,形成一张宽表。
- 提升查询性能:将复杂的
JOIN和聚合计算提前完成,应用层查询时可以直接使用,避免了每次查询都进行大规模的数据扫描和计算。 - 公共指标计算:计算一些通用的、跨业务的派生指标,如用户最近1日、7日、30日的购买次数、浏览时长等。
- 表命名建议:
dws_[主题域]_[统计周期(如1d/7d/30d)]_[汇总粒度] - 典型操作:
GROUP BY(分组)、SUM/COUNT/AVG(聚合)、窗口函数(计算累计值、排名等)。 - 示例:
dws_user_action_1d(用户单日行为宽表),包含字段:user_id(用户ID),login_count(登录次数),view_count(浏览商品次数),order_amount(下单金额)等。
4. ADS(Application Data Service)层:应用数据层
这一层直接为最终的业务应用提供数据,非常灵活。
- 作用:
- 满足个性化需求:根据具体的报表、数据分析、推荐系统等应用的需求,进行个性化的数据加工。
- 数据组装:可能从DWD或DWS层取数,进行复杂的业务逻辑计算,组装成最终适合业务展示的数据模型。
- 非强制性:对于一些非常简单的查询,应用也可以直接查询DWS甚至DWD层。ADS层主要存放复杂业务逻辑的结果。
- 表命名建议:
ads_[应用名称]_[指标名称] - 典型操作:复杂的业务逻辑计算、多表关联、最终结果输出。
总结对比
| 分层 | 中文全称 | 核心作用 | 数据粒度 | 对应建模阶段 |
|---|---|---|---|---|
| ODS | 操作数据层 | 数据同步、备份、保持原始性 | 与源系统相同 | 无建模,贴源存储 |
| DWD | 数据明细层 | 数据清洗、规范化、维度退化,形成明细事实与维度 | 最细粒度(如单次交易) | 维度建模(明细层) |
| DWS | 数据汇总层 | 面向主题/对象聚合,构建公共宽表,提升性能 | 较粗粒度(如每日汇总) | 维度建模(汇总层) |
| ADS | 应用数据层 | 满足具体应用的个性化计算需求 | 不定,与应用相关 | 面向应用的宽表或报表 |
通过这种分层结构,数据就像在一条流水线上,从原始的“原材料”(ODS),经过清洗和标准化变成“标准零件”(DWD),再组装成“半成品组件”(DWS),最后根据不同的“产品需求”加工成最终的“商品”(ADS)。这使得整个数据体系井然有序、高效且健壮。
数据仓库四层架构解析
1710

被折叠的 条评论
为什么被折叠?



