关键字:Hive SELECT、ORDER BY、SORT BY、DISTRIBUTE BY、CLUSTER BY、Hive子查询、Hive虚拟列

八、Hive的查询语句SELECT

在所有的数据库系统中,SELECT语句是使用最多,也最复杂的一块,Hive中的查询语句SELECT支持的语法当然也比较复杂,本文只能尽力去介绍。

8.1 基础查询语法

Hive中的SELECT基础语法和标准SQL语法基本一致,支持WHERE、DISTINCT、GROUP BY、ORDER BY、HAVING、LIMIT、子查询等;

语法如下:

[WITH CommonTableExpression(,CommonTableExpression)*]

SELECT [ALL |DISTINCT]select_expr,select_expr,...

FROM table_reference

[WHERE where_condition]

[GROUP BY col_list]

[CLUSTER BY col_list

|[DISTRIBUTE BY col_list][SORT BY col_list]

]

[LIMIT number]

下面介绍Hive中比较特殊的一些查询语法。

8.2 ORDER BY和SORT BY

ORDER BY用于全局排序,就是对指定的所有排序键进行全局排序,使用ORDER BY的查询语句,最后会用一个Reduce Task来完成全局排序。

SORT BY用于分区内排序,即每个Reduce任务内排序。

看下面的例子:

原表数据为:

hive>select*fromlxw1234_com;

OK

5

3

6

2

9

8

1

使用ORDER BY

hive>select*fromlxw1234_com order byid;

1

2

3

5

6

8

9

使用SORT BY

hive> set mapred.reduce.tasks=2;

hive> select * from lxw1234_com sort by id;

2

5

6

9

1

3

8

设定了2个reduce,从结果可以看出,每个reduce内做了排序。

如果reduce数为1,那么ORDER BY和SORT BY的结果是一样的:

hive>setmapred.reduce.tasks=1;

hive>select*fromlxw1234_com sort byid;

1

2

3

5

6

8

9

真实业务环境中,我们的需求大多需要使用ORDER BY全局排序来完成。

8.3 DISTRIBUTE BY和CLUSTER BY

distribute by:按照指定的字段或表达式对数据进行划分,输出到对应的Reduce或者文件中。

cluster by:除了兼具distribute by的功能,还兼具sort by的排序功能。

##distribute by

hive>setmapred.reduce.tasks=2;

hive>INSERT overwrite LOCAL directory '/tmp/lxw1234/'

SELECT id FROM lxw1234_com

distribute BY id;

执行后在本地的/tmp/lxw1234目录中生成了000000_0和000001_0两个文件:

cat 000000_0

8

2

6

cat 000001_0 ##id%2=1的记录

1

9

3

5

##cluster by

hive>setmapred.reduce.tasks=2;

hive>INSERT overwrite LOCAL directory '/tmp/lxw1234/'

SELECT id FROM lxw1234_com

CLUSTER BY id;

cat 000000_0

2

6

8

cat 000001_0

1

3

5

9

注意:使用cluster by之后,每个文件中的id都进行了排序,而distribute by没有。

8.4 子查询

子查询和标准SQL中的子查询语法和用法基本一致,需要注意的是,Hive中如果是从一个子查询进行SELECT查询,那么子查询必须设置一个别名。

SELECT col

FROM (

SELECT a+b AS col

FROM t1

)t2

另外,从Hive0.13开始,在WHERE子句中也支持子查询,比如:

SELECT *

FROM A

WHERE A.a IN (SELECT foo FROM B);

SELECT A

FROM T1

WHERE EXISTS (SELECT B FROM T2 WHERE T1.X =T2.Y)

还有一种将子查询作为一个表的语法,叫做Common Table Expression(CTE):

withq1 as(select*fromsrc wherekey='5'),

q2 as(select*fromsrc s2 wherekey ='4')

select*fromq1 unionall select*fromq2;

withq1 as(selectkey,value fromsrc wherekey ='5')

fromq1

insert overwrite table s1

select*;

8.5 虚拟列

Hive查询中有两个虚拟列:

INPUT__FILE__NAME:数据对应的HDFS文件名;

BLOCK__OFFSET__INSIDE__FILE:该行记录在文件中的偏移量;

hive>selectid,INPUT__FILE__NAME,BLOCK__OFFSET__INSIDE__FILE fromlxw1234_com;

5hdfs://cdh5/tmp/lxw1234/1.txt 0

3hdfs://cdh5/tmp/lxw1234/1.txt 2

6hdfs://cdh5/tmp/lxw1234/1.txt 4

2hdfs://cdh5/tmp/lxw1234/1.txt 6

9hdfs://cdh5/tmp/lxw1234/1.txt 8

8hdfs://cdh5/tmp/lxw1234/1.txt 10

