Hive-排序方式

order by

会对查询的结果做一次全局排序

所有的数据都会发送到同一个reducer进行处理,不管有多少map,也不管文件有多少block块,只会启动一个reducer,因为多个reducer无法保证全局有序

优点

全局有序

缺点

对大量数据进行排序耗时会比较长

sort by

会根据数据量的大小启动多个reducer进行排序,会保证每个reducer内有序

优点

执行了局部排序之后可以为全局排序提高不少效率

缺点

局部有序,如果只有一个reducer,则效果和order by一样

distribute by

有些情况下,我们需要控制某个特定行应该到哪个reducer,通常是为了进行后续的聚集操作。

distribute by类似MR中partition(自定义分区),进行分区,结合sort by使用

distribute by的分区规则是根据分区字段的hash码与reducer的个数取模,相同的分到一个区

distribute by语句要写在sort by语句之前

cluster by

cluster by是distribute by和sort by的结合