Ответ 1
РЕДАКТИРОВАТЬ: Начиная с Hive 3.0.0 MSCK
теперь может обнаруживать новые разделы или удалять отсутствующие разделы (или оба), используя следующий синтаксис:
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]
Это было реализовано в HIVE-17824
Как правильно заявил HakkiBuyukcengiz, MSCK MSCK REPAIR
не удаляет разделы, если соответствующая папка в HDFS была удалена вручную, а добавляет только разделы, если создаются новые папки.
Выписка из официальной документации:
Другими словами, он добавит любые разделы, которые существуют в HDFS, но не находятся в metastore, в metastore.
Это то, что я обычно делаю при наличии external
таблиц, если несколько папок с разделами удаляются вручную в HDFS и я хочу быстро обновить разделы:
- Удалить таблицу (
DROP TABLE table_name
) (удаление внешней таблицы не удаляет файлы базовых разделов) - Создайте заново таблицу (
CREATE EXTERNAL TABLE table_name...
) - Восстановите это (
MSCK REPAIR TABLE table_name
)
В зависимости от количества разделов это может занять много времени. Другое решение состоит в том, чтобы использовать ALTER TABLE DROP PARTITION (...)
для каждой папки удаленных разделов, но это может быть утомительно, если было удалено несколько разделов.