Hive如何分桶及抽样查询---知识详解+案例实操

Hive分桶表介绍 :分区针对的是数据的存储路径;分桶针对的是数据文件。分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区,特别是之前所提到过的要确定合适的划分大小这个疑虑。分桶是将数据集分解成更容易管理的若干部分的另一个技术。

1. 数据准备

分隔符为’\t’

1001	liubei
1002	zhangfei
1003	guanyu
1004	caocao
1005	machao
1006	huangzhong
1007	simayi
1008	zhugeliang
1009	zhouyu
1010	zhaoyun
1011	wuguo
1012	shuguo
1013	weiguo
1014	xichuan
1015	mahan
1016	zhaolong
2.创建student表

注意: 我们此时创建的是一张普通表

create table student(
id int,
name string)
row format delimited fields terminated by '\t';

在这里插入图片描述

3. 将数据导入到student表中
load data local inpath '/opt/bigdatacase/hive_data/student.txt' into table student;

在这里插入图片描述

4. 创建分桶表buck_stu
create table buck_stu(
id int,
name string
) clustered by(id) into 4 buckets
row format delimited fields terminated by '\t';
5. 配置相关设置
  • 开启分桶功能
set hive.enforce.bucketing=true;
  • 设置reducer的个数
set mapreduce.job.reduces=-1;
6. 向分桶表中导入数据

说明: 我们创建好分桶表之后不能直接使用load添加数据,添加数据过程要通过MR才能实现数据分桶。

insert into table buck_stu select id,name from student;

在这里插入图片描述
查看数据分桶情况:
在这里插入图片描述

7. 查询分桶表的数据
select id,name from buck_stu;

在这里插入图片描述

抽样查询

应用: 对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结果。Hive可以通过对表进行抽样来满足这个需求。

tablesample是抽样语句

  • 语法:TABLESAMPLE(BUCKET x OUT OF y)。

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

  • x表示从哪个bucket开始抽取,如果需要取多个分区,以后的分区号为当前分区号加上y。例如,table总bucket数为4,tablesample(bucket 1 out of 2),表示总共抽取(4/2=)2个bucket的数据,抽取第 1(x)个和第 3(x+y)个 bucket的数据

  • 注意:x的值必须小于等于y的值

  • 例子:从第一个桶开始抽,抽取1个桶的数据

select id,name from buck_stu tablesample(bucket 1 out of 4);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值