Вам придется отбросить разделы вручную, потому что msck repair table
только добавляет разделы, но не удаляет существующие.
Вам придется перебирать список поврежденных разделов.Для внутренних таблиц вам нужно быть конкретным, так как удаление раздела удаляет базовые физические файлы.
ALTER TABLE tkt_hist DROP IF EXISTS PARTITION(yr=2015, mn=01, dy=01);
Это необходимо сделать для каждого раздела.Вы можете поместить его в сценарий bash и выполнить его с помощью команд hive -e
или beeline -e
для работы со строкой запроса в кавычках.
Если вы используете внешнюю таблицу, тогда гораздо проще удалить все разделыа затем восстановите таблицу.
ALTER TABLE tkt_hist DROP IF EXISTS PARTITION(yr<>'', mn<>'', dy<>'');
Обязательно восстановите таблицу как пользователь, владеющий базой данных Hive, а также путь HDFS.
MSCK REPAIR TABLE tkt_hist;
Это должно добавить папки разделов, в настоящее время доступные в пути к таблице, без добавления недопустимых разделов.
Примечание. Если ваш пользователь не является владельцем каталога, убедитесь, что у вас есть права на запись и выполнитеработа в клиенте доступа hive
, поскольку beeline
требует абсолютных прав собственности на работу.