Hive中分桶表设置桶数但实际却未按桶数进行分文件存储问题解决

在创建Hive分桶表并设置桶数后,发现数据仅存储在一个文件中,未按桶数分文件。问题在于未设置hive.enforce.bucketing参数为true,这会导致桶的数量不正确。解决方案是插入数据前设置该参数,或者调整mapred.reduce.tasks,以确保reducer数目与桶数匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:创建分桶表时按字段id进行分桶,桶数为5,但实际在HDFS上存储却只有一个文件
建表语句:

create table bucket_test (
id bigint comment 'ID', 
name string comment '名字'
)
comment '分桶表测试'
clustered by(id) into 5 buckets
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;		
create table tmp_test (
id int comment 'ID', 
name string comment '名字'
)
comment '中间临时表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;

数据准备:
vim bucket_test.txt

1	diao1
2	diao2
3	diao3
4	diao4
5	diao5
6	diao6
7	diao7
8	diao8
9	diao9
10	diao10

加载数据:

load data local inpath '/opt/module/data/bucket_data.txt' into table tmp_test;

数据导入分桶表:

insert into bucket_test select * from tmp_test;

查看HDFS文件系统中存储形式:
在/user/hive/warehouse/video.db/test_bucket路径下只有一个文件,如下图
在这里插入图片描述
说明数据并未进行分桶。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值