1.load data [locall] inpath 'xxx' into table xxxxx
如果是本地路径,其实就是一次put上传操作
如果路径是HDFS,其实是一次mv操作
2.创建分区表partitioned by:字段不能和表中列的字段重复
3.创建分桶表cluster by:必须是表中的某列的字段
4.order by :相当于全排序,只有一个reducer
5.sort by:相当于部分排序,每个reducer内有序,利用该字段(key)排序,但是不一定按照该字段分区(key)。(可能使用了自定义排序类实现WritertableComparator)
6.distribute by:分区(概念上和分区好像都一样,都使用HashPartition,但是分桶还有抽样查询功能,分区和分桶其他区别笔者不知道,知道的网友可以交流下........)。同时这里按照某个字段(key,因为默认是HashPartition)分区,但是不一定按照该字段(key)排序。此外,当distribute by和sort by结合使用时并且使用的不是同一个key,则sort by 使用的自定义排序类实现WritertableComparator接口从而实现排序。
如下图按照最后一个字段分区,说明该字段是key(默认用的HashPartition),但是没有按照该key排序
7.cluster By
8 sort by 对应部分排序! 将数据根据设置的reduceTask数量,使用HashPartition进行分区!
对每个分区后的数据根据指定的字段进行排序!
排序: 当前的字段,在key中! 而且,在当前key的compareTo方法中,使用了当前字段进行比较!
分区: int xx=Partitioner.getPartition(key,value,numReduceTasks)
保证返回的0<=xx<numReduceTasks