删除分区
功能描述
删除分区表的一个或多个分区。管理表和OBS表均支持使用本命令删除分区。对于OBS表,还可以使用指定筛选条件删除分区按条件批量删除。
语法格式
ALTER TABLE [db_name.]table_name DROP [IF EXISTS] PARTITION partition_spec1 [, PARTITION partition_spec2, ...];
参数说明
| 参数 | 描述 |
|---|---|
| db_name | 可选。数据库名称,由字母、数字和下划线(_)组成。不能是纯数字,且不能以下划线开头。 |
| table_name | 表名称,由字母、数字和下划线(_)组成。不能是纯数字,且不能以下划线开头。匹配规则为:^(?!_)(?![0-9]+$)[A-Za-z0-9_$]*$。如果特殊字符需要使用单引号('')包围起来。 |
| IF EXISTS | 可选关键字。指定该关键字后,若分区不存在则不会报错,静默跳过。 |
| partition_spec | 分区规格,格式为 (col1=val1, col2=val2, ...)。若分区字段为多个字段,可以不包含所有的字段,会删除匹配上的所有分区。 |
注意事项
- 所要删除分区的表必须是已经存在的表,否则会出错。
- 所要删除的分区必须是已经存在的,否则会出错,可通过语句中添加 IF EXISTS 避免该错误。
- 对于OBS表,删除分区仅删除元数据,OBS目录中的数据文件不会自动删除。
示例1:删除指定分区
删除表 student 中 facultyNo=20, classNo=103 的分区。
ALTER TABLE student DROP PARTITION (facultyNo=20, classNo=103);
示例2:使用IF EXISTS删除分区
使用IF EXISTS避免分区不存在时报错。
ALTER TABLE student DROP IF EXISTS PARTITION (facultyNo=99, classNo=999);
示例3:同时删除多个分区
在一条语句中删除多个分区。
ALTER TABLE student DROP IF EXISTS PARTITION (facultyNo=99, classNo=999);
示例4:指定数据库的表删除分区
删除数据库 academy 中表 student 的分区。
ALTER TABLE academy.student DROP IF EXISTS PARTITION (facultyNo=20, classNo=103);