Можно ли изменить метаданные столбца в многораздельной таблице в Hive? - PullRequest
1 голос
/ 11 октября 2019

Это расширение предыдущего вопроса, который я задал: Можно ли изменить метаданные раздела в HIVE?

Мы изучаем идею изменения метаданных в таблице, а невыполнить операцию CAST над данными в инструкциях SELECT. Изменение метаданных в метастазах MySQL достаточно просто. Но возможно ли применить это изменение метаданных к столбцу в многораздельной таблице (они выполняются ежедневно)? Примечание: сам столбец не является столбцом разбиения. Это простое поле идентификатора, которое изменяется с STRING на BIGINT.

В противном случае мы можем столкнуться с текущими и будущими данными, имеющими тип BIGINT, в то время как исторические значения STRING.

Вопрос: Можно ли изменить метаданные раздела в Hive? Если да, то как?

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

Обновление:

Я выполнил команду ALTER TABLE .. CHANGE COLUMN ... CASCADE, но я получаю следующую ошибку:

Ошибка при обработке оператора: СБОЙ: Ошибка выполнения, код возврата 1 из org.apache.hadoop.hive.ql.exec.DDLTask. Не разрешается изменять схему хранимой таблицы Avro, имеющей внешнюю схему. Попробуйте удалить avro.schema.literal или avro.schema.url из свойств таблицы.

Метаданные хранятся в отдельном файле avro. Я могу подтвердить, что обновленные метаданные находятся в файле avro, но не в файле отдельного раздела.

Примечание. Таблица хранится как EXTERNAL.

1 Ответ

2 голосов
/ 11 октября 2019

Вы можете легко изменить тип столбца:

Использовать таблицу изменений в Hive, изменить тип на STRING и т. Д .:

alter table table_name change column col_name col_name string cascade; --change to string

См. документацию .

ALTER TABLE CHANGE COLUMN с помощью команды CASCADE изменяет столбцы метаданных таблицы и каскадно изменяет все метаданные раздела.

В качестве альтернативы вы можете воссоздать таблицу, как в этом ответе: https://stackoverflow.com/a/58299056/2700344

...