返回首页

gbase数据、南大通用产品文档:GBase8cALTER TABLE SUBPARTITION

更新日期:2024年09月11日

功能描述
修改二级分区表分区,包括增删分区、清空分区、切割分区等。
注意事项

目前二级分区表只支持增删分区、清空分区、切割分区。

添加分区的表空间不能是PG_GLOBAL。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
775

添加分区的名称不能与该分区表已有一级分区和二级分区的名称相同。

添加分区的分区键值要和分区表的分区键的类型一致。

若添加RANGE 分区,
添加分区键值要大于分区表中最后一个范围分区的上边界。
若需
要在有MAXVALUE 分区的表上新增分区,建议使用SPLIT 语法。

若添加LIST 分区,添加分区键值不能与现有分区键值重复。若需要在有DEFAULT 分
区的表上新增分区,建议使用SPLIT 语法。

不支持添加HASH 分区。只有一种情况例外,二级分区表的二级分区方式为HASH 且
一级分区方式不是HASH,此时支持新增一级分区并创建对应的二级分区。

如果目标分区表中已有分区数达到了最大值1048575,则不能继续添加分区。

当分区表只有一个一级分区或二级分区时,不能删除该分区。

不支持删除HASH 分区。

选择分区使用PARTITION FOR(),括号里指定值个数应该与定义分区时使用的列个数
相同,并且一一对应。

切割分区只能对二级分区(叶子节点)进行切割,被切割分区只能是Range、List 分区
策略,不支持切割hash 分区策略。List 分区策略只能是default 分区才能被切割。

只有分区表的所有者或者被授予了分区表ALTER 权限的用户有权限执行ALTER
TABLE PARTITION 命令,系统管理员默认拥有此权限。

如果alter 语句不带有UPDATE GLOBAL INDEX,那么原有的GLOBAL 索引将失效,
查询时将使用其他索引进行查询;如果alter 语句带有UPDATEGLOBAL INDEX,原有
的GLOBAL 索引仍然有效,并且索引功能正确。
语法格式
修改表分区主语法。
ALTER TABLE [ IF EXISTS ] { table_name
[*] | ONLY table_name | ONLY ( table_name
)}
action [, ... ];

其中action 统指如下分区维护子语法。
add_clause
|
drop_clause
|
split_clause
|

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
776
truncate_clause

add_clause 子语法用于为指定的分区表添加一个或多个分区。语法可以作用在一级分区
上。
ADD {partition_less_than_item | partition_list_item } [ ( subpartition_definition_list ) ]
也可以作用在二级分区上。
MODIFY PARTITION partition_name ADD subpartition_definition
其中,分区项partition_less_than_item 为RANGE 分区定义语法,具体语法如下。
PARTITION partition_name VALUES LESS THAN ( partition_value | MAXVALUE )
[ TABLESPACE tablespacename ]
分区项partition_list_item 为LIST 分区定义语法,具体语法如下。
PARTITION partition_name VALUES ( partition_value [, ...] | DEFAULT ) [ TABLESPACE
tablespacename ]
subpartition_definition_list 为1 到多个二级分区subpartition_definition 对象,
subpartition_definition 具体语法如下。
SUBPARTITION subpartition_name [ VALUES LESS THAN ( partition_value | MAXVALUE )
| VALUES ( partition_value [, ...] | DEFAULT )]
[ TABLESPACE tablespace ]
须知:若一级分区为HASH 分区,不支持以ADD 形式新增一级分区;若二级分区
为HASH 分区,不支持以MODIFY 形式新增二级分区。

drop_clause 子语法用于删除分区表中的指定分区。语法可以作用在一级分区上。
DROP PARTITION
{ partition_name | FOR (
partition_value )
} [ UPDATE GLOBAL
INDEX ]
也可以作用在二级分区上。
DROP SUBPARTITION
{ subpartition_name | FOR (
partition_value,
subpartition_value )
} [ UPDATE GLOBAL INDEX ]
须知:

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
777
若一级分区为HASH 分区,不支持删除一级分区;若二级分区为HASH 分区,不支持删除
二级分区。
不支持删除唯一子分区。

