hive修改已经存在的表

修改已经存在的表:

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

关注超人学院微信二维码:

时间: 2024-08-18 03:26:44

hive修改已经存在的表的相关文章

创建Hive/hbase相关联的表异常

hive> CREATE TABLE hperson(id string, name string,email string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":id,cf1:name,cf2:email") TBLPROPERTIES ("hbase.table.

hadoop笔记之Hive的数据存储(桶表)

Hive的数据存储(桶表) Hive的数据存储(桶表) 桶表 桶表是对数据进行哈希取值,然后放到不同文件中存储. 比如说,创建三个桶,而创建桶的原则可以按照左边表中学生的名字来创建对应的桶.这样子把左边的数据存到桶里面来的时候可以把学生名字经过哈希运算,把相同哈希运算的值的列存放在同一个桶当中.比如Tom.Jerry.Scott经运算以后它们的哈希值是一样的,那么这三个人的信息就会存放在相同的一个桶里面. 有了桶表以后,就能够降低系统的文件块,从而提高查询速度 ○ 如何创建桶表?(用名字进行创建

hive中与hbase外部表join时内存溢出(hive处理mapjoin的优化器机制)

与hbase外部表(wizad_mdm_main)进行join出现问题: CREATE TABLE wizad_mdm_dev_lmj_edition_result as select * from  wizad_mdm_dev_lmj_20141120 as w JOIN wizad_mdm_main as a ON (a.rowkey = w.guid); 程序启动后,死循环,无反应.最后在进行到0.83时,内存溢出失败. 原因: 默认情况下,Hive会自动将小表加到DistributeCa

快速修改MySQL某张表的表结构

快速修改MySQL某张表的表结构--摘录自<MySQL管理之道> ALTER TABLE 表名 MODIFY 列名 数据类型; 这个命令可以修改表结构 此外,也可以如下方法修改表结构: 先创建一张表,如下: > create table t1 (id int,        name varchar(5),        rmb decimal(9,1)); 如果要修改name列为varchar(10)的,可以这样操作:alter table t1 modify name varchar

修改DEDE系统数据库表前缀

1,修改之前我们先备份下数据(哥们儿之前没有备份,我艹,害苦了),备份的操作过程是:网站后台------系统------数据库备份/还原-------然后按提交.默认保存的数据在data/backupdata目录下. 2,接着修改目录下data/backupdata目录下的所有txt文件的表前缀,把dede_修改您需要的表前缀即可.如我是修改成xl_的表前缀. 3, 紧接着打开data/backupdata目录下的所有txt文件,把文件里面的dede_表前缀替换成,xl_ (用DW打开,批量替换

Mysql批量删除和修改某个前缀的表

1.批量删除某个前缀的表名,首先选出这些个表. select concat( 'drop table ', table_name, ';' ) from information_schema.tables Where table_name like 'dede_%'; 以上为删除date_为前缀的表,然后复制生成脚本运行即可完成删除. 2.修改某个前缀的表名 select concat( 'alter table ', table_name, 'rename to', table_name, '

修改SQL Server数据库表的创建时间最简单最直接有效的方法

说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,因为这种操作方式是通用的,即使是对现在最新的SQL Server数据库里面的操作也是一样的,相信很多朋友都会使用到. ----------------------分割线-------------------- 网络上曾经有很多人询问怎么修改SQL Server数据库表的创建时间,但得到的回答多种多样,有的说需要使用某些软件进行修改,有的说需要修改注册表等等,其实这些方法实施起来不但麻

Hive修改表

本章将介绍如何修改表的属性,如,修改表名,修改列名,添加列,并删除或替换列. Alter Table 语句 它是在Hive中用来修改的表. 语法 声明接受任意属性,我们希望在一个表中修改以下语法. ALTER TABLE name RENAME TO new_name ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...]) ALTER TABLE name DROP [COLUMN] column_name ALTER TABLE name

Hive通过查询语句向表中插入数据过程中发现的坑

前言 最近在学习使用Hive(版本0.13.1)的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug.总而言之,这些都需要使用Hive的开发人员额外注意.本文旨在列举我发现的2个通过查询语句向表中插入数据过程中的问题,希望大家注意. 数据准备 为了验证接下来出现的问题,需要先准备两张表employees和staged_employees,并准备好测试数据.首先使用以下语句创建表employees: create table employ