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 按字母排序

使用 Hive/Hadoop 加入两个排序的文件

Hive学习 排序:order bysort bydistribute bycluster by

hive排序

Flutter & Hive - 如何在 Hive 中保存重新排序的列表

[Hive_9] Hive 的排序