桶表
1)桶是更为细粒度的数据范围划分,它能使一些特定的查询效率更高
2)保存数据时,取分桶字段的哈希值,跟分桶数取余,然后将数据放到不同的桶(文件)里。
1、定义:
create table b1(id int, name string) clustered by (id) into 4 buckets;
2、加载数据:
1)使用load data 来加载数据,可以加载成功,也能查询到,但是没有分桶。
2)insert into b1 select .. ,调用mapreduce任务,对分桶字段进行计算,将数据分到不同的桶里。
3、桶表的两个应用场景:
1、join连接操作
如果两个表的桶划分一致,并且连接字段是分桶字段,可以提高连接的效率
2、抽样查询
select * from b1 tablesample(bucket 1 out of 4 on id);
抽样语法:
tablesample(bucket x out of y)
y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例(表的分桶总数/y)。例如,table总共分了64份,当y=32时,抽取 (64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。
x表示从哪个bucket开始抽取。例 如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。