记录遇到的问题
SQL执行顺序
一、对于MySQL来说,以MySQL 8.0版本测试得,
- from
- on(SQL语句若存在连接操作,则有,否则无。)
- join(SQL语句若存在连接操作,则有,否则无。)
- where (无法使用字段别名)
- group by (可以使用字段别名,此操作之后的操作都可以使用字段别名)
- avg、sum等聚合操作
- having (可以使用字段别名)
- select
- distinct
- order by
- limit
在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。
二、对于Hive SQL来说,其执行顺序本质上就是总结MapReduce的执行顺序,通过explain得到执行顺序,
- from
- where
- join
- on
- select( Hive 是默认开启 map 端的 group by 分组的,所以在 map 端是 select 先执行,在 reduce 端是 group by 先执行。)
- group by
- select
- having
- distinct
- order by
- limit
- union / union all
具体例子可以参考链接: Hive SQL语句的正确执行顺序