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

Согласно документации, вы должны иметь возможность указать собственный шаблон для раздела Создавайте разделы для внешних таблиц. Однако я не могу заставить его работать: 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; возвращает записи!)


person seanv507    schedule 18.06.2014    source источник
comment
какой у Вас вопрос? Вы создали таблицу с настраиваемым шаблоном динамического разделения, вы добавили раздел и выбрали данные из него. Что пошло не так?   -  person Joe K    schedule 19.06.2014
comment
динамическое разбиение не работает только статическое разбиение   -  person seanv507    schedule 19.06.2014
comment
Вы нашли решение вышеуказанной проблемы?   -  person Piotr Stapp    schedule 11.09.2014
comment
Я использую python для создания сценария улья для каждого отдельного раздела, который мне нужен, как в wtfbigdata.vickiboykis.com/2013/07/19/   -  person seanv507    schedule 11.09.2014


Ответы (1)


Может быть, я смогу кое-что прояснить о том, как работают разделы Hive:

Раздел состоит из двух компонентов: его каталога в файловой системе и записи в хранилище метаданных Hive. Эта запись, по сути, просто пара (значения раздела, расположение раздела).

Когда вы создаете таблицу Hive, у нее нет записей секций в хранилище метаданных.

Когда вы запрашиваете Hive, он проверяет хранилище метаданных на наличие разделов, которые необходимо запросить, а затем сканирует их.

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;

Хотя я не тестировал последний с пользовательским шаблоном разбиения.

person Joe K    schedule 19.06.2014
comment
Спасибо. 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 (т.е. с ярлыками) - person seanv507; 20.06.2014
comment
Я несколько часов боролся с этой проблемой и понял, что функция настраиваемого пути на самом деле недоступна, когда динамические разделы добавляются через запрос Hive. hcat.dynamic.partitioning.custom.pattern - это свойство конфигурации задания, которое не может быть задано в кусте. См. Обсуждение в HIVE-6109. Существует открытый билет для поддержки этого непосредственно в Hive HIVE-8053. - person Duf59; 20.04.2016