关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
创建数据节点集合。
CREATE SEGMENT_SET name SEGMENTS (content_id, ...);
Segment Set 指的是集群中的数据节点集合,即特定的一组数据节点。定义了具体的数据节点集合后,在建表或者修改表定义的数据库定义语言(DDL)语句中,可以指定创建过的数据节点集合,使得表的数据仅分布在这些数据节点上,否则会默认分布在集群里所有节点。
两个不同的数据节点集合可以包含相同的某个或多个数据节点。
CREATE SEGMENT_SET 命令在数据库级别创建一个特定的数据节点集合,数据节点集合和表之间不存在依赖关系。
在集群扩容时,用 SEGMENT_SET 把新建表或分区固定到指定的数据节点集合上,可以只让新数据落在新节点,避免对旧表做全量重分布。具体操作见命令行在线扩容。
SEGMENT_SET 也可以用于资源物理隔离:把不同业务、不同 SLA 的表放到不同的数据节点集合上。如果这些集合对应的 Segment 部署在独立的主机或独立的存储上,各业务在 CPU、内存和磁盘 I/O 上互不争抢。
查询 content ID 与主机的对应关系:
SELECT content, hostname, port, role
FROM gp_segment_configuration
ORDER BY content;
用 CREATE SEGMENT_SET 指定这些 content ID。
建表时用 SEGMENT_SET 指定集合,或用 SET mx_default_segment_set TO '<集合名>'; 修改当前会话的默认集合。
注意!
- SEGMENT_SET 只约束数据分布位置,不提供 CPU、内存、I/O 配额;资源配额请使用资源组。
- 跨集合的关联查询仍会产生节点间的数据交换,SEGMENT_SET 不能替代分布键设计。
- 新建表不指定集合时,数据落在
mx_default_segment_set指定的集合;默认值为空,表示分布在集群所有节点。
NAME
CONTENT_ID
pg_catalog.gp_segment_configuration 的 content 列。对于 3 节点集群,创建名为 ss1 的 SEGMENT_SET 对象指向数据节点 0 和数据节点 2;创建名为 ss2 的 SEGMENT_SET 对象指向数据节点 1 。
CREATE SEGMENT_SET ss1 SEGMENTS('0,2');
CREATE SEGMENT_SET ss2 SEGMENTS('1');
创建表 t1,数据仅分布在集群的数据节点集合 ss1 ,即数据节点 0 和数据节点 2 上。几种数据分布示例语句如下。
CREATE TABLE t1(a int, b int) DISTRIBUTED BY(a) SEGMENT_SET ss1;
CREATE TABLE t1(a int, b int) DISTRIBUTED REPLICATED SEGMENT_SET ss1;
CREATE TABLE t1(a int, b int) DISTRIBUTED RANDOMLY SEGMENT_SET ss1;
使用 CREATE TABLE LIKE 语句会复制源表的数据节点集合,也可以手动指定,SEGMENT_SET 对象放在语句最后。
CREATE TABLE t(LIKE t1);
CREATE TABLE t(LIKE t1) SEGMENT_SET ss2;
使用 CREATE TABLE AS(CTAS)语句在表名后后指定 SEGMENT_SET 对象。
CREATE TABLE t SEGMENT_SET ss1 AS SELECT * from t1;
设置系统默认的 SEGMENT_SET 对象。
SET mx_default_segment_set TO 'ss1';
指定新分区的 SEGMENT_SET 对象:
## 创建 SEGMENT_SET 对象 ss1
CREATE SEGMENT_SET ss1 SEGMENTS('0,2');
## 创建 t 表
CREATE TABLE t(a int, b int) DISTRIBUTED BY(a) PARTITION BY RANGE(b) (DEFAULT PARTITION others SEGMENT_SET ss1);
## 指定新分区的 SEGMENT_SET 对象
CREATE TABLE t_part_manual PARTITION OF t FOR VALUES FROM (3) TO (6) SEGMENT_SET ss1;
CREATE SEGMENT_SET 是 YMatrix 数据库扩展,SQL 标准中没有节点集合概念。