三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Spark SQL语法执行顺序

Spark SQL语法执行顺序

        在 Spark SQL 中,一条 SQL 语句(尤其是查询语句)的书写顺序逻辑执行顺序并不相同。理解它们的先后关系,是写出正确、高效 SQL 的关键。Spark SQL 遵循 SQL 标准,同时因为基于 Catalyst 优化器,实际物理执行可能会被重排,但逻辑执行顺序是确定的。

1. 书写顺序(我们看到的代码)

SELECT [DISTINCT] ... -- 5 FROM ... -- 1 JOIN ... ON ... -- 1 WHERE ... -- 2 GROUP BY ... -- 3 HAVING ... -- 4 WINDOW ... -- (窗口定义) ORDER BY ... -- 6 LIMIT ... -- 7
注意:LATERAL VIEW、TABLESAMPLE、PIVOT/UNPIVOT 等子句的位置也遵循特定顺序,后面会补充。

2. 逻辑执行顺序(真正处理的先后)

对于一条查询,数据流转的逻辑步骤如下(数字表示步骤序号):

① FROM / JOIN (含 ON) ② WHERE ③ GROUP BY ④ HAVING ⑤ SELECT (包含 DISTINCT, 窗口函数, 聚合函数) ⑥ ORDER BY ⑦ LIMIT / OFFSET

下面逐步详解每一步做了什么,以及 Spark SQL 的特殊之处。

① FROM & JOIN

  • 动作:读取表、视图或子查询,并执行连接操作(JOIN ... ON)。

  • Spark 注意点

    • 这一步确定数据源,如果是 Hive 表,则读 Hive;如果是 DataFrame 注册的临时视图,则读内存数据。

    • JOIN 条件 (ON) 在这一步执行,用于生成连接后的行。

    • 如果有 LATERAL VIEW(如 LATERAL VIEW explode(...)),它紧跟在 FROM 表名之后,在这一步对每一行执行表生成函数,生成新列并展开。

    • TABLESAMPLE(抽样)也是在 FROM 

← 返回列表