关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
新架构 FAQ
集群部署 FAQ
SQL 查询 FAQ
MatrixGate FAQ
运维 FAQ
监控告警 FAQ
PXF FAQ
PLPython FAQ
性能 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 标准中没有节点集合概念。