1hdfs://cdh5/tmp/lxw1234/1.txt 12

hive的条件查询语句_[一起学Hive]之九-Hive的查询语句SELECT相关推荐

  1. select计数语句_从零开始学 MySQL SELECT 语句详解

    阅读本文大概需要 7 分钟 前言上篇文章我们学习了 MySQL 的五种约束,今天这篇文章我们来学习下 SELECT 语句.在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.在 ...

  2. hive的hql怎么运行_在Ubuntu上安装Apache Hive并运行HQL查询

    hive的hql怎么运行 In this lesson, we will see how we can get started with Apache Hive by installing it on ...

  3. mysql的经典sql语句大全_重学大学计算机教程--mysql 经典sql语句大全

    SQL 语句分类 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义.常用的语句关键字主要包括 crea ...

  4. mysql模糊查询单词_你知道什么是 MySQL 的模糊查询?

    原标题:你知道什么是 MySQL 的模糊查询? 作者 | luanhz 责编 | 郭芮 本文对MySQL中几种常用的模糊搜索方式进行了介绍,包括LIKE通配符.RegExp正则匹配.内置字符串函数以及 ...

  5. mysql插入栏位语句_情人节福利,手把手教你学会mysql语句操作

    情人节福利,手把手教你学会mysql语句操作 一起来 日常学python 进入正题 mysql语句分为两种,一种是DDL,就是数据定义语句,比如那些CREATE,ALTER.另一种是DML,就是数据管 ...

  6. 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询

    本文分为如下六部分: 基本查询语句 指定查询条件 注释和SQL语句注意事项 运算符 字符串模糊查询 练习 所用数据表请参见前文: 陈策:<从零学会SQL:入门>第一关 入门​zhuanla ...

  7. mysql高效sql语句_高效SQL优化 非常好用的SQL语句优化34条

    高效SQL优化 非常好用的SQL语句优化34条 相关软件相关文章发表评论 来源:2011/2/13 9:38:43字体大小: 作者:佚名点击:576次评论:0次标签: 类型:电子教程大小:8.5M语言 ...

  8. php中mysql查询条件为数组_请教php中数组做为mysql查询条件wherexxinarray,怎么处理...

    原先想着把数组 $customerid 拆分出来,判断长度给不同的变量,变量多少还要再判断,然后写 下边的mysql查询,有些麻烦,请教有没有好的方法,谢了! -------------------- ...

  9. excel中如何动态地创建控件以显示查询结果_一起学Excel专业开发02:专家眼中的Excel及其用户...

    学习Excel技术,关注微信公众号: excelperfect 对于大多数人来说,使用Excel来做的工作就是在单元格中输入数据,进行一些格式化制作成报表输出,在这个过程中,可能会使用一些公式,可能会 ...

最新文章

  1. mysql sql文件太大_MySQL导入的sql脚本文件过大解决方案
  2. 如何检测过期的统计信息(转)
  3. 深入理解Linux内核之主调度器
  4. 爆牙齿的世界杯日记(阿根疼啦)
  5. ZOJ -3203 三分+数学
  6. 编写一个程序,找出数组中元素的最大值,要求用到成员函数。
  7. python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码
  8. Learning Spark中文版--第三章--RDD编程(1)
  9. Java 对 lang3中Complex类的封装,使之支持BigDecimal
  10. python全栈 操作系统
  11. Windows下安装和配置Kibana
  12. 从应用层修改系统日期和时间
  13. maven jersey mysql_Maven和Jersey Framework开发REST风格Web Service
  14. php 预缓存,Steam更新着色器预缓存新功能,OpenGl、Vulkan硬件收效良多
  15. 高等数学(预备知识之两角和差、二倍角与半角公式)
  16. [Luogu P3164] [BZOJ 3503] [CQOI2014]和谐矩阵
  17. 计算机伦理学理论分析三大思想,医学伦理学的基本理论
  18. 【Java 数据结构】Map和Set
  19. amazon - amzreport 之 amazon report list
  20. python怎么表白源码_Python浪漫表白源码(附带详细教程)-Go语言中文社区

热门文章

  1. adb shell dumpsys 命令 查看内存
  2. Linux查看某个进程的线程
  3. bochs调试方法与指令详解
  4. nbns协议_网络协议详解1 - NBNS
  5. 360视域分析 cesium_Cesium-空间分析之通视分析(附源码下载)
  6. json_decode的结果为null,json_encode的结果为
  7. python【蓝桥杯vip练习题库】ADV-288成绩排名
  8. 【Network Security!】NTFS安全权限(看不懂你来打我)
  9. Python中的排序sorted(d.items(), key=lambda x: x[1])
  10. apt-get需要安装mysql_ubuntu apt-get安装mysql失败-问答-阿里云开发者社区-阿里云