hive 查询语法

select [all | distinct] select_ condition, select_ condition
from table_name a
[join table_other b on a.id=b.id]
[where wehre_condition]
[group by col_list [having condition]]
[cluster by col_list | [distribute by col_list] [sort by col_list | order by col_list]]
[limit number]

准备数据:

create table if not exists stu_test(id int,name string,sex string,age int)
row format delimited fields terminated by ','
; 
insert into stu_test values
(1,'zs','m',18)
,(2,'ls','m',19)
,(3,'ww','m',20)
,(4,'zq','f',18)
,(5,'ll','f',21)
,(6,'hl','f',19)
,(7,'xh','f',20)
,(8,'cl','f',22)
,(9,'fj','m',19)
,(10,'wb','m',23)
,(11,'wf','f',24)
,(12,'jj','m',21)
,(13,'yy','m',20)
,(14,'ld','f',18)
,(15,'ch','f',22)
;

1.order by col_list:

排序 全局排序 默认为升序asc ,因此只有一个reducer,只有一个reduce task的结果,
比如文件名是000000_0,会导致当输入规模较大时,需要较长的计算时间。

如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。

例如:stu:按照年龄排序

select * from stu_test order by age desc;

结果:

id name sex age
11 wf f 24
10 wb m 23
15 ch f 22
8 cl f 22
5 ll f 21
12 jj m 21
13 yy m 20
7 xh f 20
3 ww m 20
9 fj m 19
6 hl f 19
2 ls m 19
14 ld f 18
1 zs m 18
4 zq f 18

2.sort by col_list :

局部排序,其在数据进入reducer前完成排序。因此,如果用sort by 进行排序,并且设置mapred.reduce.tasks>1,
则sort by 只保证每个reducer的输出有序,不保证全局排序。
在每一个reducetask中,每一个小的输出结果排序,但是当reducetask的个数为1的话和order by 的排序结果一致
注意:sort by 指定的字段仅仅是用于排序的字段,不用于分reducetask输出结果,最终的输出文件中的结果是随机生成的

select * from stu_test sort by age desc;

结果:

id name sex age
11 wf f 24
10 wb m 23
15 ch f 22
8 cl f 22
5 ll f 21
12 jj m 21
13 yy m 20
7 xh f 20
3 ww m 20
9 fj m 19
6 hl f 19
2 ls m 19
14 ld f 18
1 zs m 18
4 zq f 18

正常(set mapreduce.job.reduces=1)结果和sort by 的结果一致
如果设置reduce task 个数为3的话: set mapreduce.job.reduces=3,此时不一致

set mapreduce.job.reduces=3
select * from stu_test sort by age desc;

结果:

id name sex age
10 wb m 23
15 ch f 22
8 cl f 22
5 ll f 21
7 xh f 20
9 fj m 19
6 hl f 19 11 wf f 24
12 jj m 21
3 ww m 20
2 ls m 19
14 ld f 18
4 zq f 18 13 yy m 20
1 zs m 18

随机生成3个文件,然后在每个文件中进行排序。

3.distribute by col_list:

根据指定的字段将数据分到不同的reducer,且分发算法是hash散列
类似于分桶的概念 按照指定的distribute by 字段和 设置的reducetask的个数进行取余分组,但是并没有排序,只是分,没有排序
select * from stu_test distribute by age desc; 错误,不能使用desc,因为它不是排序的意思

set mapreduce.job.reduces=3
select * from stu_test distribute by age;

结果:

id name sex age
000000_0 age%3=0
14 ld f 18
1 zs m 18
4 zq f 18
12 jj m 21
11 wf f 24
5 ll f 21
000000_1 age%3=1
15 ch f 22
9 fj m 19
6 hl f 19
2 ls m 19
8 cl f 22
000000_1 age%3=2
13 yy m 20
7 xh f 20
3 ww m 20
10 wb m 23
set mapreduce.job.reduces=2

select * from stu_test distribute by age;  

结果:

000000_0 age%2=0
15 ch f 22
14 ld f 18
13 yy m 20
11 wf f 24
8 cl f 22
7 xh f 20
4 zq f 18
3 ww m 20
1 zs m 18
000000_0 age%2=1
12 jj m 21
6 hl f 19
10 wb m 23
9 fj m 19
5 ll f 21
2 ls m 19

