如何删除 Hive 表中当前加载的所有分区?
我可以删除一个分区alter table <table> drop partition(a=, b=...);
我可以使用恢复分区语句加载所有分区。但我似乎无法删除所有分区。
我正在使用 EMR 支持的最新 Hive 版本 0.8.1。
如何删除 Hive 表中当前加载的所有分区?
我可以删除一个分区alter table <table> drop partition(a=, b=...);
我可以使用恢复分区语句加载所有分区。但我似乎无法删除所有分区。
我正在使用 EMR 支持的最新 Hive 版本 0.8.1。
从 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;
Hive 允许您在选择分区时使用比较运算符(例如>
, <
, =
, )。<>
例如,以下应该删除表中的所有分区。
ALTER TABLE table_name DROP PARTITION (partition_name > '0');
从现有表 t1 创建一个新表 t2,如下所示。
create table t2 as
select * from t1;
删除旧表 t1
drop table t1;
现在检查新表上是否有分区。
show partitions t2;
使用原始表中的数据创建表:
CREATE TABLE t2 AS
SELECT column_name_1, ..., column_name_N FROM t1;
唯一的情况是它应该在非严格模式下完成:
set hive.mapred.mode=nonstrict;
我希望它有所帮助。GL!
truncate table table_name;
将删除所有分区。如果您想删除分区表,这尤其有用。