Как удалить поля из многораздельной таблицы в Hive, хранящейся как паркет? - PullRequest
0 голосов
/ 13 июня 2019

Я ищу способ изменить таблицу данных паркета в 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, и мне нужно вести статистику.
Кроме того, второе решение плохо с очень большими таблицами данных.

Есть предложения?
Заранее спасибо.

1 Ответ

0 голосов
/ 13 июня 2019

Вы можете использовать первый метод, а затем запустить

hive> anayze table <db_name>.<table_name> compute statistics;

для вычисления всей статистики таблицы.

...