在将分区添加到 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);
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);
INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...
语句。use [dbname]
否则您可能会遇到错误(即使指定了数据库,例如:dbname.table)
执行失败错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。无法更改分区。无法更改分区,因为表或数据库不存在。
spark.sql()
中执行相同的操作?因为它只支持一次性执行一个命令(而且spark.sql("use <schema>")
后跟着spark.sql("alter table ...")
不起作用,特别是在你想要更改分区格式的情况下,这是不允许添加分区的。 - MarcusALTER 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日到当前日期的所有分区。