Это продолжение предыдущего вопроса, который я задал: Можно ли изменить метаданные столбца, который находится в многораздельной таблице в Hive?
Вопрос: Можно ли изменить метаданные существующего столбца во ВНЕШНЕЙ таблице, которая определяется файлом схемы AVRO?
Мне нужно изменить метаданные столбца в таблице, которая одновременно секционирована и хранится как ВНЕШНИЙ. Сам по себе столбец не является столбцом разделения. Метаданные хранятся в отдельном файле AVRO. Я могу подтвердить, что обновленные метаданные находятся в файле AVRO, но не в отдельном многораздельном файле.
Чтобы изменить метаданные в разделенных файлах, я выполнил команду ALTER TABLE TableName CHANGE COLUMN ColumnName ColumnName BIGINT CASCADE;
, но получаю следующую ошибку:
Ошибка при обработке оператора: FAILED: ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. Не разрешено изменять схему сохраненной таблицы Avro, имеющей внешнюю схему. Попробуйте удалить avro.schema.literal или avro.schema.url из свойств таблицы.
Я пошел дальше и успешно выполнил следующую команду:
ALTER TABLE TableName UNSET TBLPROPERTIES ('avro.schema.url');
Затем я успешно выполнил команду ИЗМЕНИТЬ КОЛОНКУ:
ALTER TABLE TableName CHANGE COLUMN ColumnName ColumnName BIGINT CASCADE;
Когда я выполняю SELECT
для таблицы, я все равно получаю сообщение об ошибке, указывающее, что метаданные не совпадают между тем, что находится в хранилище метаданных, и тем, что находится в файле раздела. Я подтвердил это, открыв файл данных раздела. Итак, похоже, что опция CASCADE не применяется к разделу.