Можно ли использовать Pig для ЗАГРУЗКИ из таблицы Parquet в HDFS с разделом и добавления разделов в виде столбцов?

У меня есть секционированная таблица Impala, хранящаяся как Parquet. Могу ли я использовать Pig для загрузки данных из этой таблицы и добавления разделов в виде столбцов?

Стол Parquet определяется как:

create table test.test_pig (
    name: chararray,
    id bigint
)
partitioned by (gender chararray, age int)
stored as parquet;

И сценарий Pig выглядит так:

A = LOAD '/test/test_pig' USING parquet.pig.ParquetLoader AS (name: bytearray, id: long);

Однако gender и age отсутствуют, когда DUMP A. Отображаются только name и id.

Я пробовал с:

A = LOAD '/test/test_pig' USING parquet.pig.ParquetLoader AS (name: bytearray, id: long, gender: chararray, age: int);

Но я бы получил ошибку, например:

ОШИБКА org.apache.pig.tools.grunt.Grunt — ОШИБКА 1031: Несовместимая схема: слева — «имя: байтовый массив, идентификатор: длинный, пол: байтовый массив, возраст: целое», справа — «имя: байтовый массив, идентификатор: длинный»

Надеюсь получить здесь совет. Благодарю вас!


person yuan0122    schedule 11.11.2015    source источник


Ответы (1)


Вы должны протестировать библиотеку org.apache.hcatalog.pig.HCatLoader.

Обычно Pig поддерживает чтение/запись в многораздельные таблицы;

читать:

Этот оператор загрузки загрузит все разделы указанной таблицы. /* myscript.pig */ A = LOAD 'tablename' USING org.apache.hcatalog.pig.HCatLoader(); ... ... Если нужны только некоторые разделы указанной таблицы, включите оператор фильтра раздела сразу после оператора загрузки в потоке данных. (Однако в сценарии оператор фильтра может не следовать непосредственно за оператором загрузки.) Оператор фильтра может включать условия как для разделов, так и для неразделенных столбцов.

https://cwiki.apache.org/confluence/display/Hive/HCatalog+LoadStore#HCatalogLoadStore-RunningPigwithHCatalog

написать

HCatOutputFormat сработает при использовании динамического разделения, если это необходимо (если значение ключа не указано), и проверит данные, чтобы записать их соответствующим образом.

https://cwiki.apache.org/confluence/display/Hive/HCatalog+DynamicPartitions

Однако я думаю, что это еще не было должным образом протестировано с файлами паркета (по крайней мере, ребятами из Cloudera):

Паркет не тестировался с помощью HCatalog. Без HCatalog Pig не может корректно читать динамически секционированные таблицы; это верно для всех форматов файлов.

http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_parquet.html

person veve    schedule 11.11.2015