从hive表中删除所有分区?

时间:2013-03-19 05:52:45

标签: hive elastic-map-reduce

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

我可以使用alter table <table> drop partition(a=, b=...);

删除单个分区

我可以使用recover partitions语句加载所有分区。但我似乎无法放弃所有分区。

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

5 个答案:

答案 0 :(得分:18)

从版本0.9.0开始,您可以在drop partition语句中使用comparators,它可以用于一次删除所有分区。

一个例子,取自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;

答案 1 :(得分:13)

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

ALTER TABLE table_name DROP PARTITION (partition_name > '0');

答案 2 :(得分:3)

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

 create table t2 as
    select * from t1;

删除旧表t1

drop table t1;

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

show partitions t2;

答案 3 :(得分:0)

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

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

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

set hive.mapred.mode=nonstrict;

我希望它有所帮助。 GL!

答案 4 :(得分:-3)

truncate table table_name; 

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