首先创建普通内表:
create table u(
id int,
name string,
age int)
row format delimited fields terminated by ',';
创建桶表(可以大大优化查询的速度):
create table tu(
id int,
name string,
age int)
partitioned by (timeflag bigint)
clustered by (id) sorted by (age) into 4 buckets
row format delimited fields terminated by ',';
上述代码,是将数据按照id的hash值分成4个桶,每个桶中按照age升序排序。
向桶表插入数据:
1. 方法一
set mapred.reduce.tasks=4;
insert overwrite table tu partition(timeflag=130732)
select id,name,age from u distribute by id sort by age; //按id分组放入同一个文件中,且每个文件按照age升序,可以指定其他的列排序
2. 方法二(推荐)
set hive.enforce.bucketing=true;
set hive.enforce.sorting=true;
insert overwrite table tu partition(timeflag=130734)
select id,name,age from u; // 数据分桶且有序