Loading

Hive 3.x 建表指定分桶,但load data后失效的原因

Hive 3.x 的 load data默认是会跑MR任务的,而不是单纯的移动文件。

  • hive版本:3.1.3
  • spark版本:3.3.1

1)建表语句

create table stu_buck(
    id int, 
    name string
)
clustered by(id) 
into 4 buckets
row format delimited fields terminated by '\t';

2)数据装载
(1)数据准备
在/opt/module/hive/datas/路径上创建student.txt文件,并输入如下内容。

1001	student1
1002	student2
1003	student3
1004	student4
1005	student5
1006	student6
1007	student7
1008	student8
1009	student9
1010	student10
1011	student11
1012	student12
1013	student13
1014	student14
1015	student15
1016	student16

(2)导入数据到分桶表中
说明:Hive新版本load数据可以直接跑MapReduce,老版的Hive需要将数据传到一张表里,再通过查询的方式导入到分桶表里面。

load data local inpath '/opt/module/hive/datas/student.txt' 
into table stu_buck;

(3)查看创建的分桶表中是否分成4个桶

理论结果:
第1个文件(000000_0)内容:

1016	student16
1012	student12
1008	student8
1004	student4

第2个文件(000001_0)内容:

1009	student9
1005	student5
1001	student1
1013	student13

第3个文件(000002_0)内容:

1010	student10
1002	student2
1006	student6
1014	student14

第4个文件(000003_0)内容:

1003	student3
1011	student11
1007	student7
1015	student15

但结果竟然是4个空文件,排查原因如下:

  1. 查看Hive执行引擎:
    SET hive.execution.engine;
    发现是spark,将执行引擎改回MR,问题解决。
    SET hive.execution.engine=mr;

补充: 如果要继续使用spark引擎,那么就必须先创建临时表,然后把数据load进临时表,然后再使用 insert into xxx select * from 临时表 ,结果也是4个文件,但文件内容跟MR引擎的不一样。

posted @ 2025-12-21 20:48  拾月凄辰  阅读(2)  评论(0)    收藏  举报