4.cluster by col_list :

除了具有distribute by 的功能外,还会对该字段进行排序
cluster by = distribute by+sort by
cluster by id = distribute by id +sort by id
注意:1)cluster by 和sort by 不可以同时使用
2)当分组字段和排序字段是同一个字段的时候 cluster by id = distribute by id +sort by id
不是同一个字段的时候 请不要使用 cluster by id

select * from stu_test cluster by age;  

结果:

id name sex age
000000_0 age%3=0
14 ld f 18
4 zq f 18
1 zs m 18
12 jj m 21
5 ll f 21
11 wf f 24
000000_1 age%3=1
6 hl f 19
2 ls m 19
9 fj m 19
15 ch f 22
8 cl f 22
000000_1 age%3=2
3 ww m 20
13 yy m 20
7 xh f 20
10 wb m 23

  

 

 

  

hive中order by ,sort by ,distribute by, cluster by 的区别(**很详细**)的更多相关文章

  1. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  2. [转载]hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  3. hive中order by,sort by, distribute by, cluster by的用法

    1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数 ...

  4. hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序) 只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set ...

  5. hive 排序 order by sort by distribute by cluster by

    order by:     order by是全局排序,受hive.mapred.mode的影响.       使用orderby有一些限制:     1.在严格模式下(hive.mapred.mod ...

  6. hive中order by、distribute by、sort by和cluster by的区别和联系

    hive中order by.distribute by.sort by和cluster by的区别和联系 order by order by 会对数据进行全局排序,和oracle和mysql等数据库中 ...

  7. Hive中order by,sort by,distribute by,cluster by的区别

    一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间.关于 ...

  8. Hadoop Hive 中的排序 Order by ,Sort by ,Distribute by以及 Cluster By

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set h ...

  9. [大数据相关] Hive中的全排序:order by,sort by, distribute by

    写mapreduce程序时,如果reduce个数>1,想要实现全排序需要控制好map的输出,详见Hadoop简单实现全排序. 现在学了hive,写sql大家都很熟悉,如果一个order by解决 ...

随机推荐

  1. (Java实现) 洛谷 P1387 最大正方形

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  2. Java实现 LeetCode 686 重复叠加字符串匹配

    686. 重复叠加字符串匹配 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd&q ...

  3. Java实现 LeetCode 672 灯泡开关 Ⅱ(数学思路问题)

    672. 灯泡开关 Ⅱ 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮.在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2 ...

  4. Java实现 LeetCode 223 矩形面积

    223. 矩形面积 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. Rectangle Area 示例: 输入: -3, 0, 3, 4 ...

  5. Cookie默认不设置path时,哪些请求会携带cookie数据

    默认不设置path的时候,只会在请求和servlet同路径的情况下才会携带cookie中存储的数据,包含同级目录和下级目录 例如: 在http://localhost:8080/day01/test/ ...

  6. C#winform单线程事例与多线程事例

    通过例子编写,用winform编写的,讲解单线程与多线程使用,用于异步加载数据,界面不会卡死,数据在后台默认加载,给用户更好的体验.稍后会附加完整代码. 1.先不用线程,显示一个求和,计算过程中要停留 ...

  7. <VCC笔记>VCC简介与安装

    最近在学校跟着老师参与了一个代码验证的工作,需要使用Microsoft Research(微软学术)开发的VCC工具,是开源的,托管在Codeplex上.这东西英语资料极其少,中文资料基本没有.我只能 ...

  8. 跟着视频学python,Day1

    python介绍 发展史 安装 Hello World程序 变量 用户输入 模块初识 数据类型初识 条件表达式if...elif...else 循环表达式while 循环表达式for python介绍 ...

  9. 关于微信小程序的文档-手撸

    学习小程序的人如果有vue基础的话应该有很好的帮助作用.没有也关系,反正很简单. 首先理解一个完整的小程序app都有什么页面: pages页面放置所有的页面文件. 一个完整的小程序页面文件包括: in ...

  10. Nginx配置rewrite过程介绍

    创建rewrite语句 vi conf/vhost/www.abc.com.conf #vi编辑虚拟主机配置文件 文件内容 server { listen 80; server_name abc.co ...