实验4Hive分区表和桶表
实验目的及要求
-
了解Hive的基本操作。
-
了解Hive的分区表与桶表的区别。
-
掌握表中数据的导入和导出的方法。
实验系统环境及版本
-
Linux Ubuntu 20.04
-
JDK1.8
-
Hadoop3.1.0
-
MySQL8.0.28
-
Hive3.1.2
实验任务
-
表的创建、修改、删除。
-
表中数据的Hive表中数据的导入和导出。
-
表分区与桶表的创建、修改和删除。
实验内容及步骤
-
Hive分区表的操作
-
创建分区表。在Hive中创建一个分区表student,包含id和name两个字段,数据类型分别为Int和String;分区列为month,数据类型为String,以“\t”为分隔符。
create table student(id int,name string)
partitioned by (month string)
row format delimited fields terminated by ‘\t’;
查看表student结构:
desc student;
向分区表导入数据。在Hive中创建一个非分区表student_1,用于存储本地/opt/datas目录下student.txt文件中的数据:
create table student_1(id int,name string,month string)
row format delimited fields terminated by ‘\t’;
将本地/opt/datas目录下,student.txt中的数据导入student_1表中:
load data local inpath ‘/opt/datas/student.txt’ into table student_1;
再将表student_1中的数据导入分区表student中:
insert into table student partition(month=‘202108’) select id,name from student_1 where month=‘202108’;
导入数据完成后,用select语句查看结果:
select * from student where month=‘202108’;
查看表student中的分区:
show partitions student;
修改分区表,将分区表student中的分区列month=202108改为month=202107,并查看修改后的 分区名:
alter table student partition(month=‘202108’) rename to partition(month=‘202107’);
show partitions student;
3.创建二级分区表
创建二级分区表student2:
create table student2(id int,name string)
partitioned by (month string,day string)
row format delimited fields terminated by ‘\t’;
使用load向二级分区表student2导入数据:
load data local inpath ‘/opt/datas/student.txt’ overwrite into table student2 partition(month=‘202107’,day=‘17’);
4.Hive桶表的操作
创建桶表。创建一个名为student_b的表,包含两个字段id和name,数据类型分别为Int和String,按month进行分区,按name字段分桶和id字段排序,分成4个桶。
create table student_b(id int,name string)
partitioned by (month string)
clustered by(name)
sorted by (id)
into 4 buckets;
设置桶表属性:
set hive.enforce.bucketing=true;
向student_b桶表中导入student_1表中的数据:
insert overwrite table student_b partition(month=‘202106’) select id,name from student_1;
浏览HDFS的桶表student_b中的数据文件:
hdfs dfs -ls /user/hive/warehouse/student_b/month=202106
查看桶表数据:
select * from student_b;
查看桶1数据:
hdfs dfs -cat /user/hive/warehouse/student_b/month=202106/000000_0;
查看桶2数据:
hdfs dfs -cat /user/hive/warehouse/student_b/month=202106/000001_0