返回首页

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

更新日期:2024年09月11日

功能描述
修改表分区,包括增删分区、切割分区、合成分区以及修改分区属性等。
注意事项

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

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

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

若添加RANGE 分区,添加分区键值要大于分区表中最后一个范围分区的上边界。

若添加LIST 分区,添加分区键值不能与现有分区键值重复。

不支持添加HASH 分区。

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

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

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

Value 分区表不支持相应的Alter Partition 操作。

列存分区表不支持切割分区。

间隔分区表不支持添加分区。

哈希分区表不支持切割分区,不支持合成分区,不支持添加和删除分区。

列表分区表不支持切割分区,不支持合成分区。

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

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
769
修改表分区主语法。
ALTER TABLE [ IF EXISTS ] { table_name
[*] | ONLY table_name | ONLY
( table_name
)}
action [, ... ];

action 统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,
无论这些子句的排序如何,GBase 8c 总会先执行DROP PARTITION 再执行ADD
PARTITION 操作,最后顺序执行其它分区维护操作。
move_clause
|
exchange_clause
|
row_clause
|
merge_clause
|
modify_clause
|
split_clause
|
add_clause
|
drop_clause
|
truncate_clause

move_clause 子语法用于移动分区到新的表空间。
MOVE PARTITION { partion_name | FOR ( partition_value [, ...] ) } TABLESPACE
tablespacename

exchange_clause 子语法用于把普通表的数据迁移到指定的分区。
EXCHANGE PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) }
WITH TABLE {[ ONLY ] ordinary_table_name | ordinary_table_name * | ONLY
( ordinary_table_name
)}
[ { WITH | WITHOUT } VALIDATION ] [ VERBOSE ]
进行交换的普通表和分区必须满足如下条件:

普通表和分区的列数目相同,
对应列的信息严格一致,
包括:
列名、
列的数据类型、
列约束、列的Collation 信息、列的存储参数、列的压缩信息等。

普通表和分区的表压缩信息严格一致。

普通表和分区的索引个数相同,且对应索引的信息严格一致。

普通表和分区的表约束个数相同,且对应表约束的信息严格一致。

普通表不可以是临时表,分区表只能是范围分区表,列表分区表,哈希分区表。

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

普通表和分区表上不可以有动态数据脱敏,行访问控制约束。

列表分区表,哈希分区表不能是列存储。

List/Hash/Range 类型分区表支持exchange_clause。

完成交换后,
普通表和分区的数据被置换,
同时普通表和分区的表空间信息被置换。
此时,普通表和分区的统计信息变得不可靠,需要对普通表和分区重新执行
analyze。

由于非分区键不能建立本地唯一索引,
只能建立全局唯一索引,
所以如果普通表含
有唯一索引时,会导致不能交换数据。

row_clause 子语法用于设置分区表的行迁移开关。
{ ENABLE | DISABLE } ROW MOVEMENT

merge_clause 子语法用于把多个分区合并成一个分区。
MERGE PARTITIONS { partition_name } [, ...] INTO PARTITION partition_name
[ TABLESPACE tablespacename ]

modify_clause 子语法用于设置分区索引是否可用。
MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL
INDEXES }

split_clause 子语法用于把一个分区切割成多个分区。
SPLIT PARTITION { partition_name | FOR ( partition_value [, ...] ) }
{ split_point_clause | no_split_point_clause }

指定切割点split_point_clause 的语法为。
AT ( partition_value ) INTO ( PARTITION partition_name [ TABLESPACE
tablespacename ] , PARTITION partition_name [ TABLESPACE tablespacename ] )

列存分区表不支持切割分区。

切割点的大小要位于正在被切割的分区的分区键范围内,
指定切割点的方式只能把
一个分区切割成两个新分区。

不指定切割点no_split_point_clause 的语法为:

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
771
INTO { ( partition_less_than_item [, …] ) | ( partition_start_end_item [, …] ) }

不指定切割点的方式,partition_less_than_item 指定的第一个新分区的分区键要大
于正在被切割的分区的前一个分区(如果存在的话)的分区键,
partition_less_than_item 指定的最后一个分区的分区键要等于正在被切割的分区的
分区键大小。

不指定切割点的方式,partition_start_end_item 指定的第一个新分区的起始点(如
果存在的话)
必须等于正在被切割的分区的前一个分区
(如果存在的话)
的分区键,
partition_start_end_item 指定的最后一个分区的终止点(如果存在的话)必须等于
正在被切割的分区的分区键。

