作者:无期的囚禁_918 | 来源:互联网 | 2023-09-24 08:37
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;
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);