内部分区表——头歌
分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。为了完成本关任务,你需要掌握: 1.内部分区表的创建 2.增加与删除分区 2.相关表的操作。注意:分区字段不能是表中已经存在的数据,可以将分区字段看作表的伪列。本关任务:根据相关知识内容实现 Hive 内部分区表的操作。子句指定
任务描述
本关任务:根据相关知识内容实现 Hive 内部分区表的操作。
相关知识
为了完成本关任务,你需要掌握: 1.内部分区表的创建 2.增加与删除分区 2.相关表的操作
分区表概述
分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。这样就能使查询效率提升许多,并且便于对数据进行管理。
创建内部分区表
通过PARTITIONED BY子句指定,分区的顺序决定了谁是父目录,谁是子目录。
注意:分区字段不能是表中已经存在的数据,可以将分区字段看作表的伪列。
- 单分区创建
CREATE TABLE IF NOT EXISTS part_test1(id int,name string)PARTITIONED BY (year string) ## 分区ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' ## 列分隔符STORED AS TEXTFILE; ## 存储类型
- 多分区创建
CREATE TABLE IF NOT EXISTS part_test2(id int,name string)PARTITIONED BY (month string,day string) ## 分区ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' ## 列分隔符STORED AS TEXTFILE; ## 存储类型
加载数据到分区表中
通过load加载将本地的/root/test.txt文本数据加载到part_test1表中,并且指定partition分区字段year为2022。
- load 加载
load data local inpath '/root/test.txt' into table part_test1 partition(year='2022');
增加分区
通过add partition的方式添加新的分区。
- 创建单个分区
alter table part_test2 add partition(month='202203',day='20220301');
- 同时创建多个分区
alter table part_test1 add partition(year='2021') partition(year='2022');
删除分区
通过drop partition的方式删除分区。
- 创建单个分区
alter table part_test2 drop partition(month='202203',day='20220301');
- 同时创建多个分区
alter table part_test1 drop partition(year='2021') partition(year='2022');
查看分区表分区
通过show partitions查看part_test1表的分区情况
show partitions part_test1;
编程要求
请根据右侧命令行内的提示,在Begin - End区域内进行sql语句代码补充,具体任务如下:
-
创建内部分区表:
student;设置分区字段为month,类型为string -
加载表数据时指定分区为
2022-03 -
同时创建
student表的两个新分区:2022-04,2022-05 -
删除分区:
2022-04 -
查看
student表的分区情况 -
查询
student表数据
student表结构:
| INFO | TYPE |
|---|---|
| id | int |
| name | string |
| age | int |
| sex | string |
部分数据如下:
202201,Anne,18,female202202,Tom,20,male202203,Jack,19,male
数据切分方式:逗号(,)
数据所在目录:/root/student.txt
测试说明
平台会对你编写的代码进行测试:
预期输出:
month=2022-03month=2022-05202201 Anne 18 female 2022-03202202 Tom 20 male 2022-03202203 Jack 19 male 2022-03202204 xiaoming 20 male 2022-03202205 anni 19 female 2022-03
开始你的任务吧,祝你成功!
代码如下:
---创建mydb数据库
create database if not exists mydb;
---使用mydb数据库
use mydb;
---------- Begin ----------
---创建student内部分区表
CREATE TABLE IF NOT EXISTS student(
id int,
name string,
age int,
sex string
)
PARTITIONED BY (month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
---导入数据:/root/student.txt
load data local inpath '/root/student.txt' into table student partition(month='2022-03');
---同时创建student表的两个新分区
alter table student add partition(month='2022-04') partition(month='2022-05');
---删除student表的分区
alter table student drop partition(month='2022-04');
---查看student表分区情况
show partitions student;
---查询student表数据
select * from student;
---------- End ----------
---清空student表
truncate table student;
---删除student表
drop table student;
更多推荐

所有评论(0)