Я использую HCatalog
для чтения и записи данных в улей от Pig сценария следующим образом:Проблемы сохранения в Hive таблицу из Свиньи
A = LOAD 'customer' USING org.apache.hcatalog.pig.HCatLoader();
B = LOAD 'address' USING org.apache.hcatalog.pig.HCatLoader();
C = JOIN A by cmr_id,B by cmr_id;
STORE C INTO 'cmr_address_join' USING org.apache.hcatalog.pig.HCatStorer();
определения таблицы для клиента является:
cmr_id int
name string
Адрес:
addr_id int
cmr_id int
address string
cmr_address_join:
cmr_id int
name string
addr_id int
address string
Когда я запускаю это, свинья выдает следующее сообщение об ошибке:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1115: Column names should all be in lowercase. Invalid name found: A::cmr_id
Я считаю, что это может быть потому, что свинья пытается соответствовать Свиньи сгенерированные имена файлов с колоннами улей это не совсем соответствует (A::cmr_id versus cmr_id
). Я думаю, HCatalogStorer
ожидает, что псевдоним будет cmr_id
, а не A::cmr_id
. Я хочу, чтобы HCatalogStorer
игнорировал префикс псевдонима и считался только именем поля.
grunt> DESCRIBE C;
C: {A::cmr_id: int,A::name: chararray,B::addr_id: int,B::cmr_id: int,B::address: chararray}
Есть ли способ отбросить префикс поля в Pig (то есть A: :)? Или, если у кого-то есть обходной путь или решение, было бы здорово.
Я знаю, что мы можем использовать следующее, чтобы явно добавить псевдоним и заставить его работать.
D = foreach C generate A::cmr_id as cmr_id,A::name as name, B::addr_id as addr_id, B::address as address;
STORE D INTO 'cmr_address_join' USING org.apache.hcatalog.pig.HCatStorer();
Но моя проблема в том, что у меня много таблиц, каждая из которых имеет сотни столбцов. Было бы утомительно указать псевдоним, как указано выше.
Любая помощь в устранении этого была бы весьма признательна.
См. Этот вопрос для решения.http://stackoverflow.com/questions/38902046/pig-how-to-remove-in-the-column-name/40538122#40538122 – user584583