Hive的排序
Posted 蓝小冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive的排序相关的知识,希望对你有一定的参考价值。
# Hive 的排序方式有四种:
sort by,order by,distribute by,cluster by
# Hive的四种排序方式的区别:
order by和SQL语句中是一样的。会对查询结果执行一个全局的排序,这就意味着最后所有的数据会汇聚到一个reduce上进行处理的过程,若数据量非常大,则这个过程会很漫长。
sort by,它只会在每个reduce中对数据进行排序,也就是局部的排序,可以保证每个reduce的输出数据是有序的(并不是全局有序),这样可以提高后面全局排序的效率。
使用sort by可以指定reduce的个数,(set mapred,reduce.tasks=num),对输出的数据在执行全局排序,既可以得到全部结果。
distribute by :sort by为每个reduce产生一个排序文件,在有些情况下,你需要控制某个特定的行到那个reducer,通常为了后面的聚集操作。Hive的distribute by 就派上了用处。
select year,temp
from table
distribute by year
sort by year asc,temp desc;
上面实现了局部排序,且规定了根据年份和气温对气象数据进行排序,以确保所有具有相同年份的行到一个reducer分区中,可以看出distribute by经常和sort by 一起使用。
需要注意的是,hive要求distribute by要写在sort by之前。
cluster by:cluster by column=distribute by column +sort by column
# Hive实现全局排序:
1.使用order by 但是这样默认了reduce的个数为1+,效率低。
2.使用sort by + order by ,sort by 会保证每个reduce上的输出文件是有序的,想要实现全局排序还要加上order by的过程,就是对sort by的输出结果在进行一次排序,sort by可以设置reducer的个数。
以上是关于Hive的排序的主要内容,如果未能解决你的问题,请参考以下文章
Hive学习 排序:order bysort bydistribute bycluster by