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
