Як оновити / скинути розділ вулика?


75

Як додати розділ до зовнішньої таблиці в Hive , як я можу оновити / скинути його?

Відповіді:


164

Ви можете оновити розділ Hive, наприклад, наприклад:

ALTER TABLE logs PARTITION(year = 2012, month = 12, day = 18) 
SET LOCATION 'hdfs://user/darcy/logs/2012/12/18';

Ця команда не переміщує старі дані, а також не видаляє старі дані. Він просто встановлює розділ на нове місце.

Ви можете скинути розділ

ALTER TABLE logs DROP IF EXISTS PARTITION(year = 2012, month = 12, day = 18);

Сподіваюся, це допоможе!


1
Просто FYI, для Spark SQL це також не буде працювати для оновлення розташування існуючого розділу, здебільшого тому, що API Spark SQL його не підтримує. Також з CLI Hive вам потрібно буде запустити use <schema>спочатку, інакше це не вдасться, FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter partition. Unable to alter partitions because table or database does not exist.навіть якщо таблиця існує. Отже, якщо ім’я таблиці є <schema>.<table>, з CLI вам потрібно запустити use <schema>спочатку перед зміною розташування розділу.
Маркус

Здається, це вічно вішати за столом ORC
MikeKulls

Я беру це назад, просто потрібно 3 хвилини, щоб скинути порожній розділ. Звичайна продуктивність Hadoop.
MikeKulls

16

крім того, ви можете видалити кілька розділів з одного оператора ( Видалення декількох розділів у Impala / Hive ).

Витяг зверху посилання:

hive> alter table t drop if exists partition (p=1),partition (p=2),partition(p=3);
Dropped the partition p=1
Dropped the partition p=2
Dropped the partition p=3
OK

РЕДАКТУВАТИ 1:

Крім того, ви можете скинути групу за допомогою знака умови (>, <, <>), наприклад:

Alter table t 
drop partition (PART_COL>1);

2

Ви можете скопіювати файли в папку, де знаходиться зовнішній розділ, або використовувати

INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...

заява.


2

Вам також може знадобитися активувати базу даних, що містить таблицю

use [dbname]

в іншому випадку ви можете отримати помилку (навіть якщо ви вказали базу даних, тобто dbname.table)

ПОМИЛКА Помилка виконання, код повернення 1 з org.apache.hadoop.hive.ql.exec.DDLTask. Неможливо змінити розділ. Неможливо змінити розділи, оскільки таблиця або база даних не існує.


Будь-яка ідея щодо того, чи є для цього обхідне рішення для виконання тієї самої операції spark.sql(), яка підтримує лише одну команду за раз (і spark.sql("use <schema>")після spark.sql("alter table ...")чого не працює, особливо для випадків, коли ви хочете змінити формат розділу, який заборонено в add розділ.
Маркус,

2
Alter table table_name drop partition (partition_name);

Будь ласка, додайте до своєї відповіді якесь пояснення, щоб інші могли навчитися з цього - вже є інші відповіді, використовуючи інші підходи. Чи можете ви пояснити, чому ваша зовнішність виглядає інакше?
Ніко Хаасе,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.