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

sort by 是单独在各自的reduce中进行排序,所以并不能保证全局有序,一般和distribute by 一起执行,而且distribute by 要写在sort by前面。

如果mapred.reduce.tasks=1和order by效果一样,如果大于1会分成几个文件输出每个文件会按照指定的字段排序,而不保证全局有序。

sort by 不受 hive.mapred.mode 是否为strict ,nostrict 的影响。

distribute by

DISTRIBUTE BY 控制map 中的输出在 reducer 中是如何进行划分的。使用DISTRIBUTE BY 可以保证相同KEY的记录被划分到一个Reduce 中。

cluster by

distribute by 和 sort by 合用就相当于cluster by,但是cluster by 不能指定排序为asc或 desc 的规则,只能是升序排列。

原文地址:https://www.cnblogs.com/yjd_hycf_space/p/11140556.html

时间: 2024-10-10 06:20:58

hive中order by、distribute by、sort by和cluster by的区别和联系的相关文章

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

转至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

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来

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, 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 & distribute by & cluter by

我们应该都清楚order by 的含义: 根据某个字段对输出的数据排序,因为只有一个reducer,所以查询效率较慢. 那么hive中,另外两个排序,distribute by和cluster by的含义是什么呢? distribute by 分区排序 直接上例子,hive中有张工资表:salary,字段是部门id--department_id,姓名--name,薪水--salary department_id name salary 1 张三 3500 2 李一 2800 1 王五 5000

Hadoop Hive 中几种排序方法的区别与比较

Hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法 1. order by set hive.mapred.mode=nonstrict; (default value / 默认值) set hive.mapred.mode=strict; order by 和数据库中的Order by 功能一致,按照某一项 & 几项 排序输出. 与数据库中 order by 的区别在于在hive.mapred.mode = strict 模式下

Hive中的Order by与关系型数据库中的order by语句的异同点

在Hive中,ORDER BY语句是对查询结果集进行整体的排序,最终将会产生一个reducer进行全局的排序,达到的最终结果是和传统的关系型数据库是一样的. 在数据量非常大的时候,全局排序的单个reducer将会成为性能瓶颈,有可能由于数据量过大而跑不出来结果. Hive中可以设置hive.mapred.mode为strict严格模式,这时候,Hive要求用户必须对order by语句加上limit 条数限制,防止排序数据集过大导致性能瓶颈. 在这里我不提sort by ,distribute