У меня есть куча файлов паркета, и я создал внешние таблицы, используя Impala's CREATE EXTERNAL TABLE...
.
Однако, когда я выпустил
select * from my_table
вернул
ОШИБКА: файл 'hdfs: // xyz ..' имеет несовместимую схему Parquet для столбца 'xyz'. Тип столбца: DECIMAL (5, 2), схема Parquet: необязательный int32 final_apr [i: 4 d: 1 r: 0].
Итак, я внимательно посмотрел на вывод команды
parquet-tools schema my_parquet
и заметил, что все столбцы, которые INT64
, но не fixed_len_byte_array
, имеют эту проблему.
Поэтому я вручную выполнил команду
ALTER TABLE schema.table_name CHANGE old-column new_column BIGINT;
чтобы изменить тип столбца, который он создал по умолчанию, на BIGINT
за https://www.cloudera.com/documentation/enterprise/5-6-x/topics/impala_parquet.html,, тогда я смог выполнить select * from my_table;
Я выполнил вышеупомянутое в scala с использованием spark, то есть я смог прочитать файл паркета и сохранить его в виде таблицы impala, а также программно выполнить запрос «select * from my_table».
Однако я попытался выполнить запрос вручную из оболочки impala, но у меня возникла та же ошибка, показанная выше.
Вместо того, чтобы вручную обновлять столбцы для изменения типа данных всего INT64
байтового массива нефиксированной длины, есть ли лучший способ справиться с этим? Может быть, что-то вроде после чтения файла паркета как Dataframe, найти все INT64
столбцы байтового массива не фиксированной длины, преобразовать их в BIGINT
и затем сохранить кадр данных как таблицу?
Кстати, я не могу выполнить запрос select * from my_from;
в оболочке улья даже после изменения типа данных столбца. Я получаю сообщения об ошибках
Ошибка: ошибка при компиляции оператора: СБОЙ: ParseException строка 1:30 посторонний ввод «предел», ожидающий число рядом с «(состояние = 42000, код = 40000).
Я пытался с парой таблиц, все они имеют одинаковую проблему с оболочкой улья.
Ценю вашу помощь!