在PolarDB-X的AUTO模式数据库中,所有表都从属且只属于一个表组,同一个表组内的表分区方式一致,同一表组内的表之间的关联查询可以下推到存储节点执行,执行效率得到了很大的提高。本语法仅适用于AUTO模式数据库。
为了方便将表关联到同一个表组,PolarDB-X提供了以下命令,对表组进行管理。
修改表的表组
支持将表的表组修改为任意手动创建的表组。
语法
ALTER TABLE #tbName SET TABLEGROUP=#tgName [force]
限制
本文以将表tb1的表组修改为目标表组mytg1为例说明该语法的限制条件。
执行以下命令,创建表tb1。并通过SHOW topology FROM tb1
命令,查看到tb1中的p1分布在存储节点DN1,p2分布在存储节点DN2。
CREATE TABLE tb1(a int) PARTITION BY RANGE(a)
(
PARTITION p1 VALUES LESS THAN(20),
PARTITION p2 VALUES LESS THAN(100)
)
修改表tb1所属的表组为目标表组mytg1,具体限制情况如下表所示:
语法 | 目标表组分区情况 | 是否支持执行 |
不带force:
说明 源表和目标表组的分区名称、分区方式(包括分区类型、分区键的个数和分区键的数据类型)完全一致,各个分区对应的物理位置也完全一致(在同一存储节点)时,允许执行该语句。 | 目标表组mytg1的分区如下:
| 分区名称不一致,不允许执行。 |
目标表组mytg1的分区如下,并且p1分布在存储节点DN1,p2分布在存储节点DN3。
| 源表tb1和目标表组mytg1的分区方式虽然完全一致,但是分区的物理位置不一致,不允许执行。 | |
目标表组mytg1的分区如下,并且p1分布在DN1,p2分布在DN2。
| 源表tb1和mytg1的分区方式完全一致,对应分区的物理位置也完全一致,允许执行,执行成功后将tb1的表组变更为mytg1。 | |
带force option:
| 说明 源表和目标表组的分区方式完全相同,但对应分区的物理位置不完全相同,会涉及源表向目标表组分区的数据迁移。 目标表组mytg1的分区如下,并且p1分布在DN1,p2分布在DN3。
| 允许执行,由于源表tb1的p2在DN2,执行成功后会将tb1的p2从DN2迁移到DN3,并且将表组修改为mytg1。 |
源表tb1和目标表组mytg1的分区键的数据类型或个数不一致。 | 不允许执行。 | |
目标表组mytg1的分区如下,并且除分区名字外,源表tb1的分区方式与表组mytg1的一致。
| 允许执行。执行成功后tb1的分区名会和表组mytg1保持一致,将tb1的p2重命名为p3,并且将tb1的表组修改为mytg1。 | |
源表tb1和目标表组mytg1的分区方式不一致,并且mytg1的分区如下:
| 允许执行。会将tb1按照表组mytg1的分区方式做repartition操作,使tb1与表组mytg1的分区方式保持一致,对应分区的物理位置也完全一致,执行成功后tb1的表组变更为mytg1,表tb1的定义如下:
|
将表批量添加到指定表组
将表加入到表组中, 当表组为空时,会从table_list中选一个参照表,参照表决定空表组的分区物理位置,重新创建分区组的元数据,其他表通过调整分区向参照表对齐。
语法
ALTER TABLEGROUP #tgName ADD TABLES table_list [force]
限制
此命令的限制与ALTER TABLE #tbName SET TABLEGROUP=#tgName [force]
命令保持一致。
PolarDB-X支持将多个表组进行合并,详细步骤请参见表组合并(AUTO模式)。