任务描述

本关任务:根据相关知识内容实现 Hive 内部分区表的操作。

相关知识

为了完成本关任务,你需要掌握: 1.内部分区表的创建 2.增加与删除分区 2.相关表的操作

分区表概述

分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。这样就能使查询效率提升许多,并且便于对数据进行管理。

创建内部分区表

通过PARTITIONED BY子句指定,分区的顺序决定了谁是父目录,谁是子目录。

注意:分区字段不能是表中已经存在的数据,可以将分区字段看作表的伪列。

  • 单分区创建

  1. CREATE TABLE IF NOT EXISTS part_test1(
  2. id int,
  3. name string
  4. )
  5. PARTITIONED BY (year string) ## 分区
  6. ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' ## 列分隔符
  7. STORED AS TEXTFILE; ## 存储类型
  • 多分区创建

  1. CREATE TABLE IF NOT EXISTS part_test2(
  2. id int,
  3. name string
  4. )
  5. PARTITIONED BY (month string,day string) ## 分区
  6. ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' ## 列分隔符
  7. STORED AS TEXTFILE; ## 存储类型

加载数据到分区表中

通过load加载将本地的/root/test.txt文本数据加载到part_test1表中,并且指定partition分区字段year2022

  • load 加载

  1. load data local inpath '/root/test.txt' into table part_test1 partition(year='2022');

增加分区

通过add partition的方式添加新的分区。

  • 创建单个分区
    
      
    1. alter table part_test2 add partition(month='202203',day='20220301');
  • 同时创建多个分区
    
      
    1. alter table part_test1 add partition(year='2021') partition(year='2022');

删除分区

通过drop partition的方式删除分区。

  • 创建单个分区
    
      
    1. alter table part_test2 drop partition(month='202203',day='20220301');
  • 同时创建多个分区
    
      
    1. alter table part_test1 drop partition(year='2021') partition(year='2022');

查看分区表分区

通过show partitions查看part_test1表的分区情况


  1. show partitions part_test1;

编程要求

请根据右侧命令行内的提示,在Begin - End区域内进行sql语句代码补充,具体任务如下:

  • 创建内部分区表:student;设置分区字段为month,类型为string

  • 加载表数据时指定分区为2022-03

  • 同时创建student表的两个新分区:2022-042022-05

  • 删除分区:2022-04

  • 查看student表的分区情况

  • 查询student表数据

student表结构:

INFO TYPE
id int
name string
age int
sex string

部分数据如下:


  1. 202201,Anne,18,female
  2. 202202,Tom,20,male
  3. 202203,Jack,19,male

数据切分方式:逗号(,

数据所在目录:/root/student.txt

测试说明

平台会对你编写的代码进行测试:

预期输出:


  1. month=2022-03
  2. month=2022-05
  3. 202201 Anne 18 female 2022-03
  4. 202202 Tom 20 male 2022-03
  5. 202203 Jack 19 male 2022-03
  6. 202204 xiaoming 20 male 2022-03
  7. 202205 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;
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