14

如何删除 Hive 表中当前加载的所有分区?

我可以删除一个分区alter table <table> drop partition(a=, b=...);

我可以使用恢复分区语句加载所有分区。但我似乎无法删除所有分区。

我正在使用 EMR 支持的最新 Hive 版本 0.8.1。

4

5 回答 5

23

从 0.9.0 版开始,您可以在 drop partition 语句中使用比较器,该语句可用于一次删除所有分区。

一个示例,取自drop_partitions_filter.q测试用例:

create table ptestfilter (a string, b int) partitioned by (c string, d string);
alter table ptestfilter add partition (c='US', d=1);
alter table ptestfilter add partition (c='US', d=2);
alter table ptestFilter add partition (c='Uganda', d=2);
alter table ptestfilter add partition (c='Germany', d=2);
alter table ptestfilter add partition (c='Canada', d=3);
alter table ptestfilter add partition (c='Russia', d=3);
alter table ptestfilter add partition (c='Greece', d=2);
alter table ptestfilter add partition (c='India', d=3);
alter table ptestfilter add partition (c='France', d=4);

show partitions ptestfilter;
alter table ptestfilter drop partition (c>'0', d>'0');
show partitions ptestfilter;
于 2013-03-19T08:49:49.943 回答
14

Hive 允许您在选择分区时使用比较运算符(例如>, <, =, )。<>例如,以下应该删除表中的所有分区。

ALTER TABLE table_name DROP PARTITION (partition_name > '0');
于 2014-11-08T01:11:34.007 回答
3

从现有表 t1 创建一个新表 t2,如下所示。

 create table t2 as
    select * from t1;

删除旧表 t1

drop table t1;

现在检查新表上是否有分区。

show partitions t2;
于 2013-04-03T12:06:41.013 回答
0


使用原始表中的数据创建表:

CREATE TABLE t2 AS
SELECT column_name_1, ..., column_name_N FROM t1;

唯一的情况是它应该在非严格模式下完成:

set hive.mapred.mode=nonstrict;

我希望它有所帮助。GL!

于 2013-03-19T13:01:15.997 回答
-3
truncate table table_name; 

将删除所有分区。如果您想删除分区表,这尤其有用。

于 2016-02-12T10:38:32.977 回答