Куст 0.13 пользовательский шаблон динамического разбиения внешней таблицы

#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