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指定的列只能降序, 一般用于桶表。