split_clause 子语法用于把一个分区切割成多个分区。
SPLIT SUBPARTITION { subpartition_name} { split_point_clause
} [ UPDATE GLOBAL
INDEX ]
指定切割点split_point_clause 的语法为:
AT ( subpartition_value ) INTO ( SUBPARTITION subpartition_name [ TABLESPACE
tablespacename ] , SUBPARTITION subpartition_name [ TABLESPACE tablespacename ] )
须知:
切割点的大小要位于正在被切割的分区的分区键范围内。
只能把一个分区切割成两个新分区。

指定Range 分区策略切割点split_point_clause 的语法为:
AT ( subpartition_value ) INTO ( SUBPARTITION subpartition_name [ TABLESPACE
tablespacename ] , SUBPARTITION subpartition_name [ TABLESPACE tablespacename ] )

指定List 分区策略切割点split_point_clause 的语法为:
VALUES ( subpartition_value ) INTO ( SUBPARTITION subpartition_name [ TABLESPACE
tablespacename ] , SUBPARTITION subpartition_name [ TABLESPACE tablespacename ] )
须知:
切割点的大小要位于正在被切割的分区的分区键范围内。
只能把一个分区切割成两个新分区。
Range 分区策略切割点是把当前分区以此切割点分割为两个分区(小于此分割点为一个分
区,大于此分割点为另一个分区)
,所以Range 分区策略切割点只能为一个。List 分区策略
切割点可以为多个,但不超过64 个,即把这些切割点从当前分区的边界值提取出来作为一
个新分区,当前分区剩余边界值作为另一个新分区。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
778

truncate_clause 子语法用于清空分区表中的指定分区。
TRUNCATE SUBPARTITION
{ subpartition_name } [ UPDATE GLOBAL INDEX ]
参数说明

table_name
分区表名。
取值范围:已存在的分区表名。

subpartition_name
二级分区名。
取值范围:已存在的二级分区名。

tablespacename
指定分区要移动到哪个表空间。
取值范围:已存在的表空间名。
示例
请参考CREATE TABLE SUBPARTITION 的示例。

语法格式
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION
partition_spec, ...][IGNORE PROTECTION] [PURGE];
示例
示例1:删除分区
gbase> ALTER TABLE t_hive DROP IF EXISTS PARTITION (id = 1);
Query OK, 0 rows affected

函数说明
不同数字进制间的转换。将N 由from_base 进制转化为to_base 进制,返回值为
to_base 进制形式的字符串,如有任意一个参数为NULL,则返回值为NULL。参
数N 为整数或字符串,
最小为2 进制,
最大为36 进制。
如果to_base 是一个负数,
则N 被看作一个带符号数,否则N 被看作无符号数。
CONV(N,10,2)等价于BIN(N)。
示例
示例1:将“a”由16 进制转为2 进制。
gbase> SELECT CONV('a',16,2) FROM dual;
+----------------+
| CONV('a',16,2) |
+----------------+
| 1010
|
+----------------+
1 row in set
示例2:将“6E”由18 进制转为8 进制。
gbase> SELECT CONV('6E',18,8) FROM dual;
+-----------------+
| CONV('6E',18,8) |
+-----------------+
| 172
|
+-----------------+
1 row in set
示例3:将“-17”由10 进制转为-18 进制。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
685
gbase> SELECT CONV(-17,10,-18) FROM dual;
+------------------+
| CONV(-17,10,-18) |
+------------------+
| -H
|
+------------------+
1 row in set
示例4:将“10+'10'+'10'+0xa”由10 进制转为10 进制。
gbase> SELECT CONV(10+'10'+'10'+0xa,10,10) FROM dual;
+------------------------------+
| CONV(10+'10'+'10'+0xa,10,10) |
+------------------------------+
| 40
|
+------------------------------+
1 row in set