修改已经存在的表:
alter table
Alter table 语句允许用户改变现有表的结构。用户可以增加列/分区,表本身重命名。
1) 增加分区 Add
Partitions:
ALTER TABLE table_name ADD partition_spec [ LOCATION
‘location1‘]partition_spec [ LOCATION ‘location2‘ ]
其中partition_spec的格式为:PARTITION (partition_col =partition_col_value,
partition_col =partiton_col_value, ...)
用户可以用 ALTER TABLE ADD PARTITION 来向一个表中增加分区。当分区名是字符串时加引号。
alter table test_partition add partition
(dt=‘2012-03-06‘)location‘/home/zhangxin/hive/test_hive.txt‘;
2) 删除分区 drop Partition:
ALTER TABLE table_name DROP partition_spec,
partition_spec,...
用户可以用 ALTER TABLE DROP PARTITION 来删除分区。分区的元数据和数据将被一并删除。
alter table test_partition drop partition
(dt=‘2012-03-06‘)
3) 对表进行重命名 rename to:
ALTER TABLE table_name RENAME TO
new_table_name
这个命令可以让用户为表更名。数据所在的位置和分区名并不改变。换而言之,老的表名并未“释放”,对老表的更改会改变新表的数据。
alter table test_partition rename to
new_test_partition;
4) 对表中的某一列进行修改,包括列的名称/列的数据类型/列的位置/列的注释
ALTER TABLE table_name CHANGE [COLUMN] col_old_name
col_new_namecolumn_type[COMMENT col_comment] [FIRST|AFTER
column_name]
这个命令可以允许用户修改一个列的名称、数据类型、注释或者位置
create table test_col_change (a int,b int, c
int);
修改列的名称,后面一定要加上数据类型:
ALTER TABLE test_col_change CHANGE a a1
INT; 将 a 列的名字改为 a1.
ALTER TABLE test_col_change CHANGE a a1
STRING AFTER b; 将 a 列的名字改为 a1,a 列的数据类型改为string,并将它放置在列 b 之后。新的表结构为: b
int, a1 string, c int.
ALTER TABLE test_col_change CHANGE b b1 INT
FIRST; 会将 b 列的名字修改为b1, 并将它放在第一列。新表的结构为: b1
int, a string, c int.
注意:对列的改变只会修改Hive 的元数据,而不会改变实际数据。用户应该确定保证元数据定义和实际数据结构的一致性。
5) 添加/替换列Add/ReplaceColumns
ALTER TABLE table_name ADD|REPLACE
COLUMNS (col_name data_type [COMMENTcol_comment],...)
ADD
COLUMNS 允许用户在当前列的末尾增加新的列,但是在分区列之前。
alter table test_col_change add columns (d
int);
describe test_col_change;
OK
a1 int
b1 string
c int
d
int
REPLACE COLUMNS 删除以后的列,加入新的列。只有在使用 native 的SerDE(DynamicSerDeorMetadataTypeColumnsetSerDe)的时候才可以这么做。
alter table test_col_change replace columns (c
int);
describetest_col_change;
OK
c int
6) 修改表的属性Alter Table Properties:
ALTER TABLE table_name SET
TBLPROPERTIES table_properties
table_properties: : (property_name =
property_value, property_name=property_value, ... )
用 户可以用这个命令向表中增加metadata,目前last_modified_user,last_modified_time属性都是由 Hive 自动管理的。用户可以向列表中增加自己的属性。可以使用 DESCRIBE EXTENDED TABLE 来获得这些信息。
alter table test_col_change set tblproperties
(‘key1‘=‘value1‘);
可以通过 describe extended test_col_change; 查看表的属性信息。
7) 修改表的序列化和反序列化属性:
ALTER TABLE table_name SET SERDE serde_class_name
[WITHSERDEPROPERTIESserde_properties]
ALTER TABLE table_name SET
SERDEPROPERTIES serde_properties
serde_properties: : (property_name =
property_value, property_name=property_value, ... )
这个命令允许用户向 SerDe 对象增加用户定义的元数据。Hive 为了序列化和反序列化数据,将会初始化 SerDe 属性,并将属性传给表的SerDe。如此,用户可以为自定义的 SerDe 存储属性。
8) 修改表的文件存储格式组织方式:
ALTER TABLE table_name SET FILEFORMAT
file_format
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...)
[SORTEDBY(col_name, ...)] INTO num_buckets BUCKETS
这个命令修改了表的物理存储属性。
更多内容请关注:http://bbs.superwu.cn