如何删除当前在Hive表中加载的所有分区?
我可以使用alter table <table> drop partition(a=, b=...);
我可以使用recover partitions语句加载所有分区。但我似乎无法放弃所有分区。
我正在使用EMR支持的最新Hive版本,0.8.1。
答案 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;
将删除所有分区。如果您想删除分区表,这将非常有用。