如何更新/删除Hive分区?

dar*_*cyq 60 hive hiveql

将分区添加到Hive中外部表后,如何更新/删除它?

dar*_*cyq 144

您可以通过以下方式更新Hive分区:

ALTER TABLE logs PARTITION(year = 2012, month = 12, day = 18) 
SET LOCATION 'hdfs://user/darcy/logs/2012/12/18';
Run Code Online (Sandbox Code Playgroud)

此命令不会移动旧数据,也不会删除旧数据.它只是将分区设置为新位置.

要删除分区,您可以执行此操作

ALTER TABLE logs DROP IF EXISTS PARTITION(year = 2012, month = 12, day = 18);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

  • 仅供参考,对于 Spark SQL,这也无法更新现有分区的位置,主要是因为 Spark SQL API 不支持它。同样在 Hive CLI 中,您需要首先运行 `use <schema>`,否则它将失败并显示 `FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask。无法更改分区。无法更改分区,因为表或数据库不存在。`即使表确实存在。因此,如果表名称为“<schema>.<table>”,则在更改分区位置之前,必须先从 CLI 运行“use <schema>”。 (2认同)

小智 6

Alter table table_name drop partition (partition_name);
Run Code Online (Sandbox Code Playgroud)


F.L*_*scu 5

另外,您可以从一个语句删除多个分区(在Impala / Hive中删除多个分区)。

从上面的链接中提取:

hive> alter table t drop if exists partition (p=1),partition (p=2),partition(p=3);
Dropped the partition p=1
Dropped the partition p=2
Dropped the partition p=3
OK
Run Code Online (Sandbox Code Playgroud)

编辑1:

另外,您可以使用条件符号(>,<,<>)来批量删除,例如:

Alter table t 
drop partition (PART_COL>1);
Run Code Online (Sandbox Code Playgroud)