第3章 高频技术问题:SQL、数据仓库、ETL
面试中,SQL、数据仓库与ETL是数据平台分析师的核心技术壁垒。本章梳理三大模块的高频问题,并提供可迁移的回答框架,帮助你从“会做”到“会讲”。
知识结构:高频考点分类
| 模块 | 典型问题 | 大厂偏好权重 | 核心考察点 |
|---|---|---|---|
| SQL | 慢查询优化 / 窗口函数 / 行列转换 | ★★★★★ | 执行计划理解、索引与分区 |
| 数据仓库 | 星型 vs 雪花 / 维度建模原则 / 缓慢变化维度 | ★★★★☆ | 建模设计对查询性能的影响 |
| ETL | 数据倾斜 / 增量 vs 全量 / 数据质量校验 | ★★★★☆ | 分布式计算原理与容错机制 |
💡 备考策略:每个问题均需准备“背景→思路→细节→总结”的完整叙事,避免只答步骤不答原因。
问答卡片 1:SQL 慢查询优化
| 面试问题 | 如何优化一条执行缓慢的 SQL 查询?请举例说明。 |
| 面试官考察点 | 是否掌握执行计划分析;能否结合业务场景选择索引、分区、改写逻辑。 |
| 回答框架 | ① 定位瓶颈(EXPLAIN 看类型与 rows)→ ② 检查索引(是否覆盖、失效)→ ③ 改写SQL(用JOIN代替子查询、避免函数索引)→ ④ 分库分表/物化视图(极端场景)。 |
| 简短示例回答 | “比如一个订单明细查询,先 EXPLAIN 发现全表扫描,rows 量级百万。我对 order_date 列建索引后,扫描行数降至千级。若还慢,改用分区表按月份裁剪,并避免在 WHERE 中对时间列使用函数。”(约85字) |
| 可能追问 | ① 索引覆盖与回表的区别?② 如何评估索引是否失效?③ 如果有多个慢查询,优先级怎么定? |
| 避坑提醒 | ❌ 不要只说“加索引”,需说明加在哪个字段、为什么。❌ 避免拿复杂嵌套子查询直接谈优化,先确认业务是否可简化。 |
问答卡片 2:星型模型 vs 雪花模型
| 面试问题 | 星型模型和雪花模型分别适用于什么场景?你如何选择? |
| 面试官考察点 | 是否理解维度建模本质;能否在查询性能与存储冗余之间做权衡。 |
| 回答框架 | ① 对比结构(星型单层维度表,雪花规范化多层)→ ② 性能差异(星型 join 少查询快,雪花节省存储但 join 多)→ ③ 选型依据(查询频繁偏星型,数据一致性要求高偏雪花)→ ④ 实际中可混合使用。 |
| 简短示例回答 | “一般业务宽表场景我优先用星型,因为分析师频繁多表关联,星型减少 join 次数。但若维度表有层级关系(如地域省-市-区),我会用雪花以保持规范化,避免冗余。最终权衡看查询频率和存储成本。” (约90字) |
| 可能追问 | ① 缓慢变化维度(SCD)如何处理?② 宽表与星型模型的关系?③ 在 ClickHouse 中星型模型是否仍适用? |
| 避坑提醒 | ❌ 不要直接说“星型更好”或“雪花更好”,一定要说明场景。❌ 避免忽略数据仓库面向分析的业务需求,只谈技术名词。 |
问答卡片 3:数据倾斜处理
| 面试问题 | 在 ETL(如 Spark/Hive)中遇到数据倾斜,你会怎么排查和解决? |
| 面试官考察点 | 是否理解分布式 shuffle 原理;能否给出可落地的解决方案而非空谈理论。 |
| 回答框架 | ① 定位倾斜任务(查看 stage 耗时、数据分布)→ ② 判断类型(join倾斜/group by倾斜)→ ③ 常见方案:加盐打散、调整并行度、map端预聚合、倾斜key单独处理 → ④ 验证效果并监控。 |
| 简短示例回答 | “有一次 group by 城市分布时,北京数据占70%。我采用双阶段聚合:先给城市加随机后缀拆分为多个子任务,聚合后再去掉后缀二次汇总。这样分散了单节点压力,任务时间从 30min 降到 4min。” (约85字) |
| 可能追问 | ① 加盐后如何保证结果正确?② 为什么不用自动倾斜优化参数?③ 数据倾斜在流式 ETL 中怎么处理? |
| 避坑提醒 | ❌ 不要只背方案不分析原因,面试官更看重排查思路。❌ 避免推荐一个方案后忽略副作用(如数据膨胀),需说明权衡。 |
⚠️ 本章复习要点:将每个问题的回答框架熟记于心,反复练习用60-100字讲清核心逻辑。大厂面试时,结构清晰 + 细节到位 + 可迁移思考是拿高分的关键。