Я пытаюсь создать таблицу 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++;
}
Здесь я вижу, что есть логика преобразования из схемы данных в выходной схеме, но во время отладки, я нашел там не является разницей в обеих схемах.
Пожалуйста, помогите мне найти, если
поддержки Pig таких случаи считывание данных из улья таблиц созданы за несколько паркетных файлы с другой схемой.
Если да, то как это сделать.
Если вы знаете схему, вы можете использовать погрузчик для погрузки порошков, чтобы прочитать файлы и указать схему вручную, которая должна инициировать эволюцию схемы. Я не уверен, поможет ли это в этом конкретном случае, хотя эволюция схемы кажется трудной. – LiMuBei
Будет ли это дело с Avro? – SaurabhG
Не знаю, как работает хранилище свинья. Я думаю, вы также можете вручную указать схему. – LiMuBei