2016-01-20 3 views
8

Я пытаюсь создать таблицу Hive со схемой строка, строка, double в папке, содержащей два файла Parquet. Первая схема файла паркета - строка, строка, double, а схема второго файла - строка, двойная строка.Использование таблицы улей над паркетом в Pig

CREATE EXTERNAL TABLE dynschema (
trans_date string, 
currency string, 
rate double) 
STORED AS PARQUET 
LOCATION '/user/impadmin/test/parquet/evolution/'; 

Я пытаюсь использовать таблицу улья в скрипте свиньи (0.14).

A = LOAD 'dynschema' USING org.apache.hive.hcatalog.pig.HCatLoader(); 

DUMP A; 

Но я получаю ошибку

java.lang.UnsupportedOperationException: Не удается осмотреть org.apache.hadoop.hive.serde2.io.DoubleWritable

Что я подозреваю, из-за для схемы второго файла отличается от схемы таблицы, так как разделение первого файла успешно читается, но это исключение возникает при чтении разделов второго файла.

Я также посмотрел в HCatRecordReader's код и нашел этот кусок кода

DefaultHCatRecord dr = new DefaultHCatRecord(outputSchema.size()); 
    int i = 0; 
    for (String fieldName : outputSchema.getFieldNames()) { 
    if (dataSchema.getPosition(fieldName) != null) { 
     dr.set(i, r.get(fieldName, dataSchema)); 
    } else { 
     dr.set(i, valuesNotInDataCols.get(fieldName)); 
    } 
    i++; 
    } 

Здесь я вижу, что есть логика преобразования из схемы данных в выходной схеме, но во время отладки, я нашел там не является разницей в обеих схемах.

Пожалуйста, помогите мне найти, если

  1. поддержки Pig таких случаи считывание данных из улья таблиц созданы за несколько паркетных файлы с другой схемой.

  2. Если да, то как это сделать.

+0

Если вы знаете схему, вы можете использовать погрузчик для погрузки порошков, чтобы прочитать файлы и указать схему вручную, которая должна инициировать эволюцию схемы. Я не уверен, поможет ли это в этом конкретном случае, хотя эволюция схемы кажется трудной. – LiMuBei

+0

Будет ли это дело с Avro? – SaurabhG

+0

Не знаю, как работает хранилище свинья. Я думаю, вы также можете вручную указать схему. – LiMuBei

ответ

1

Если у вас есть файлы с 2-мя различными схемами, следующий, кажется разумным:

  1. Разделить файлы, на основе которых схемы они имеют
  2. Сделать таблицы из них
  3. При желании загрузите отдельные столы и храните их в виде надёжности