hive的条件查询语句_[一起学Hive]之九-Hive的查询语句SELECT
关键字: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相关推荐
- select计数语句_从零开始学 MySQL SELECT 语句详解
阅读本文大概需要 7 分钟 前言上篇文章我们学习了 MySQL 的五种约束,今天这篇文章我们来学习下 SELECT 语句.在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句.在 ...
- 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 ...
- mysql的经典sql语句大全_重学大学计算机教程--mysql 经典sql语句大全
SQL 语句分类 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义.常用的语句关键字主要包括 crea ...
- mysql模糊查询单词_你知道什么是 MySQL 的模糊查询?
原标题:你知道什么是 MySQL 的模糊查询? 作者 | luanhz 责编 | 郭芮 本文对MySQL中几种常用的模糊搜索方式进行了介绍,包括LIKE通配符.RegExp正则匹配.内置字符串函数以及 ...
- mysql插入栏位语句_情人节福利,手把手教你学会mysql语句操作
情人节福利,手把手教你学会mysql语句操作 一起来 日常学python 进入正题 mysql语句分为两种,一种是DDL,就是数据定义语句,比如那些CREATE,ALTER.另一种是DML,就是数据管 ...
- 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询
本文分为如下六部分: 基本查询语句 指定查询条件 注释和SQL语句注意事项 运算符 字符串模糊查询 练习 所用数据表请参见前文: 陈策:<从零学会SQL:入门>第一关 入门zhuanla ...
- mysql高效sql语句_高效SQL优化 非常好用的SQL语句优化34条
高效SQL优化 非常好用的SQL语句优化34条 相关软件相关文章发表评论 来源:2011/2/13 9:38:43字体大小: 作者:佚名点击:576次评论:0次标签: 类型:电子教程大小:8.5M语言 ...
- php中mysql查询条件为数组_请教php中数组做为mysql查询条件wherexxinarray,怎么处理...
原先想着把数组 $customerid 拆分出来,判断长度给不同的变量,变量多少还要再判断,然后写 下边的mysql查询,有些麻烦,请教有没有好的方法,谢了! -------------------- ...
- excel中如何动态地创建控件以显示查询结果_一起学Excel专业开发02:专家眼中的Excel及其用户...
学习Excel技术,关注微信公众号: excelperfect 对于大多数人来说,使用Excel来做的工作就是在单元格中输入数据,进行一些格式化制作成报表输出,在这个过程中,可能会使用一些公式,可能会 ...
最新文章
- mysql sql文件太大_MySQL导入的sql脚本文件过大解决方案
- 如何检测过期的统计信息(转)
- 深入理解Linux内核之主调度器
- 爆牙齿的世界杯日记(阿根疼啦)
- ZOJ -3203 三分+数学
- 编写一个程序,找出数组中元素的最大值,要求用到成员函数。
- python支持向量机分类器怎么用_可视化SVM分类器开源实现的python代码
- Learning Spark中文版--第三章--RDD编程(1)
- Java 对 lang3中Complex类的封装,使之支持BigDecimal
- python全栈 操作系统
- Windows下安装和配置Kibana
- 从应用层修改系统日期和时间
- maven jersey mysql_Maven和Jersey Framework开发REST风格Web Service
- php 预缓存,Steam更新着色器预缓存新功能,OpenGl、Vulkan硬件收效良多
- 高等数学(预备知识之两角和差、二倍角与半角公式)
- [Luogu P3164] [BZOJ 3503] [CQOI2014]和谐矩阵
- 计算机伦理学理论分析三大思想,医学伦理学的基本理论
- 【Java 数据结构】Map和Set
- amazon - amzreport 之 amazon report list
- python怎么表白源码_Python浪漫表白源码(附带详细教程)-Go语言中文社区
热门文章
- adb shell dumpsys 命令 查看内存
- Linux查看某个进程的线程
- bochs调试方法与指令详解
- nbns协议_网络协议详解1 - NBNS
- 360视域分析 cesium_Cesium-空间分析之通视分析(附源码下载)
- json_decode的结果为null,json_encode的结果为
- python【蓝桥杯vip练习题库】ADV-288成绩排名
- 【Network Security!】NTFS安全权限(看不懂你来打我)
- Python中的排序sorted(d.items(), key=lambda x: x[1])
- apt-get需要安装mysql_ubuntu apt-get安装mysql失败-问答-阿里云开发者社区-阿里云