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

1. order by

Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer)。但是对于大量数据这将会消耗很长的时间去执行。

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

2. sort by

Hive中指定了sort by,那么在每个reducer端都会做排序,也就是说保证了局部有序(每个reducer出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer),好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序了)。

3. distribute by和sort by一起使用

ditribute by是控制map的输出在reducer是如何划分的,举个例子,我们有一张表,mid是指这个store所属的商户,money是这个商户的盈利,name是这个store的名字

store:

mid money name
AA 15.0 商店1
AA 20.0 商店2
BB 22.0 商店3
CC 44.0 商店4

执行hive语句:

[delphi] view plain copy

  1. select mid, money, name from store distribute by mid sort by mid asc, money asc

我们所有的mid相同的数据会被送到同一个reducer去处理,这就是因为指定了distribute by mid,这样的话就可以统计出每个商户中各个商店盈利的排序了(这个肯定是全局有序的,因为相同的商户会放到同一个reducer去处理)。这里需要注意的是distribute by必须要写在sort by之前。

4. cluster by

cluster by的功能就是distribute by和sort by相结合,如下2个语句是等价的:

[sql] view plain copy

  1. select mid, money, name from store cluster by mid

[sql] view plain copy

  1. select mid, money, name from store distribute by mid sort by mid

如果需要获得与3中语句一样的效果:

[sql] view plain copy

  1. select mid, money, name from store cluster by mid sort by money

注意被cluster by指定的列只能是降序,不能指定asc和desc。

转自:http://blog.csdn.net/jthink_/article/details/38903775

时间: 2024-10-06 20:25:35

hive中order by,sort by, distribute by, cluster by作用以及用法的相关文章

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

1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数据多少,不管文件多少,都启用一个reduce进行处理.如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输

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

order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规模较大时,需要较长的计算时间. set hive.mapred.mode=nonstrict; (default value / 默认值) set hive.mapred.mode=strict; order by 和数据库中的Order by 功能一致,按照某一项 & 几项 排序输出. 与数据库中 order by 的区别在于在hive.

hive 排序 order by sort by distribute by cluster by

order by: order by是全局排序,受hive.mapred.mode的影响. 使用orderby有一些限制: 1.在严格模式下(hive.mapred.mode=strict),orderby必须跟limit一起使用(?). 原因:在执行orderby时,hive使用一个reducer,如果查询结果量很大,这个reducer执行起来会很费劲,所以必须要限制查询输出结果的数量. limit n 之后,reducer处理的数据有n * count(map)条数据. 2.在非严格模式下(

hive中order by,distribute by,sort by,cluster by

order by,distribute by,sort by,cluster by  查询使用说明 // 根据年份和气温对气象数据进行排序,以确保所有具有相同年份的行最终都在一个reducer分区中 // 一个reduce(海量数据,速度很慢) select year, temperature order by year asc, temperature desc limit 100; // 多个reduce(海量数据,速度很快) select year, temperature distrib

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

hive中order by.distribute by.sort by和cluster by的区别和联系 order by order by 会对数据进行全局排序,和oracle和mysql等数据库中的order by 效果一样,它只在一个reduce中进行所以数据量特别大的时候效率非常低. 而且当设置 :set hive.mapred.mode=strict的时候不指定limit,执行select会报错,如下: LIMIT must also be specified. sort by sor

【转】python中List的sort方法(或者sorted内建函数)的用法

原始出处:http://gaopenghigh.iteye.com/blog/1483864 python列表排序 简单记一下python中List的sort方法(或者sorted内建函数)的用法. 关键字: python列表排序 python字典排序 sorted List的元素可以是各种东西,字符串,字典,自己定义的类等. sorted函数用法如下: Python代码   sorted(data, cmp=None, key=None, reverse=False) 其中,data是待排序数

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

一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间.关于order by的详细介绍请参考这篇文章:Hive Order by操作. 二:sort by sort by不是全局排序,其在数据进入reducer前完成排序,因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1,则sort by只会保证每个reducer的输出有

hive order by sort by distribute by和sort by一起使用 cluster by

1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer).但是对于大量数据这将会消耗很长的时间去执行. 这里跟传统的sql还有一点区别:如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来

[转]hive中order by,distribute by,sort by,cluster by

转至http://my.oschina.net/repine/blog/296562 order by,distribute by,sort by,cluster by  查询使用说明 1 2 3 4 5 6 7 8 9 10 11 12 13 // 根据年份和气温对气象数据进行排序,以确保所有具有相同年份的行最终都在一个reducer分区中 // 一个reduce(海量数据,速度很慢) select year, temperature order by year asc, temperatur