一、建表:分区分桶表,对日期分区,再对id分4个桶
create table t1(id int)
partitioned by (statis_date string)
clustered by(id)
into 4 buckets;
二、设置强制分桶
set hive.enforce.bucketing=true;
三、执行插入语句,插入1到8这几个id
insert into t1 partition(statis_date='20211101')
select * from (
select 1 id union all
select 2 id union all
select 3 id union all
select 4 id union all
select 5 id union all
select 6 id union all
select 7 id union all
select 8 id ) tmp
cluster by id;
四、效果
五、表抽样
-- 语法:
select columns from table tablesample(bucket x out of y on column);
-- x:表示从第几个分桶进行抽样
-- y:表示每隔几个分桶取一个分桶,必须为y的整数倍或者因子
例如下面从对表从桶1开始查,每次间隔1个桶,得到桶1和桶3的全部数据:
select id,statis_date from t1 tablesample(bucket 1 out of 2 on id);
六、作用
1、抽样查询
2、map-side join,两个对相同字段做了同样分桶规则的表关联,可以实现在map端join,提高效率。
3、控制文件数量