Hive的分桶表

如何使用分通表

1.创建带桶的table:

create table teacher(name string) clustered by (name) into 3 buckets row format delimited fields terminated by ' ';

2.开启分桶机制:

set hive.enforce.bucketing = true;

3.往表中插入数据:

insert overwrite table teacher select * from temp; //需要提前准备好temp,从temp查询数据写入到teacher

注意:teacher 是一个分桶表,对于分通表,不允许以外部文件方式导入数据,只能从另一张表数据导入。分桶表只能是内部表。

temp文件数据样例:
java zhang
web wang
java zhao
java qin
web liu
web zheng
ios li
linux chen
ios yang
ios duan
linux ma
linux xu
java wen
web wu
 

作用及原理

分桶的原理是根据指定的列的计算hash值模余分桶数量后将数据分开存放。方便数据抽样:select * from teacher tablesample(bucket 1 out 3 on name);

注:分桶语法----TABLESAMPLE(BUCKET x OUT OF y)  

y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。  例如:table总共分了3份,当y=3时,抽取(3/3)=1个bucket的数据,当y=6时,抽取(3/6)=1/2个bucket的数据。

x表示从哪个bucket开始抽取。

例如:table总bucket数为3,tablesample(bucket 3 out of 3),表示总共抽取(3/3=)1个bucket的数据,抽取第3个bucket的数据。再例如:table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。

查询第一个桶里数据,并返回一半数据:

select * from teacher tablesample(bucket 1 out of 6 on name);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值