Как изменить имя столбца раздела 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;