CREATE SEGMENT_SET

Создание набора узлов данных.

Обзор

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

Описание

Набор сегментов (Segment Set) — это множество узлов данных в кластере, то есть конкретный набор узлов хранения данных. После определения конкретного набора узлов данных его можно указать в операторах языка определения данных (DDL), при создании или изменении объектов, чтобы данные таблицы распределялись только по этим узлам. В противном случае данные будут распределяться по всем узлам кластера по умолчанию.

Два различных набора узлов данных могут содержать один или несколько общих узлов.

Команда CREATE SEGMENT_SET создаёт на уровне базы данных конкретный набор узлов данных. Между набором узлов и таблицами отсутствует зависимость.

Параметры

NAME

  • Имя набора узлов данных. Существует зарезервированное имя 'ALL_SEGMENTS', которое использовать нельзя — оно обозначает все узлы данных текущего размера кластера. По мере масштабирования кластера состав узлов, на которые указывает 'ALL_SEGMENTS', будет меняться.

CONTENT_ID

  • Уникальный номер, идентифицирующий конкретный узел данных в кластере; соответствует столбцу content системной таблицы pg_catalog.gp_segment_configuation.

Пример

Для кластера из трёх узлов создадим объект SEGMENT_SET с именем ss1, указывающий на узлы данных 0 и 2, и объект ss2, указывающий на узел данных 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 для новой партиции:

## Create SEGMENT_SET object ss1
CREATE SEGMENT_SET ss1 SEGMENTS('0,2');

## Create a t table
CREATE TABLE t(a int, b int) DISTRIBUTED BY(a) PARTITION BY RANGE(b) (DEFAULT PARTITION others SEGMENT_SET ss1);

## Specify the SEGMENT_SET object for the new partition
CREATE TABLE t_part_manual PARTITION OF t FOR VALUES FROM (3) TO (6) SEGMENT_SET ss1;

Совместимость

CREATE SEGMENT_SET является расширением СУБД YMatrix. В стандарте SQL понятие набора узлов отсутствует.

Смотрите также

DROP SEGMENT_SET , ALTER TABLE