Есть ли способ изменить тип столбца в таблице куста?

Текущая схема:

hive> describe tableA;
OK
id      int
ts      timestamp

Я хочу изменить столбец ts на BIGINT без удаления таблицы и заново создать ее. Является ли это возможным?


person interskh    schedule 05.07.2013    source источник
comment
Кроме того, если вы используете разделы, вы должны alter table {table_name} partition column ({column_name} {column_type}). Hive может легко создать множество несоответствий. Может быть, это я, но Hive очень расстраивает :-(   -  person Kenji Noguchi    schedule 07.01.2016


Ответы (2)


Нашел решение:

ALTER TABLE tableA CHANGE ts ts BIGINT AFTER id;

Полную информацию см. здесь: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterColumn

person interskh    schedule 05.07.2013
comment
@interskh есть ли способ применить это к нескольким столбцам в одном выражении? например ALTER TABLE tableA CHANGE a,b,c a,b,c BIGINT;, я пробовал разделять столбцы запятой, но это не сработало. Причина, по которой я спрашиваю, заключается в том, что моя таблица была создана с использованием интерфейса Hue для улья и DECIMAL по умолчанию (10,0), однако мне требуется (38,0) - person AM_Hawk; 14.04.2016
comment
Знаете ли вы, будет ли это работать, если данные хранятся как ORC или Parquet? - person Stefan Papp; 30.11.2016
comment
НЕ ИСПОЛЬЗУЙТЕ, если данные находятся в паркете, а у вас не Hive версии 1.2. Предположительно это исправлено в Hive 1.2, но моя компания использует 1.1. Мне пришлось удалить свою таблицу и начать заново. - person Climbs_lika_Spyder; 27.11.2017

Обычно просто изменить/модифицировать существующую таблицу, используя этот синтаксис в Hive.

ALTER TABLE table_name CHANGE old_col_name new_col_name new_data_type

Здесь вы можете одновременно изменить имя столбца и тип данных. Если вы не хотите менять col_name, просто сделайте old_col_name и new_col_name одинаковыми. Ok.

Приходите к своей проблеме. Если вы хотите изменить столбец ts на BIGINT. Это означает, что тип столбца вы меняете. поэтому просто запустите этот запрос.

ALTER TABLE tableA CHANGE ts ts BIGINT;

Здесь ts и ts одинаковы, это означает, что вы меняете не имя столбца, а меняете тип столбца; если вы хотите изменить имя столбца, просто запустите его.

ALTER TABLE tableA CHANGE ts new_col BIGINT;

Теперь беги

hive> describe tableA;
OK
id      int
new_col      bigint
person Venu A Positive    schedule 11.05.2015