向Hive中的外部表添加分区后,如何更新/删除它?
您可以通过以下方式更新 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);
此外,您可以从一条语句中删除多个分区(在 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);
Alter table table_name drop partition (partition_name='value');
您可以将文件复制到外部分区所在的文件夹中或使用
INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...
声明。
您可能还需要使包含表的数据库处于活动状态
use [dbname]
否则你可能会得到错误(即使你指定数据库,即 dbname.table )
FAILED 执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。无法更改分区。无法更改分区,因为表或数据库不存在。
除了这篇文章中的其他答案之外,对于
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 日到当前日期的所有分区。