分桶技术
分区不能细粒度的划分数据时
CLUSTERED BY (COLUMN_NAME)
[SORTED BY COLUMN_NAME ASC|DESC] INTO 4 BUCKETS
分桶关键字
bucket
默认采用对分桶字段进行hash值%总桶数的余数就是分桶数
分桶的意义
1.为了保存分桶查询结果的分桶结构(数据已经按照分桶字段进行了hash散列)
2.分桶的应用场景:数据抽样和join时可以提高MR的执行效率
创建表
create table if not exists buc1(
uid int,
uname string,
uage int
)
clustered by (uid) into 4 buckets
row format delimited
fields terminated by ","
;
load数据
load data local inpath "/home/hdfs/data.txt" into table buc1;
设置参数
set hive.enforce.bucketing=true;
set hive.exec.mode.local.auto=true;
set mapreduce.job.reduces=4;
查询数据
select *from buc1 where uage>22
cluster by(uid);
查询结果
uid%分桶数(4)
4和8在一起
1和5在一起
2和6在一起
3和7在一起
OK
buc1.uid buc1.uname buc1.uage
4 guofucheng 43
8 jingshijia 32
1 liudehua 50
5 caixukun 25
2 liming 40
6 xiaojinteng 27
3 zhangxueyou 41
7 guanxiaotong 24
Time taken: 322.482 seconds, Fetched: 8 row(s)