Я пытаюсь создать таблицу Hive со схемой string, string, double в папке, содержащей два файла Parquet. Схема первого паркетного файла - это строка, строка, двойная, а схема второго файла - это строка, двойная, строка.
CREATE EXTERNAL TABLE dynschema (
trans_date string,
currency string,
rate double)
STORED AS PARQUET
LOCATION '/user/impadmin/test/parquet/evolution/';
Я пытаюсь использовать таблицу улья в скрипте pig (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 поддерживает такие случаи чтения данных из таблицы кустов, созданной в нескольких файлах паркета с разной схемой.
Если да, то как это сделать.