#hive #partition #hcatalog
#куст #раздел #каталог hcatalog
Вопрос:
Согласно документации, вы должны иметь возможность указать пользовательский шаблон для разделов разделов внешних таблиц. Однако я не могу заставить его работать: select * from rawlog_test7 limit 10;
не возвращает записей.
Это то, что я делаю
set hcat.dynamic.partitioning.custom.pattern="${year}/${month}/${day}/${hour}"
Я создаю свою таблицу с
помощью …
partitioned by (year int, month int, day int, hour int)
location '/history.eu1/ed_reports/hourly/';
и моя структура каталогов ../2014/06/18/13/ ...
Если я использую статические разделы
alter table rawlog_test7 add partition (year=2014,month=6,day=18,hour=13) location '/history.eu1/ed_reports/hourly/2014/06/18/13';
это работает ( select * from rawlog_test7 limit 10;
возвращает записи!)
Комментарии:
1. в чем ваш вопрос? Вы создали таблицу с пользовательским шаблоном динамического разбиения, добавили раздел и выбрали из него данные. Что пошло не так?
2. динамическое разбиение не работает, только статическое разбиение
3. Вы нашли решение вышеуказанной проблемы?
4. Я использую python для создания сценария улья для каждого отдельного раздела, который мне нужен, как в wtfbigdata.vickiboykis.com/2013/07/19 /…
Ответ №1:
Может быть, я смогу прояснить некоторые вещи о том, как работают разделы улья:
Раздел состоит из двух компонентов: его каталога в файловой системе и записи в метасторе Hive. По сути, эта запись представляет собой просто пару (значения разделов, расположение разделов).
Когда вы создаете кустовую таблицу, в ней нет записей разделов в метасторе.
Когда вы запрашиваете куст, он проверяет метахранение на наличие разделов, которые ему нужно было бы запросить, а затем сканирует их.
Куст автоматически не обнаруживает разделы в файловой системе для добавления записей метахранилища.
«Динамическое разбиение» относится к способности Hive создавать разделы как в файловой системе, так и в метахране на основе столбца данных при вставке в разделенную таблицу Hive, т. Е. Выполнении фактической insert into table rawlog_test7 partition(y,m,d,h) ...
команды.
Если у вас есть каталоги в файловой системе, в которых еще нет записей метахранилища, вы можете добавлять их один за другим, как вы делали:
alter table rawlog_test7 add partition (year=2014,month=6,day=18,hour=13) location '/history.eu1/ed_reports/hourly/2014/06/18/13';
Или вы можете запустить восстановление таблицы:
msck repair table rawlog_test7;
Хотя я не тестировал последний с пользовательским шаблоном разбиения.
Комментарии:
1. Спасибо. msck — это именно то, что мне нужно. Однако у меня это не работает ?!? Я запускаю
MSCK REPAIR TABLE rawlog_test10
и получаю:OK Partitions not in metastore: rawlog_test10:2014/05/21/11 rawlog_test10:2014/05/21/12 rawlog_test10:2014/05/21/13
… затем, когда я выполняю оператор select или показываю разделы, я не получаю никаких результатов. Интересно, что когда я показываю разделы для своего статического, я получаю:year=2014/month=6/day=18/hour=13
(т.Е. с метками)2. Я несколько часов боролся с этой проблемой и понял, что функция пользовательского пути фактически недоступна, когда динамические разделы добавляются с помощью запроса улья.
hcat.dynamic.partitioning.custom.pattern
является свойством конфигурации задания и не должен устанавливаться в кусте. Смотрите обсуждение в КУСТЕ-6109 . Существует открытый билет для поддержки этого непосредственно в улье HIVE-8053