Има ли начин да промените типа на колоната в таблицата на кошера?

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

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 еднакви. Добре.

Елате при вашия проблем. Ако искате да промените 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