2013-07-05 13 views
17

Obecny schemat jest:Czy istnieje sposób na zmianę typu kolumny w tabeli ula?

hive> describe tableA; 
OK 
id  int 
ts  timestamp 

Chcę zmienić ts kolumnę być BIGINT bez upuszczenie tabeli i odtworzyć ponownie. Czy to możliwe?

+0

Dodatkowo jeśli używasz partycji należy zmienić kolumnę tabeli '{} table_name partycji ({column_name} {column_type})'. Hive może tak łatwo stworzyć wiele niespójności. Może to ja, ale Hive jest bardzo frustrujące :-( –

+0

Interesujące byłoby, gdyby było to również możliwe z plikiem ORC –

Odpowiedz

34

Znaleziono rozwiązanie:

ALTER TABLE tableA CHANGE ts ts BIGINT AFTER id; 

zobaczyć to dla kompletnych informacji: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterColumn

+1

+1, ponieważ twoja odpowiedź nadeszła w 12 dni przed odpowiedzią Animesa, ale z jakiegoś powodu ma mniej głosów, mimo że masz więcej informacji. – MikeKulls

+1

@interskh jest sposób na zastosowanie tego do wielu kolumn w jednej instrukcji? Takich jak 'ZMIEŃ tabele tabelaA ZMIEŃ a, b, ca, b, c BIGINT;' Próbowałem oddzielając kolumny przy użyciu przecinka i nie działało. Pytam, czy mój stół został utworzony przy użyciu interfejsu Hue dla ula i domyślnie 'DECIMAL' na' (10,0) 'jednak wymagam' (38,0) ' –

+0

Czy wiesz, czy to też by działało, gdyby dane były przechowywane jako ORC lub Parkiet? –

20
ALTER TABLE table_name CHANGE col_name col_name newType 
6

To proste zazwyczaj zmienić/zmodyfikować tabela exesting użyć tej składni w ula.

ALTER TABLE table_name CHANGE old_col_name new_col_name new_data_type 

Tutaj możesz zmienić nazwę kolumny i typ danych na raz. Jeśli nie chcesz zmienić col_name, po prostu make old_col_name i new_col_name są takie same. Ok.

Przyjdź do swojego problemu. Jeśli chcesz zmienić kolumnę ts na BIGINT.It oznacza zmianę typu kolumny. więc po prostu uruchom to zapytanie.

ALTER TABLE tableA CHANGE ts ts BIGINT; 

Tutaj TS i TS są takie same, oznacza, że ​​nie zmieniają nazwę kolumny, ale zmieniając kolumny typu; jeśli chcesz zmienić nazwę kolumny, po prostu uruchom ją.

ALTER TABLE tableA CHANGE ts new_col BIGINT; 

Teraz uruchom

 
hive> describe tableA; 
OK 
id  int 
new_col  bigint
Powiązane problemy