Я ищу способ изменить таблицу данных паркета в HIVE , чтобы удалить некоторые поля. Таблица управляется, но это не имеет значения, потому что я могу преобразовать ее во внешнюю.
Проблема в том, что я не могу использовать команду ALTER TABLE ... REPLACE COLUMN
с многораздельным паркетом таблиц.
Хорошо работает для текстового файла (с разделом или без) и только для однораздельных паркетных столов.
Я пытался заменить столбец, но это результат:
hive> ALTER TABLE db_test.mytable REPLACE COLUMNS(name String);
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
Replacing columns cannot drop columns for table db_test.mytable.
SerDe may be incompatible
Я думал о некоторых решениях, но ни одно из них не соответствует моему сценарию:
Первый
- [Необязательно] Преобразовать таблицу во внешнюю.
- Удалить таблицу.
- Пересоздайте таблицу с нужными полями.
- MSCK REPAIR TABLE для добавления разделов HDFS.
- [Необязательно] Преобразование обратно в управляемую таблицу.
Второй
- Создать временную таблицу как выбор исходной таблицы с полями, которые я выбрал.
- Удалить исходную таблицу.
- Переименуйте временную таблицу в исходное имя.
Оба варианта влияют на мой процесс, потому что я потеряю статистику своей таблицы. Эта таблица используется MicroStrategy от Impala, и мне нужно вести статистику.
Кроме того, второе решение плохо с очень большими таблицами данных.
Есть предложения?
Заранее спасибо.