exchange subpartition template

最近更新时间:2024-09-05 21:47:01

我的收藏

功能介绍

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

支持版本

内核版本 TXSQL 8.0 3.1.15及以上。

适用场景

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

使用说明

使用语法

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

使用限制

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

示例

-- 将 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;

数据校验说明

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