如何更新/删除 Hive 分区?

问题描述 投票:0回答:6

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

hive hiveql
6个回答
186
投票

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

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

该命令不会移动旧数据,也不会删除旧数据。它只是将分区设置到新位置。

要删除分区,您可以这样做

ALTER TABLE logs DROP IF EXISTS PARTITION(year = 2012, month = 12, day = 18);

20
投票

此外,您可以从一条语句中删除多个分区(在 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

编辑1:

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

Alter table t 
drop partition (PART_COL>1);

6
投票
Alter table table_name drop partition (partition_name='value');

2
投票

您可以将文件复制到外部分区所在的文件夹中或使用

INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...

声明。


2
投票

您可能还需要使包含表的数据库处于活动状态

use [dbname]

否则你可能会得到错误(即使你指定数据库,即 dbname.table )

FAILED 执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。无法更改分区。无法更改分区,因为表或数据库不存在。


0
投票

除了这篇文章中的其他答案之外,对于

multiple partitions
,请执行以下操作

ALTER TABLE database.table_name DROP PARTITION (partition_column >= value);

数据库示例

employee
,表名
accounts
,分区列
event_date
,我们这样做:-

ALTER TABLE employee.accounts DROP PARTITION (event_date>='2023-02-25');

这将删除从 2023 年 2 月 25 日到当前日期的所有分区。

© www.soinside.com 2019 - 2024. All rights reserved.