Hive修改表語句
0x01:重命名錶
1 |
ALTER TABLE table_name
RENAME TO new_table_name; |
上面這個命令可以重命名錶,資料所在的位置和分割槽都沒有改變。
0x02:改變列名/型別/位置/註釋
1 |
ALTER TABLE table_name
CHANGE |
2 |
[CLOUMN]
col_old_name col_new_name column_type |
3 |
[CONMMENT
col_conmment] |
4 |
[ FIRST | AFTER column_name]; |
這個命令可以修改表的列名,資料型別,列註釋和列所在的位置,FIRST將列放在第一列,AFTER col_name將列放在col_name後面一列,例如:
1 |
ALTER TABLE test_table
CHANGE col1 col2 STRING |
2 |
COMMENT 'The
datatype of col2 is STRING' |
3 |
AFTER col3; |
上面的語句將列名col2修改為col2,資料型別為STRING並添加註釋,最後將這一列放在col3後面。
0x03:增加/更新列
1 |
ALTER TABLE table_name ADD | REPLACE COLUMNS
(col_name data_type [CONMMENT col_comment], ...); |
ADD COLUMNS允許使用者在當前列的末尾,分割槽列之前新增新的列,REPLACE COLUMNS允許使用者更新列,更新的過程是先刪除當前的列,然後在加入新的列。注:只有在使用native的SerDE時才可以這麼做。
0x04:增加表的屬性
1 |
ALTER TABLE table_name SET TBLPEOPERTIES
table_properties; |
使用者可以使用這個語句增加表屬性,table_properties的結構為(property_name=property_value,property_name=property_value, ...),目前last_modified_time(最後修改時間),last_modified_user(做最後修改的使用者)是由Hive自動管理的。使用者可以向列中新增自己的屬性,然後使用DISCRIBE EXTEBDED TABLE來獲取這些資訊。
0x05:增加SerDE屬性
1 |
ALTER TABLE table_name SET SERDE
serde_class_name |
2 |
[WHIT
SERDEPROPERTIES serde_properties]; |
1 |
ALTER TABLE table_name SET SERDEPROPERTIES
serde_properties; |
上面兩個命令都允許使用者想SerDE物件增加使用者定義的元資料。Hive為了序列化和反序列化資料,將會初始化SerDE屬性,並將屬性傳給表的SerDE。這樣使用者可以為自定義的SerDe儲存屬性。上面serde_properties的結構為(property_name=property_value,property_name=property_value, ...)。
0x06:修改表文件格式和組織
1 |
ALTER TABLE table_name SET FILEFORMAT
file_format; |
1 |
ALTER TABLE table_name
CLUSTERED BY (col_name,
col_name, ...) |
2 |
[SORTED By (col_name,
...)] INTO num_buckets
BUCKETS; |
上面兩個命令都修改了表的物理屬性。