Сбой агрегированных запросов в кусте, если каталог раздела не существует

Я использую Hive v1.2.1 с Tez. У меня есть внешняя секционированная таблица. Разделы почасовые и имеют вид p = yyyy_mm_dd_hh. Ситуация такова, что эти каталоги разделов в hdfs, вероятно, когда-нибудь будут удалены. После их удаления улей по-прежнему содержит метаданные для этого раздела, а команда «показать разделы» по-прежнему выводит список раздела, каталог которого был удален из hdfs. Обычно это вряд ли вызовет какие-либо проблемы, и запрос выбора для раздела (каталог которого был удален) просто приведет к пустому набору результатов:

hive> select * from test_tab where p='2015_01_01_01';
OK
Time taken: 2.168 seconds

Однако при выполнении любого агрегированного запроса к тому же разделу я получаю сообщение об ошибке:

hive> select count(*) from test_tab where p='2015_01_01_01';
FAILED: SemanticException java.io.FileNotFoundException: File hdfs://localhost:8020/user/root/data/test_db/test_tab/p=2015_01_01_01 does not exist.

Мне нужно иметь такое же поведение в совокупных запросах, как и в других запросах на выборку. Вероятно, это ошибка улья. Мы будем благодарны за любые обходные пути для этой проблемы. С уважением.


person Ankit Khettry    schedule 26.05.2016    source источник
comment
Я обнаружил такое поведение при работе с HCat, и я думаю, что это не ошибка, потому что при нормальном поведении пользователь должен удалить разделы перед удалением своих папок.   -  person 54l3d    schedule 26.05.2016
comment
Hive не волнует, не существует ли для раздела каталога раздела или нет файлов. В обоих случаях вы просто не получите результатов по запросу, фильтрующему раздел - цитата из Programming Hive: ссылка. Если Hive не должен заботиться о том, существует ли каталог раздела, почему ошибка в запросе agg? Это заставляет меня думать, что это ошибка   -  person Ankit Khettry    schedule 26.05.2016


Ответы (1)


запустите команду ниже

таблица восстановления msck test_tab;

а затем запустите свой запрос

person Rishav Rohit    schedule 14.06.2016
comment
Это не приведет к удалению разделов, указывающих на файлы, удаленные вручную в HDFS. Он просто добавляет созданную вручную папку разделов в хранилище метаданных Hive. - person cheseaux; 11.07.2017