修改数据库属性
功能描述
ALTER DATABASE语句用于修改数据库的属性或位置。DATABASE、SCHEMA和NAMESPACE关键字可互换使用。如果数据库不存在,会报错。
语法格式
设置属性
ALTER { DATABASE | SCHEMA | NAMESPACE } database_name
SET { DBPROPERTIES | PROPERTIES } ( property_name = property_value [, ...] ) 删除属性
ALTER { DATABASE | SCHEMA | NAMESPACE } database_name
UNSET { DBPROPERTIES | PROPERTIES } ( property_name [, ...] ) 修改位置
ALTER { DATABASE | SCHEMA | NAMESPACE } database_name
SET LOCATION 'new_location' 关键字
- DATABASE / SCHEMA / NAMESPACE:三者等效,可互换使用,建议使用DATABASE。
- SET DBPROPERTIES / SET PROPERTIES:设置数据库属性,DBPROPERTIES和PROPERTIES等效。
- UNSET DBPROPERTIES / UNSET PROPERTIES:删除数据库属性。如果指定的属性不存在,命令会忽略并成功执行。
- SET LOCATION:修改数据库的默认存储位置。
参数说明
| 参数 | 是否必选 | 描述 |
|---|---|---|
| database_name | 是 | 要修改的数据库名称。 |
| SET DBPROPERTIES / SET PROPERTIES | 是 | 设置数据库属性。指定的属性值会覆盖同名的已有属性值。主要用于记录数据库的元数据信息。 |
| UNSET DBPROPERTIES / UNSET PROPERTIES | 是 | 删除数据库属性。如果指定的属性不存在,命令会忽略并成功执行。 |
| property_name | 是 | 属性名称。 |
| property_value | 是(SET时) | 属性值。 |
| SET LOCATION | 是 | 修改数据库的默认存储位置。不会将当前数据库目录中的数据从旧位置移动到新位置,也不影响数据库下已有表/分区的位置。 |
注意事项
- 修改数据库位置不会自动迁移已有数据,仅影响后续新建表的默认位置。
- SET LOCATION的路径需为OBS格式(如obs://bucket-name/path/)。
- DATABASE、SCHEMA和NAMESPACE关键字可互换使用,建议使用DATABASE。
- DBPROPERTIES和PROPERTIES关键字可互换使用。
- 使用DESCRIBE DATABASE EXTENDED可验证属性和位置的修改结果。
示例1:设置数据库属性
创建数据库inventory,并设置属性。
CREATE DATABASE IF NOT EXISTS inventory
LOCATION 'obs://my-bucket/inventory/';
ALTER DATABASE inventory SET DBPROPERTIES ('Edited-by' = 'John', 'Edit-date' = '01/01/2001'); 验证属性:
DESCRIBE DATABASE EXTENDED inventory;
结果示例:
| database_description_item | database_description_value |
|---|---|
| Database Name | inventory |
| Location | obs://my-bucket/inventory/ |
| Properties | ((Edit-date,01/01/2001), (Edited-by,John)) |
示例2:修改数据库位置
ALTER DATABASE inventory SET LOCATION 'obs://my-bucket/new-inventory/';
验证新位置:
DESCRIBE DATABASE EXTENDED inventory;
示例3:删除数据库属性
ALTER DATABASE inventory UNSET DBPROPERTIES ('Edited-by'); 删除不存在的属性时命令会忽略并成功执行:
ALTER DATABASE inventory UNSET DBPROPERTIES ('non-existent'); 示例4:使用SCHEMA/NAMESPACE关键字
SCHEMA、NAMESPACE与DATABASE等效,可替换使用。
ALTER SCHEMA inventory SET DBPROPERTIES ('Owner' = 'Admin');
ALTER NAMESPACE inventory SET DBPROPERTIES ('Department' = 'Engineering');