SQL面试题更新 2026-08-03

请阐述 Spark SQL 中 Catalyst 优化器的工作机制,并列举其关键优化阶段。

考察说明

考察候选人是否理解 Catalyst 优化器作为 Spark SQL 查询优化核心的架构与工作流程,以及各优化阶段的作用。

回答思路

  1. 【回答框架 1】Catalyst 是 Spark SQL 基于 Scala 构建的查询优化框架,核心思想是树形结构表达计划,并通过规则匹配对语法树进行等价变换,从而生成更高效的物理执行计划。
  2. 【回答框架 2】整体流程分为四个关键阶段:分析(Analyzer)阶段将 Unresolved Logical Plan 转换为 Logical Plan,完成表、列、函数解析和类型检查;逻辑优化(Logical Optimizer)阶段应用常量折叠、谓词下推、列剪枝等规则;物理计划(Physical Planning)阶段逻辑计划转为物理计划,选择 join 策略等;代码生成(Code Generation)阶段使用 WholeStageCodegen 将物理算子编译为 Java 字节码。
  3. 【回答框架 3】逻辑优化阶段通过规则定义(如 PushDownPredicate、ColumnPruning)对逻辑树进行变换,减少数据扫描和跳过无关数据;物理规划阶段会考虑数据分区、本地性等因素,选择最优执行方案。
  4. 【回答框架 4】Catalyst 的规则机制开放,用户可自定义规则扩展优化能力,且基于模式匹配和多种内置优化规则库,使得查询优化可扩展且高效。
  5. 【关键点 1】Catalyst 使用树和规则驱动的优化框架,将 SQL 转为逻辑计划、物理计划到代码生成。
  6. 【关键点 2】分析阶段先解析绑定表和列,逻辑优化阶段主要做谓词下推、列剪枝、常量折叠等。
  7. 【关键点 3】物理计划阶段选择 join 算法(如 SortMergeJoin、BroadcastHashJoin)和连接顺序。
  8. 【关键点 4】WholeStageCodegen 将算子融合编译成 Java 代码,减少虚函数调用,提升执行效率。
  9. 【易错点 1】不要将 Catalyst 简单等同于语法树解析,它更关键的是规则优化机制。
  10. 【易错点 2】注意区分逻辑计划优化与物理计划优化,两者作用不同。
  11. 【易错点 3】谓词下推并不总是最优,有时会因重复计算而需要权衡。