云数据库 GAUSSDB-ALTER TABLE PARTITION:语法格式
语法格式
修改分区表分区包括修改表分区主语法、修改表分区名称的语法和重置分区ID的语法。
- 修改表分区主语法。
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ];
其中action统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,无论这些子句的排序如何, GaussDB 总会先执行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 ] [ UPDATE GLOBAL INDEX ]
进行交换的普通表和分区必须满足如下条件:
- 普通表和分区的列数目相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数、列的压缩信息等。
- 普通表和分区的表压缩信息严格一致。
- 普通表索引和分区Local索引个数相同,且对应索引的信息严格一致。
- 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。
- 普通表不可以是临时表,分区表只能是范围分区表,列表分区表,哈希分区表或间隔分区表。
- 普通表和分区表上不可以有动态数据脱敏,行访问控制约束。
- row_clause子语法用于设置分区表的行迁移开关。
{ ENABLE | DISABLE } ROW MOVEMENT
- merge_clause子语法用于把多个分区合并成一个分区。一个命令中合并的源分区上限为300。
MERGE PARTITIONS { partition_name } [, ...] INTO PARTITION partition_name [ TABLESPACE tablespacename ] [ UPDATE GLOBAL INDEX ]
对于范围分区/间隔分区,MERGE分区要求源分区的范围连续递增,且MERGE后的分区名可以与最后一个源分区名相同;对于列表分区,则源分区无顺序要求,且MERGE后的分区名可以与任一源分区名相同。如果MERGE后的分区名与源分区名相同,视为同一个分区。
USTORE存储引擎表不支持在事务块/存储过程中执行ALTER TABLE MERGE PARTITIONS的操作。
- 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 } [ UPDATE GLOBAL INDEX ]
- SPLIT后的分区名可以与源分区名相同,但视为不同的分区。
- 范围分区表和间隔分区表指定切割点split_point_clause的语法为:
AT ( partition_value ) INTO ( PARTITION partition_name [ TABLESPACE tablespacename ] , PARTITION partition_name [ TABLESPACE tablespacename ] )
切割点的大小要位于正在被切割的分区的分区键范围内,指定切割点的方式只能把一个分区切割成两个新分区。
- 范围分区表和间隔分区表不指定切割点no_split_point_clause的语法为:
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支持的分区键个数最多为16,而partition_start_end_item仅支持1个分区键,其支持的数据类型参见•PARTITION BY RANGE [COLUMNS] (partition_key)。
- 在同一语句中partition_less_than_item和partition_start_end_item两者不可同时使用;不同split语句之间没有限制。
- 分区项partition_less_than_item的语法如下,其中最后一个分区可以不写分区范围定义,即VALUES LESS THAN (partition_value)部分,默认继承源分区范围定义的上界值。
PARTITION partition_name VALUES LESS THAN ( { partition_value | MAXVALUE } [, ...] ) [ TABLESPACE tablespacename ]
- 分区项partition_start_end_item的语法如下,其约束参见START END语法描述。
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]
- 列表分区表指定切割点split_point_clause的语法如下:
VALUES ( partition_value_list ) INTO ( PARTITION partition_name [ TABLESPACE tablespacename ] , PARTITION partition_name [ TABLESPACE tablespacename ] )
切割点必须是源分区的一个非空真子集,指定切割点的方式只能把一个分区切割成两个新分区。
- 列表分区表不指定切割点no_split_point_clause的语法如下,其中最后一个分区不能写分区范围定义,即VALUES (partition_value_list)部分,其范围等于源分区去掉其他子分区后的剩余集合。
INTO ( PARTITION partition_name VALUES (partition_value_list) [ TABLESPACE tablespacename ][, ...] )
- 最后一个新分区不能写分区范围定义,其范围等于源分区去掉其他子分区后的剩余集合。
- 不指定切割点的方式,每一个新分区都必须是源分区的一个非空真子集,且互不交叉。
- add_clause子语法用于为指定的分区表添加一个或多个分区。
ADD {partition_less_than_item | partition_start_end_item| partition_list_item }
分区项partition_list_item的语法如下。PARTITION partition_name VALUES (list_values_clause) [ TABLESPACE tablespacename ]
- partition_list_item支持最多16个分区键,其支持的数据类型参见•PARTITION BY LIST [COLUMNS] (partition_key)。
- 间隔/哈希分区表不支持添加分区。
- drop_clause子语法用于删除分区表中的指定分区。
DROP PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ]
- 哈希分区表不支持删除分区。
- 当分区表只有一个分区时,不能删除该分区。
- truncate_clause子语法用于清空分区表中的指定分区。
TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ]
- move_clause子语法用于移动分区到新的表空间。
- 修改表分区名称的语法。
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RENAME PARTITION { partion_name | FOR ( partition_value [, ...] ) } TO partition_new_name;
- 重置分区ID的语法。
ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RESET PARTITION;
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- 云数据库Gaussdb数据库索引_华为gaussdb__gaussdb 数据库
- GaussDB数据库SQL语法_SQL语法_CREATE_ALTER
- GaussDB版本查询_华为云GaussDB的作用_高斯数据库版本查询_华为云
- BPM流程_BPM的书写格式_BPM产品介绍
- MapReduce服务_什么是ClickHouse_如何使用ClickHouse
- 什么是Flink OpenSource SQL_数据湖探索_Flink OpenSource SQL
- 日志分析_日志结构化_日志格式化
- GaussDB(for MySQL)并行查询_GaussDB(for MySQL)内核_GaussDB(for MySQL)并行执行_PQ
- 连接RDS for MySQL数据库_华为云数据库RDS_语法_数据库连接_连接命令