Как изменить имя столбца раздела Hive
Мне нужно изменить имя столбца раздела (не раздел spec), я искал команды в wive wiki и некоторых страницах google. Я могу найти варианты изменения спецификации раздела,
то есть. Например
В/table/country = 'US' Я могу изменить США в США, но я хочу изменить страну на континент.
Я чувствую, что единственный вариант, доступный для изменения имени столбца раздела, - это удаление и повторное создание таблицы. Есть ли другой доступный вариант, пожалуйста, помогите мне.
Спасибо заранее.
Ответы
Ответ 1
Вы можете изменить имя столбца в метаданных следующим образом:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ChangeColumnName/Type/Position/Comment
Но, как говорится в документе, он меняет только метаданные. Разделы Hive реализуются как каталоги с шаблоном имен nameName = spec. Поэтому вам также нужно изменить имена этих каталогов на HDFS, используя команду "hadoop fs".
Ответ 2
Вы должны изменить столбец раздела, используя простой метод подкачки.
- Создайте новую временную таблицу, которая будет иметь ту же схему, что и текущая таблица.
Переместите все файлы в старой таблице, чтобы заново создать местоположение таблицы.
hadoop fs -mv <current_table_name> <temp_table_name>
- Измените схему исходной таблицы (переименуйте или удалите разделы)
Скопируйте/загрузите данные временной таблицы в исходную таблицу с соответствующими значениями раздела.
hadoop fs -mv <temp_table_name> <current_table_name>
MSK восстановить исходный стол & бросьте temp_table.
ПРИМЕЧАНИЕ. Команда mv перемещает файл из одного места в другое, что сокращает время копирования. поочередно мы можем использовать LOAD DATA INPATH
для копирования данных в исходную таблицу.
Ответ 3
Вы не можете изменить столбец раздела в Hive Infact Hive не поддерживает изменение столбцов раздела
Вы можете думать об этом следующим образом - Hive хранит данные, создавая папку в формате hdf со значениями столбцов разделов. - Поскольку, если вы пытаетесь изменить раздел куста, это означает, что вы пытаетесь изменить всю структуру каталогов и данные таблицы кустов, которая невозможно, если вы разбили на год, вот так выглядит структура каталогов
tab1/clientdata/**2009**/file2
tab1/clientdata/**2010**/file3
Если вы хотите изменить столбец раздела, выполните следующие действия:
Создайте еще одну таблицу кустов с необходимыми изменениями в столбце раздела
Create table new_table ( A int, B String.....)
Загрузить данные из предыдущей таблицы
Insert into new_table partition ( B ) select A,B from table Prev_table
Ответ 4
Как вы сказали, переименуйте значение раздела для раздела очень просто:
hive> ALTER TABLE test.usage PARTITION (country ='US') RENAME TO PARTITION (date='USA');
Я знаю, что это не то, что вы ищете. К сожалению, учитывая, что ваши данные уже разделены на страна, единственный вариант, который у вас есть, - это удалить таблицу, удалить данные (если ваша таблица является внешней) из HDFS и повторно вставить данные с помощью континента раздел.
Что бы я делал в вашем случае, так это иметь несколько уровней разделов, чтобы ваша структура папок выглядела так:
/path/to/the/data/continent='america'/country='usa'
/path/to/the/data/continent='america'/country='mexico'
/path/to/the/data/continent='europe'/country='spain'
/path/to/the/data/continent='europe'/country='italy'
...
Таким образом, вы можете запрашивать данные для разных уровней детализации (в данном случае континент и страна).
Ответ 5
Добавление решения для дальнейшего использования:
-
Случай использования: измените столбец разделов с STRING на INT
set hive.mapred.mode=norestrict;
alter table {table_name} partition column ({column_name} {column_type});
e.g. ALTER TABLE employee PARTITION COLUMN dept INT;