tencent cloud

TDSQL-C MySQL 版

exchange subpartition template

Download
聚焦模式
字号
最后更新时间: 2024-10-09 10:26:35

功能介绍

exchange subpartition template 功能允许用户将一个分区的子分区模板交换到另一个分区中,同时将另一个分区的子分区模板交换到原来的分区中。这样,就可以快速更改分区表的分区策略,而无需重新创建表或者进行数据迁移。

支持版本

内核版本 TXSQL 8.0 3.1.15及以上。

适用场景

适用于需要快速交换表中数据的场景。

使用说明

使用语法

ALTER TABLE pt EXCHANGE SUBPARTITION TEMPLATE p WITH TABLE nt WITH VALIDATION / WITHOUT VALIDATION

示例

-- 将s20240111中的数据从hash_range_1转到hash_range_2

CREATE TABLE hash_range_1(
id INT NOT NULL,
fname VARCHAR(30),
hired date NOT NULL DEFAULT '9999-12-31',
primary key (id, hired))
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY LIST(murmurHashCodeAndMod(id,2))
SUBPARTITION BY RANGE(tdsql_day(hired))
SUBPARTITION TEMPLATE
(SUBPARTITION s20240111 VALUES LESS THAN (20240111),
SUBPARTITION s20240112 VALUES LESS THAN (20240112),
SUBPARTITION s20240113 VALUES LESS THAN (20240113))
(PARTITION p1 VALUES IN (0),
PARTITION p2 VALUES IN (1));

-- (hash_range_2与hash_range_1完全相同)
CREATE TABLE hash_range_2(
id INT NOT NULL,
fname VARCHAR(30),
hired date NOT NULL DEFAULT '9999-12-31',
primary key (id, hired))
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY LIST(murmurHashCodeAndMod(id,2))
SUBPARTITION BY RANGE(tdsql_day(hired))
SUBPARTITION TEMPLATE
(SUBPARTITION s20230111 VALUES LESS THAN (20240111),
SUBPARTITION s20230112 VALUES LESS THAN (20240112),
SUBPARTITION s20230113 VALUES LESS THAN (20240113))
(PARTITION p1 VALUES IN (0),
PARTITION p2 VALUES IN (1));

-- 新建一个临时temp表,一级分区和表结构和hash_range_1一致
CREATE TABLE temp(
id INT NOT NULL,
fname VARCHAR(30),
hired date NOT NULL DEFAULT '9999-12-31',
primary key (id, hired))
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY LIST(murmurHashCodeAndMod(id,2))
(PARTITION p1 VALUES IN (0),
PARTITION p2 VALUES IN (1));

-- 语法演示
-- 第一步: hash_range_1--> temp
ALTER TABLE hash_range_1
EXCHANGE subpartition template s20240111
with table temp with validation;
-- 第二步: temp --> hash_range_2
ALTER TABLE hash_range_2
EXCHANGE subpartition template s20240111
with table temp with validation;

使用限制

pt 和 nt 表不能有全局索引。
pt 和 nt 表不能有触发器和 check 约束。
pt 和 nt 表的分区类型以及子分区类型只支持 range 和 list。
pt 和 nt 表的一级分区定义必须保持一致。

数据校验说明

同官方一样,显式指定 WITH VALIDATION 来进行数据校验或者 WITHOUT VALIDATION 不进行数据校验。默认进行数据校验。
数据校验主要是验证 nt 表中一级分区的数据是否满足 pt 表中对应一级分区中,二级分区的定义。在上面的例子中,如果在第一步中 temp 表 p1 分区有 hired 列存在数据满足 tdsql_day(hired)>=20240111,那么将不满足二级分区定义:SUBPARTITION s20240111 VALUES LESS THAN (20240111) 数据校验将会失败。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