将分区添加到Hive中的外部表后,如何更新/删除它?
Answers:
您可以通过以下方式更新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);
您可以将文件复制到外部分区所在的文件夹中,也可以使用
INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...
声明。
您可能还需要使包含表的数据库处于活动状态
use [dbname]
否则,您可能会出错(即使您指定了数据库,即dbname.table)
FAILED Execution Error,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。无法更改分区。由于表或数据库不存在,因此无法更改分区。
spark.sql()
,该操作一次仅支持一个命令(spark.sql("use <schema>")
随后是spark.sql("alter table ...")
不起作用,尤其是在您想要更改添加中不允许的分区格式的情况下)分区
Alter table table_name drop partition (partition_name);
use <schema>
,否则FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter partition. Unable to alter partitions because table or database does not exist.
即使表确实存在,也会失败。因此,如果表名称为<schema>.<table>
,则必须先从CLI中运行,use <schema>
然后才能更改分区位置。