# ALTER TABLE
#### 功能描述
修改表，包括修改表的定义、重命名表、重命名表中指定的列、添加/更新多个列、将列存改为HStore opt表等。
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
- 如需使用实时数仓能力，请在DWS控制台创建集群时，选择**存算一体1:4云盘规格** ，了解更多参见[存算一体规格](https://support.huaweicloud.com/productdesc-dws/dws_01_00018.html)。
- 创建DWS集群选择**1:8云盘规格** 为标准数仓，**1:4云盘规格**为实时数仓，以下内容描述的"实时数仓"、"标准数仓"即通过以上规格区分。
 
#### 注意事项
- 通过ALTER修改enable_hstore值可以将列存表变成HStore表，或者将HStore修改成列存表。但需要注意enable_delta为on时，无法设置enable_hstore为on。
- 对于部分ALTER操作（修改列类型，分区合并，添加NOT NULL约束，添加主键约束），HStore表需要先将数据MERGE到主表然后再执行原有的ALTER逻辑，这可能会带来额外的性能开销， 性能影响大小与delta表的数据量相关。
- 当需要增加列时， 建议不要与其它类型的ALTER（比如修改列类型等）组合使用，在一条ALTER里只有ADD COLUMN情况下，由于不需要做FULL MERGE，性能会有很大提升。
- 不支持修改存储参数ORIENTATION。
 
#### 修改表属性
使用语法：
```
ALTER TABLE [ IF EXISTS ] <table_name> SET  ( {ENABLE_HSTORE = ON} [, ... ] );
```
将列存表修改成HStore表：
```
CREATE TABLE alter_test(a int, b int) WITH(ORIENTATION = COLUMN);
ALTER TABLE alter_test SET (ENABLE_HSTORE = ON);
```
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/notice_3.0-zh-cn.png)
当需要使用HStore表时，一定要同步修改如下参数的默认值，否则会导致HStore性能严重劣化，推荐的默认配置是
autovacuum_max_workers_hstore=3，autovacuum_max_workers=6，autovacuum=true。
#### 增加列
使用语法：
```
ALTER TABLE [ IF EXISTS ] <table_name> ADD COLUMN <new_column> <data_type> [ DEFAULT <default_value>];
```
示例：
创建表alter_test2并对其增加列：
```
CREATE TABLE alter_test2(a int, b int) WITH(ORIENTATION = COLUMN,ENABLE_HSTORE_OPT = ON);
ALTER TABLE alter_test ADD COLUMN c int;
```
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
增加列时不建议在同一个SQL中与其它ALTER组合使用。
#### 重命名
使用语法：
```
ALTER TABLE [ IF EXISTS ] <table_name> RENAME TO <new_table_name>;
```
示例：
创建表alter_test3并对其重命名为alter_new：
```
CREATE TABLE alter_test3(a int, b int) WITH(ORIENTATION = COLUMN,ENABLE_HSTORE_OPT = ON);
ALTER TABLE alter_test3 RENAME TO alter_new;
```
