FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY

Hive总是按照从左到右的顺序执行的,如a、b、c三个表关联

select a.id,b.colname,c.colname from a join b on a.id = b.id join c on a.id = c.id

大多数情况下,hive会对每个join连接对象启动一个MapReduce任务,上面的列子首先会启动一个MapReduce job对表a和表b进行连接操作,然后会再启动一个MapReduce job将第一个MapReduce job的输出和表c进行连接操作。当对3个或以上的表进行join连接时,如果每个on子句都使用相同的连接键,那么只会产生一个MapReduce job。
因此对于有join的操作要特别注意:
将数据量小的表放在join的左边,保证查询中表的大小从左到右是依次增加的。
普通的join操作,会在map端根据key的hash值,shuffle到某一个reduce上去,在reduce端做join连接操作,内存中缓存join左边的表,遍历右边的表

Oracle、SQL Server中SELECT的列别名只有ORDER BY可以用
HiveSQL基于MySQL存储的元数据信息,HAVING后可使用SELECT指定的别名
逻辑执行顺序:

1.FROM <left_table>
3.<join_type> JOIN <right_table> 2.ON <join_condition>
4.WHERE <where_condition>
5.GROUP BY <group_by_list>
6.WITH {cube|rollup}
7.HAVING <having_condition>
8.SELECT 9.DISTINCT 11.<top_specification> <select_list>
10.ORDER BY <order_by_list>

---------------------------------------------------------------------------------------------------------------------------

1.FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1
2.ON:对vt1表应用ON筛选器只有满足<join_condition>为真的行才被插入vt2
3.OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2
生成t3如果from包含两个以上表则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束
4.WHERE:对vt3应用 WHERE 筛选器只有使<where_condition>为true的行才被插入vt4
5.GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5
6.CUBE|ROLLUP:把超组(supergroups)插入vt6 生成vt6
7.HAVING:对vt6应用HAVING筛选器只有使<having_condition>为true的组才插入vt7
8.SELECT:处理select列表产生vt8
9.DISTINCT:将重复的行从vt8中去除产生vt9
10.ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10
11.TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者
--SQLServer中支持Values claues With table constructor,返回结果200
SELECT ROUND((100*(100000/new.uv))-100,4) AS rate FROM (VALUES(32525))new(uv)
SELECT ROUND((100*(100000/32525))-100,4) AS rate
--Hive中不支持Values claues With table constructor
FAILED: SemanticException [Error 10296]: Values clause with table constructor not yet supported
--用实际值测试返回结果207.4558,相比SQLServer不需要显式整型的转换了
SELECT ROUND((100*(100000/32525))-100,4) AS rate

HiveQL逻辑执行顺序 - 博客园

HiveQL逻辑执行顺序相关推荐

  1. select语句的逻辑执行顺序,你知道吗?

    回顾一下上一篇博客说到的问题: mysql -uroot -ptest 我们不能赤裸裸的将账户和密码就这样写在你的脚本里,这并不是一个好做法.所有能够访问你脚本的人都会知道数据库的用户账户和密码.要解 ...

  2. SQL查询语句逻辑执行顺序

    1.查询语句的逻辑执行顺序 执行1:from 执行2:on 执行3:join 执行4:where 执行5:group by 执行6:having 执行7:select 执行8:distinct 执行9 ...

  3. Mysql各关键字的逻辑执行顺序

    Mysql各关键字的逻辑执行顺序 下面的执行顺序只是一种逻辑顺序,由于Mysql优化器的作用,实际情况可能略有不同.使用explain语句可以分析sql语句的执行顺序,但也不保证准确性. (8) SE ...

  4. SELECT语句逻辑执行顺序,你知道吗?

    引言 这不是一个什么多深的技术问题,多么牛叉的编程能力.这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助.它不是一个复杂的知识点,但是一个非常基 ...

  5. SqlServer中Sql语句的逻辑执行顺序

    准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...

  6. MySQL 学习笔记(17)— SQL 执行顺序

    以查询语句为例,我们看下面的查询语句: (6)SELECT [DISTINCT | ALL] col1, col2, agg_func(col3) AS alias (1) FROM t1 JOIN ...

  7. SQL语句关键字执行顺序

    一.查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WHERE where ...

  8. SqlServer中sql执行顺序

    sql查询语句的处理步骤,代码清单 --查询组合字段 (5)select (5-2) distinct(5-3) top(<top_specification>)(5-1)<sele ...

  9. MySQL补充部分-SQL逻辑查询语句执行顺序

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

最新文章

  1. 自动驾驶感知系统盘点
  2. vijos p1143(三取方格数)(100)
  3. 在知乎引发众多分布式数据库大佬争相回答的问题
  4. Qt文档阅读笔记-Qt5录音功能的实现
  5. python字符编码解码,文件编码解码。
  6. SAP License:SAP Concur是什么?
  7. Struts1.x系列教程(17):使用IncludeAction和ForwardAction类包含和转入Web资源
  8. Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸
  9. 2.封装成帧和透明传输
  10. AD16自定义板子大小
  11. Spark2.1特征处理:提取/转换/选择
  12. 16进制颜色与UIColor互转
  13. asp.net网上书店系统
  14. CREO图文教程:利用CREO软件实现模型零件设计实例大全(曲柱、矿泉水瓶、三弯管、风扇叶、一腔多模、螺旋弹簧、数字刻度、足球设计、齿轮参数化设计、油缸)等几十个案例之详细攻略
  15. [TSP-FCOS]Rethinking Transformer-based Set Prediction for Object Detection
  16. vscode terminal下划线显示问题
  17. Vue知识(一)Vue基础语法
  18. 【青龙面板】快手JS版脚本
  19. python打印自动换行如何解决,python不换行打印的方法
  20. 怎样娶到比尔盖茨的女儿?

热门文章

  1. 虹科分享|如何使最终用户轻松进行备份和恢复?
  2. Qt设置软件启动动画(开屏动画、欢迎界面)
  3. 竣达技术丨中小机房远程网络在线动环监控方案
  4. win10无法连接WiFi,飞行模式中显示“我们在这台电脑上找不到无线设备”
  5. 京东物流+5G:广袤大地,孤独闪光
  6. 如何选择一款趁手的光纤测试仪
  7. STM32 IIC采集MLX90615无接触温度传感器
  8. 用原生JS模拟一个聊天记录表
  9. 生成二维码。且可调颜色
  10. mars3d App开发——判定导航路线或者POI点是否被收藏