第2章:离线数仓分层架构设计

章节目标 掌握数仓分层设计的核心逻辑、面试回答框架及不同公司的考察侧重,能够清晰阐述从业务需求到分层映射的推导过程。

分层设计核心逻辑

分层定位核心职责关键指标
ODS原始数据缓冲区全量拉取、增量合并、格式统一数据延迟 ≤ T+0.5h
DWD明细清洗层去重、异常过滤、维度退化、标准化脏数据率 < 0.1%
DWS轻度汇总层公共维度聚合、宽表预计算查询响应 < 3s
ADS应用指标层业务定制大宽表、报表灵活增量刷新
面试加分点 追问“ODS是否允许数据丢失?”——答:不允许,ODS需支持历史全量回溯,必须保证幂等性和可重跑。
业务需求分析 数据源分类 分层映射推导 ODS/DWD/DWS/ADS 存储 & 计算策略 迭代验证 核心:分层不是模板,而是从“业务查询模式”反推“存储粒度” 面试官关注:你能否说清楚“为什么DWS不直接替代ADS”

高频面试问答卡片

问题1:为什么数仓要分层?讲讲你的分层原则。

面试官考察点:基础方法论、是否具备抽象复用意识、能否跳出“就分层谈分层”

回答框架:业务驱动→三个价值(复用/解耦/可回溯)→列举典型分层

简短示例回答:“分层核心解决三个问题:数据链路可复用、ETL逻辑解耦、异常可局部回溯。我通常按ODS统一源格式、DWD做标准化明细、DWS做业务主题汇总、ADS适配前端。比如直播间GMV,在DWS预聚合主播级日累计,ADS再计算实时占比,避免重复扫描。”
(约90字)

可能追问:如果你的ODS层出现数据丢失,怎么保证DWD不丢数?

避坑提醒:不要只罗列分层名称,要说明每层“解决了什么业务痛点”。

问题2:ODS层设计有哪些关键点?如果遇到全表扫描性能瓶颈你怎么优化?

面试官考察点:对原始数据接入的细节把控、增量与全量策略、分区设计

回答框架:数据源接入方式→分区策略→压缩格式→数据质量校验

简短示例回答:“ODS关键点:1. 按天分区+业务主键,保证可重跑;2. 使用Snappy压缩,只保留原始字段;3. 增量合并用Merge on Read,避免重写全表;4. 接入校验必须做:源数据行数核对、主键唯一性、时间戳连续性。”
(约85字)

可能追问:ODS层可以用Kafka代替吗?你怎么设计实时+离线双链路?

避坑提醒:避免回答“ODS就是简单的原样拷贝”,要体现“结构化存储+可回溯”的设计思想。

问题3:怎么判断一张表应该放在DWD层还是DWS层?

面试官考察点:对明细与汇总的理解、业务抽象能力、分区粒度意识

回答框架:查询模式分析→复用频率判断→粒度一致性→分层隔离原则

简短示例回答:“如果下游多个任务需要同一粒度明细(如用户点击流),放DWD;如果所有下游只需按天聚合(如日活、时长),直接进DWS。核心判断:同一份数据是否被重复做相同的聚合”。
(约75字)

可能追问:如果某个业务既需要明细又需要汇总,你怎么设计?

避坑提醒:不要回答“根据数据量大小决定”,要聚焦“复用度”和“查询模式”。

公司侧重点速查

公司类型分层设计侧重点典型追问方向
大厂(阿里、字节)强调ODS稳定性 & DWS公共层复用ODS数据回溯方案、DWS字段冗余策略
中型互联网(B站、小红书)分层与业务快速迭代的平衡如何应对需求变化导致分层调整
传统企业(银行、制造业)数据质量 & 合规溯源ODS审计字段设计、DWD数据血缘
可迁移回答话术 “对于数据分层,我始终遵循‘从业务查询模式反推存储粒度’的方法:先调研Top10高频查询需要哪些维度、什么粒度的数据,然后映射到对应分层,避免过度层叠导致ETL链路过长。”