Hive - 通过返回未排序的结果进行聚类和排序

时间:2015-02-25 11:33:44

标签: sorting hive clustered-index buckets

我创建了一个带有存储桶的表,按照这样的方式进行聚类:

set hive.enforce.bucketing = true;
set mapred.reduce.tasks = 32;

create table my_table
(  
    a          string
   , b          string
   , c          int
)
clustered by (a, b) sorted by (a, b) into 32 buckets
row FORMAT delimited fields TERMINATED BY ','
stored AS parquet
tblproperties ('parquet.compress'='SNAPPY');

数据插入如下:

insert into table my_table select * from old_table;

当我查询时:

select * from my_table limit 100;

我得到了未分类的结果。这是否意味着表没有排序? 如果我将此表与ab上的其他表一起加入,那么此表上的合并联接是否会有效?

BDW: 当我查询old_table(插入到包含的分发和排序)时,如下所示:select * from old_table limit 100;我得到了排序结果

1 个答案:

答案 0 :(得分:0)

虽然您已将Hive设置为强制执行分段,但您还需要将Hive设置为在将数据插入新表之前强制执行排序," my_table"。试试这个:

hive.enforce.sorting=true;

然后你应该在新表中得到排序结果。