2013-07-05 8 views
17

Das aktuelle Schema ist:Gibt es eine Möglichkeit, den Spaltentyp in der Hive-Tabelle zu ändern?

hive> describe tableA; 
OK 
id  int 
ts  timestamp 

Ich möchte ts Spalte ändern sein BIGINT ohne Tabelle zu löschen und wieder neu erstellen. Ist es möglich?

+0

Zusätzlich, wenn Sie Partitionen verwenden, müssen Sie 'alter table {table_name} Partition Spalte ({column_name} {column_type})'. Hive kann so viele Inkonsistenzen verursachen. Vielleicht ist es mir aber Hive ist sehr frustrierend :-( –

+0

Interessant wäre, wenn dies auch mit einer ORC-Datei möglich wäre –

Antwort

34

die Lösung gefunden:

ALTER TABLE tableA CHANGE ts ts BIGINT AFTER id; 

dies Siehe für nähere Details: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterColumn

+1

+1, weil deine Antwort 12 Tage vor Animeshs Antwort kam, aber aus irgendeinem Grund weniger Stimmen hat. – MikeKulls

+1

@interskh gibt es eine Möglichkeit, dies auf mehrere Spalten in einer Anweisung wie ALTER TABLE Tabelle A CHANGE a, b, ca, b, c BIGINT zu verwenden; Ich habe versucht, Spalten mit einem Komma trennen und es hat nicht funktioniert Ich frage, ob meine Tabelle mit der Hue-Schnittstelle für Hive erstellt wurde und "DECIMAL" standardmäßig auf "(10,0)", aber ich benötige '(38,0)' –

+0

Wissen Sie, ob dies auch funktionieren würde, falls die Daten vorliegen gespeichert als ORC oder Parkett? –

20
ALTER TABLE table_name CHANGE col_name col_name newType 
6

Es ist in der Regel einfach die exesting Tabelle verwendet diese Syntax in Hive zu ändern/modifizieren.

ALTER TABLE table_name CHANGE old_col_name new_col_name new_data_type 

Hier können Sie den Spaltennamen und den Datentyp gleichzeitig ändern. Wenn Sie col_name nicht ändern wollen, machen Sie einfach alt_col_name und new_col_name gleich. OK.

Komm zu deinem Problem. Wenn Sie die ts-Spalte zu BIGINT ändern möchten, bedeutet dies, dass Sie den Spaltentyp ändern. Führen Sie diese Abfrage einfach aus.

ALTER TABLE tableA CHANGE ts ts BIGINT; 

Hier ts und ts sind gleich, bedeutet, dass Sie Spaltennamen nicht ändern, aber Säulentyp zu ändern; Wenn Sie den Spaltennamen ändern möchten, führen Sie ihn einfach aus.

ALTER TABLE tableA CHANGE ts new_col BIGINT; 

Jetzt laufen

 
hive> describe tableA; 
OK 
id  int 
new_col  bigint
Verwandte Themen