CREATE SEGMENT_SET

创建数据节点集合。

概要

CREATE SEGMENT_SET name SEGMENTS (content_id, ...);

描述

Segment Set 指的是集群中的数据节点集合,即特定的一组数据节点。定义了具体的数据节点集合后,在建表或者修改表定义的数据库定义语言(DDL)语句中,可以指定创建过的数据节点集合,使得表的数据仅分布在这些数据节点上,否则会默认分布在集群里所有节点。

两个不同的数据节点集合可以包含相同的某个或多个数据节点。

CREATE SEGMENT_SET 命令在数据库级别创建一个特定的数据节点集合,数据节点集合和表之间不存在依赖关系。

参数

NAME

  • 数据节点集合的名称,有一个特殊的保留数据节点集合名称 'ALL_SEGMENTS' 不能被使用,它代表当前集群规模下的所有数据节点,随着集群扩容,'ALL_SEGMENTS' 指向的数据节点列表会有不同。

CONTENT_ID

  • 表示集群中某个特定数据节点的唯一编号,对应的是系统表 pg_catalog.gp_segment_configuationcontent 列。

示例

对于 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 标准中没有节点集合概念。

另见

DROP SEGMENT_SETALTER TABLE