第4章 数据仓库与ETL流程面试

本章聚焦数据仓库分层设计、ETL任务调度、数据一致性与性能优化四大高频考点。面试中常通过分层架构考察你对数据治理的理解,通过调度与一致性考察工程落地能力,通过性能优化考察技术深度。建议先掌握核心模型与回答框架,再通过项目案例串联。

ADS 应用层 DWS 汇总层 DWD 明细层 ODS 源数据层 数据流向 ETL任务:清洗、去重、维表转换 数据一致性:主键、时间戳、offset 性能优化:分区、分桶、压缩

3个高频面试问答卡

Q1:请描述数据仓库分层设计的原则,以及常见的分层架构。
面试官考察点
  • 是否理解分层解耦、数据重用、成本管控等核心原则
  • 能否清晰说出 ODS / DWD / DWS / ADS 每层的职责
  • 对命名规范、数据流向、模型设计(星型/雪花)的掌握
回答框架
  1. 原则:分层解耦、高内聚低耦合、数据复用、避免重复建设
  2. 架构:ODS(源数据暂存)→ DWD(明细清洗)→ DWS(公共汇总)→ ADS(应用集市)
  3. 补充:各层命名规范(表名前缀)、ETL入仓方式(全量/增量)
简短示例回答

“分层原则包括解耦业务与底层存储、数据逐层重用、提升查询性能。常见四层架构:ODS保持源数据原貌,DWD做清洗去重与维表转换,DWS按维度轻度汇总,ADS面向报表与指标。每层表名前缀区分,例如ods_、dwd_、dws_、ads_。”

可能追问
  • DWD层通常做哪些转换?如何处理缓慢变化维?
  • 如果ODS数据量极大,如何优化DWD层入仓速度?
避坑提醒

避免只背概念,要结合实际案例说明如何规避数据爆炸或分层冗余。 面试官期待看到你设计分层时的权衡思考。

Q2:ETL任务调度如何保证数据一致性和时效性?
面试官考察点
  • 是否了解调度依赖、重试机制、数据质量监控
  • 能否说明数据一致性校验(对账、边界值、异常告警)
  • 对调度系统(如 Airflow、DolphinScheduler)的使用经验
回答框架
  1. 调度层面:DAG 管理任务依赖,设置超时与重试次数
  2. 一致性保障:幂等写入、主键去重、分批提交+最终一致性检查
  3. 时效性:合理设置窗口时间、错峰调度、资源预留
简短示例回答

“调度采用 Airflow DAG,依赖上游完成才触达下游。数据一致性依靠写入时去重(ROW_NUMBER+DISTRIBUTE BY),再对账条数与关键指标。时效性通过划分小时/天级窗口,并设置 SLA 告警,超时自动升重优先级。”

可能追问
  • 数据重复读取导致性能下降,如何解决?
  • 如果下游依赖未就绪,如何处理数据回溯?
避坑提醒

不要只说“用调度工具”,要讲清楚调度策略如何保证 exactly-once 语义。重试机制也需说明是否会带来数据重复问题。

Q3:如何优化数据仓库 ETL 性能?请列举具体措施。
面试官考察点
  • 是否掌握分区、分桶、文件格式、并行度等常见优化手段
  • 能否区分 OLAP 与 OLTP 场景下的不同优化思路
  • 对数据倾斜处理的经验
回答框架
  1. 存储层:列式存储(Parquet/ORC)、合理分区(时间/地域)、压缩(Snappy/Zstd)
  2. 计算层:调整并行度、解决数据倾斜(加盐、两阶段聚合)
  3. 调度层:增量数据优先、减少全量扫描、物化视图
简短示例回答

“优化分为三方面:存储采用 Parquet + Zstd 压缩,按日期分区减少扫描;计算上使用 Spark 动态资源分配,遇到倾斜时加随机前缀做两阶段聚合;调度层面只拉取增量数据,避免每日全量重跑。”

可能追问
  • 数据倾斜有哪些典型场景?如何处理 join 倾斜?
  • 压缩比与解压速度如何权衡?
避坑提醒

避免罗列技术名词而不说适用场景。面试官会追问“你实际遇到过哪种倾斜?怎么解决的?”务必准备一个真实案例。

项目案例|用户行为数据仓库建设

项目名称用户行为实时/离线数据仓库
业务背景支持业务报表、用户画像、推荐特征计算,要求 T+1 离线数据与分钟级实时数据统一融合。
规模指标日处理 200 亿条用户事件,数据量约 20TB/天,下游 30+ 数据应用。
技术栈Kafka → Flink(实时) / Spark(离线) → Hive(ORC) → ClickHouse + Presto,调度:DolphinScheduler
核心难点实时与离线数据一致性校正(late data 处理)、ODS 层重复数据去重效率、数据倾斜导致任务失败
面试高频追问① 实时与离线数据如何保证一致性? ② 数据倾斜怎么定位和解决? ③ 分区策略如何设计才能兼顾查询与写入?
可迁移回答话术“首先实时与离线共用一套维表并用 event_time 对齐;ODS 层使用 Flink 对重复事件去重(结合 watermark + dedup key);倾斜主要通过分析 Task 耗时分布,对高频 key 加随机后缀后两阶段聚合。分区按时间+业务线,避免小文件过多。”

面试加分项:在回答分层与ETL时,主动提及数据血缘管理、元数据治理,能显著提升技术深度印象。

复习提示:本章四个话题常被组合提问(如“设计一个分层数仓并说明ETL性能优化”)。建议提前准备一个完整的用户行为数据链路草图,手绘式表达。