Отбросить все разделы из таблицы улья?

Как я могу удалить все разделы, загруженные в настоящее время в таблицу Hive?

Я могу удалить один раздел с помощью alter table <table> drop partition(a=, b=...);

Я могу загружать все разделы с помощью инструкции восстановления разделов. Но я не могу отбросить все разделы.

Я использую последнюю версию Hive, поддерживаемую EMR, 0.8.1.

Ответ 1

Начиная с версии 0.9.0 вы можете использовать компараторы в инструкции раздела перетаскивания, которая может быть использована для одновременного удаления всех разделов.

Пример, взятый из drop_partitions_filter.q testcase:

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;

Ответ 2

При выборе разделов Hive позволяет использовать операторы сравнения (например, >, <, =, <>). Например, следующее должно оставить все разделы в таблице.

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

Ответ 3

создайте новую таблицу t2 из существующей таблицы t1, как показано ниже.

 create table t2 as
    select * from t1;

удалить старую таблицу t1

drop table t1;

теперь проверьте, есть ли у вас разделы в новой таблице.

show partitions t2;

Ответ 4


Создайте таблицу, используя данные из исходной таблицы:

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

Только в том случае, если это необходимо сделать в нестрогом режиме:

set hive.mapred.mode=nonstrict;

Надеюсь, это поможет. GL!

Ответ 5

truncate table table_name; 

удалит все разделы. Это полезно, особенно если вы хотите удалить секционированную таблицу.