CREATE PARTITION POLICY

最近更新时间:2025-12-24 12:03:42

我的收藏

功能描述

显式创建分区亲和性策略。亲和性可用于控制数据的放置方式以及数据之间的亲和关系使其在自动调度时遵守预设的策略。通过亲和性策略,用户可实现将不同表的分区绑定在同一物理节点,减少分布式开销的效果。

权限要求

无。

语法

CREATE PARTITION POLICY [IF not EXISTS] partition_policy_name
[partition_clause] [opt_using_distribution_policy];
partition_clause:
PARTITION BY HASH (INT) PARTITIONS partition_num
PARTITION BY KEY COLUMNS columns_num PARTITIONS partition_num
opt_using_distribution_policy:
USING DISTRIBUTION POLICY distribution_policy_name

参数说明

参数
是否必选
说明
partition_policy_name
必选
分区亲和性策略的名称。
partition_clause
可选
用于指定分区亲和性策略的结构。
如果不指定,则创建的是非分区结构的亲和性策略(用于普通表的绑定)。
如果指定,则创建具有分区结构的亲和性策略(用于分区表的绑定)。
其中partition_num 指定分区数量,columns_num指定分区列的数量,只有当分区表的属性与之相符时,才能绑定成功。
opt_using_distribution_policy
可选
用于指定亲和性策略是否绑定了分布式策略。请提前创建数据分布策略,详细请咨询技术支持工程师。

示例

创建非分区结构的亲和性策略。
tdsql [(none)]> CREATE PARTITION POLICY pp1;
Query OK, 0 rows affected (0.07 sec)


tdsql [test]> CREATE TABLE tbl1(id INT) USING PARTITION policy pp1;
Query OK, 0 rows affected

tdsql [test]> CREATE TABLE tbl2(id INT) USING PARTITION policy pp1;
Query OK, 0 rows affected
在上述策略下,tbl1 和 tbl2 会保持在同一个节点存放。
创建一级 hash 4分区结构的亲和性策略。
tdsql [(none)]> CREATE PARTITION POLICY pp2 PARTITION BY HASH(int) PARTITIONS 4;
Query OK, 0 rows affected (0.02 sec)
创建非分区结构的亲和性策略(绑定了数据分布策略)。
tdsql [(none)]> CREATE PARTITION POLICY pp3 USING DISTRIBUTION POLICY dp_1;
Query OK, 0 rows affected (0.01 sec)
创建一级 hash 4分区结构的亲和性策略(绑定了数据分布策略)。
tdsql [(none)]> CREATE PARTITION POLICY pp4
-> PARTITION BY HASH(int)
-> PARTITIONS 4
-> USING DISTRIBUTION POLICY dp_2;
Query OK, 0 rows affected (0.02 sec)
创建一级 key 分区列数为2,分区数为4的亲和性策略。
tdsql [(none)]> CREATE PARTITION POLICY pp2
-> PARTITION BY KEY COLUMNS 2
-> PARTITIONS 4;
Query OK, 0 rows affected (0.02 sec)
创建绑定分区亲和性策略的表。
# 创建分区亲和性策略(hash 4分区)
tdsql [test]> CREATE PARTITION policy pp2 PARTITION BY HASH(INT) partitions 4;
Query OK, 0 rows affected

# 建表
tdsql [test]> CREATE TABLE orders(id INT) PARTITION BY HASH(id) partitions 4 USING PARTITION policy pp2;
Query OK, 0 rows affected

tdsql [test]> CREATE TABLE order_details(id INT, oid, detail TEXT) PARTITION BY HASH(oid) partitions 4 USING PARTITION policy pp2;
Query OK, 0 rows affected
通过上述 SQL,表 orders 和 order_details 的 HASH 分区会进行亲和性绑定,使得 HASH 值一致的分区在放置以及调度迁移的时候保持在相同节点。