Hive中order by,sort by,distribute by,Cluster by
order by
对数据进行全局排序, 只有一个reducer Task, 效率低
mysql中strict模式下, order by必须要有limit, 不然会拒绝执行. 对于分区表, 必须显示指定分区字段查询。
sort by
可以有多个reduce Task(以distribute by后的字段个数为准)
每个reduce Task内部数据有序, 但全局无序
distribute by
按照指定的字段对数据进行划分到不同的输出reduce文件中
distribute by相当于MR中的partitioner
distribute by通常和sort by连用: select * from logs distribute by date sort by te;
注意,Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。
Cluster by
如果sort by和distribute by中所有的列相同, 可以缩写为Cluster by以便同时指定两者所使用的列
注意被Cluster by指定的列只能降序, 一般用于桶表。