partition_less_than_item 支持的分区键个数最多为4,而partition_start_end_item 仅
支持
1
个分区键,其支持的数据类型参见[PARTITION
BY
RANGE(parti...](CREATE-TABLE-PARTITION.html#zh-cn_topic_0283136653_zh-cn
_topic_0237122119_zh-cn_topic_0059777586_l00efc30fe63048ffa2ef68c5b18bb455)。

在同一语句中partition_less_than_item 和partition_start_end_item 两者不可同时使
用;不同split 语句之间没有限制。

add_clause 子语法用于为指定的分区表添加一个或多个分区。
ADD PARTITION ( partition_col1_name = partition_col1_value [, partition_col2_name =
partition_col2
_value ] [, ...] )
[ LOCATION 'location1' ]
[ PARTITION (partition_colA_name = partition_colA_value [, partition_colB_name =
partition_col
B_value ] [, ...] ) ]
[ LOCATION 'location2' ]
ADD {partition_less_than_item | partition_start_end_item}

分区项partition_less_than_item 的语法为

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
772
PARTITION partition_name VALUES LESS THAN ( { partition_value | MAXVALUE }
[, ...] ) [ TABLES
PACE tablespacename ]

分区项partition_start_end_item 的语法为
PARTITION partition_name {
{START(partition_value) END (partition_value) EVERY (interval_value)} |
{START(partition_value) END ({partition_value | MAXVALUE})} |
{START(partition_value)} |
{END({partition_value | MAXVALUE})}
} [TABLESPACE tablespace_name]

drop_clause 子语法用于删除分区表中的指定分区。
DROP PARTITION
{ partition_name
| FOR (
partition_value [, ...] )
}

间隔/哈希分区表不支持添加分区。

truncate_clause 子语法用于清空分区表中的指定分区。
TRUNCATE PARTITION
{ partition_name | FOR (
partition_value [, ...] )
}
[ UPDATE GLOBAL INDEX ]
NOTICE: 'truncate_clause' is only avaliable in CENTRALIZED mode!
修改表分区名称的语法:
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )}
RENAME PARTITION { partion_name | FOR ( partition_value [, …] ) } TO
partition_new_name;
参数说明

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

partition_name

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
773
分区名。
取值范围:已存在的分区名。

tablespacename
指定分区要移动到哪个表空间。
取值范围:已存在的表空间名。

partition_value
分区键值。
通过PARTITION FOR ( partition_value [, …] )子句指定的这一组值,可以唯一确定一个
分区。
取值范围:需要进行重命名的分区的分区键的取值范围。

UNUSABLE LOCAL INDEXES
设置该分区上的所有索引不可用。

REBUILD UNUSABLE LOCAL INDEXES
重建该分区上的所有索引。

ENABLE/DISABLE ROW MOVEMET
行迁移开关。
如果进行UPDATE 操作时,更新了元组在分区键上的值,造成了该元组所在分区发生
变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。
取值范围:

ENABLE:打开行迁移开关。

DISABLE:关闭行迁移开关。
默认是打开状态。

ordinary_table_name
进行迁移的普通表的名称。
取值范围:已存在的普通表名。

{ WITH | WITHOUT } VALIDATION

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
774
在进行数据迁移时,是否检查普通表中的数据满足指定分区的分区键范围。
取值范围:

WITH:对于普通表中的数据要检查是否满足分区的分区键范围,如果有数据不满
足,则报错。

WITHOUT:对于普通表中的数据不检查是否满足分区的分区键范围。
默认是WITH 状态。
由于检查比较耗时,
特别是当数据量很大的情况下更甚。
所以在保证当前普通表中的数
据满足分区的分区键范围时,可以加上WITHOUT 来指明不进行检查。

VERBOSE
在VALIDATION 是WITH 状态时,如果检查出普通表有不满足要交换分区的分区键范
围的数据,那么把这些数据插入到正确的分区,如果路由不到任何分区,再报错。

只有在VALIDATION 是WITH 状态时,才可以指定VERBOSE。

partition_new_name
分区的新名称。
取值范围:字符串,要符合标识符的命名规范。
示例
请参考CREATE TABLE PARTITION 的示例。
相关命令
CREATE TABLE PARTITION,DROP TABLE

关键字是为语句和除了系统级别命令的所有命令保留的词语。
当关键字出现在语法图表中时,
它以大写字母显示。
在命令中使用关键字时,
可用大写
或小写字母写关键字,但是必须严格按照语法图表中所显示的来拼写关键字。
还必须严格按照语法图表中所显示的在语句和命令中使用标点。

功能说明
查看创建或修改后的存储过程或函数的状态。
语法格式
SHOW {PROCEDURE | FUNCTION} STATUS;
示例
示例1:显示已经创建成功的函数的状态。
gbase> SHOW FUNCTION STATUS\G
*************************** 1. row ***************************
Vc: vc1
Db: demo
Name: hello
Type: FUNCTION
Definer: root@%
Modified: 2020-07-15 19:26:08
Created: 2020-07-15 19:26:08
Security_type: DEFINER
Comment:
character_set_client: utf8

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1346
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 row in set (Elapsed: 00:00:00.00)
示例2:显示vc1 的demo 库下已经创建成功的存储过程的状态。
gbase>
SHOW PROCEDURE STATUS where vc='vc1' and db='demo'\G
*************************** 1. row ***************************
Vc: vc1
Db: demo
Name: proc_1
Type: PROCEDURE
Definer: root@%
Modified: 2020-07-15 19:25:14
Created: 2020-07-15 19:25:14
Security_type: DEFINER
Comment:
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 row in set (Elapsed: 00:00:00.00)