首页 > 其他 > 详细

hive修改已经存在的表

时间:2015-05-13 02:08:23      阅读:323      评论:0      收藏:0      [点我收藏+]

修改已经存在的表:
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?列的名字改为?a1a?列的数据类型改为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?SerDEDynamicSerDeorMetadataTypeColumnsetSerDe)的时候才可以这么做。
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_userlast_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

关注超人学院微信二维码:bubuko.com,布布扣

hive修改已经存在的表

原文:http://crxy2016.iteye.com/blog/2210576

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!