数据岗位面试题更新 2026-08-05

请描述 Presto 在执行复杂 SQL 查询时的内部处理流程,并列举一些常用的查询优化手段。

数据性能优化技术原理问题排查Apache HivePrestoSQL

考察说明

考查对 Presto 查询执行引擎的理解以及实际优化经验。

回答思路

  1. 【回答框架 1】Presto 是一个分布式 SQL 查询引擎,采用 MPP 架构。查询处理流程大致为:客户端提交 SQL,经过解析器生成抽象语法树,再经过分析器进行语义校验和类型推断,生成逻辑执行计划,随后由优化器进行规则优化,最终生成物理执行计划并分发到各 Worker 节点执行。每个查询被拆分成多个 Stage,每个 Stage 包含若干 Task,Task 内由 Operator 并行处理数据。
  2. 【回答框架 2】Presto 的查询优化主要分为两类:逻辑优化和物理优化。逻辑优化包括谓词下推、列剪枝、常量折叠、子查询去关联化等,旨在减少计算量和数据传输量。物理优化则包括 Join 策略选择(如 broadcast join 和 partitioned join)、动态过滤、本地交换优化等,旨在提高执行效率。
  3. 【回答框架 3】针对复杂 SQL,常见的优化技巧有:优先进行聚合和过滤以减少数据量;避免使用 SELECT *,只查询必要列;合理使用 WITH 子句和子查询,避免嵌套过深;对于多表 Join,选择正确的 Join 顺序和 Join 类型,尽可能使用等值 Join;利用 Hive 分区和分桶信息进行分区裁剪;必要时手动调整查询并行度,例如设置 session 参数。
  4. 【回答框架 4】此外,可以通过资源组和队列限制查询并发,避免资源争抢。监控和调优方面,利用 Prestos 的 UI 查看查询的执行细节,识别耗时最长的 Stage 和 Operator,针对性地优化查询语句或调整集群配置。
  5. 【关键点 1】Presto 基于 MPP 架构,查询被拆分为多阶段执行。
  6. 【关键点 2】优化涉及谓词下推、列剪枝等逻辑优化和 Join 策略等物理优化。
  7. 【关键点 3】常用技巧包括减少数据量、优化 Join 顺序、避免 SELECT * 等。
  8. 【关键点 4】通过监控 UI 定位瓶颈,调整并行度和资源组。
  9. 【易错点 1】不要过度依赖自动优化,有时需要手动改写查询,如将相关子查询改为 JOIN。
  10. 【易错点 2】避免使用复杂的正则表达式或分析函数导致内存压力。
  11. 【易错点 3】注意 Presto 对内存的限制,过大的 GroupBy 或排序可能引起内存溢出。