CREATE TABLE

Вызов CREATE TABLE создает таблицу с указанной схемой данных и ключевыми колонками (PRIMARY KEY). Позволяет определить вторичные индексы на создаваемой таблице.

CREATE TABLE [IF NOT EXISTS] <table_name> (
  [<column_name> <column_data_type>] [FAMILY <family_name>] [NULL | NOT NULL]
  [, ...],
    INDEX <index_name>
      [GLOBAL]
      [UNIQUE]
      [SYNC|ASYNC]
      [USING <index_type>]
      ON ( <index_columns> )
      [COVER ( <cover_columns> )]
      [WITH ( <parameter_name> = <parameter_value>[, ...])]
    [, ...]
  PRIMARY KEY ( <column>[, ...]),
  [FAMILY <column_family> ( family_options[, ...])]
)
[PARTITION BY HASH ( <column>[, ...])]
[WITH (<setting_name> = <setting_value>[, ...])]

[AS SELECT ...]

Параметры запроса

table_name

Путь создаваемой таблицы.

При выборе имени для таблицы учитывайте общие правила именования схемных объектов.

IF NOT EXISTS

Если таблица с указанным именем уже существует, выполнение оператора полностью пропускается — не происходит никаких проверок или сопоставления схемы, и никакой ошибки не возникает. Обратите внимание, что существующая таблица может отличаться по структуре от той, которую вы хотели бы создать этим запросом — сравнение или проверка эквивалентности не производится.

column_name

Имя колонки, создаваемой в новой таблице.

При выборе имени для колонки учитывайте общие правила именования колонок.

column_data_type

Тип данных колонки. Полный список типов данных, которые поддерживает YDB доступен в разделе Типы данных YQL.

FAMILY <family_name> (настройка колонки)

Указание принадлежности данной колонки к указанной группе колонок. Подробнее в разделе Группы колонок.

NULL

Данная колонка может содержать значения NULL (по умолчанию).

NOT NULL

Данная колонка не принимает значения NULL.

INDEX

Определение индекса на таблице. Поддерживаются вторичные индексы и векторные индексы.

PRIMARY KEY

Определение первичного ключа таблицы. Указывает колонки, которые составляют первичный ключ в порядке перечисления. Подробнее о выборе первичного ключа в разделе Выбор первичного ключа.

PARTITION BY HASH

Определение ключей партиционирования для колоночных таблиц. Указывает колонки, по хэшу которых выполняется партиционирование данных. Колонки должны быть частью первичного ключа. При этом колонки не обязательно должны быть префиксом или суффиксом -- требование быть частью первичного ключа.

Если параметр не будет указан, таблица будет разбита на партиции по тем же колонкам, которые входят в первичный ключ. Как правильно выбирать ключи для партиционирования в колоночных таблицах, читайте в статье Выбор ключей для максимальной производительности колоночных таблиц.

Подробнее о партиционировании колоночных таблиц читайте в разделе Партицирование колоночной таблицы.

FAMILY <column_family> (настройка группы колонок)

Определение группы колонок с заданными параметрами. Подробнее в разделе Группы колонок.

WITH

Дополнительные параметры создания таблицы. Подробнее в разделе Дополнительные параметры (WITH).

Примечание

YDB поддерживает два типа таблиц:

Тип таблицы при создании задается параметром STORE в блоке WITH, где ROW означает строковую таблицу, а COLUMNколоночную:

CREATE <table_name> (
  columns
  ...
)

WITH (
  STORE = COLUMN -- Default value ROW
)

По умолчанию, если параметр STORE не указан, создается строковая таблица.

AS SELECT

Создание и заполнение таблицы на основе результатов запроса SELECT. Подробнее в разделе Создание и заполнение таблицы на основе результатов запроса.

Примеры создания таблиц

  CREATE TABLE <table_name> (
    a Uint64,
    b Uint64,
    c Float,
    PRIMARY KEY (a, b)
  );

Для ключевых колонок допускаются только примитивные и серийные типы данных, для неключевых колонок допускаются только примитивные.

Без дополнительных модификаторов колонка приобретает опциональный тип, и допускает запись NULL в качестве значений. Для получения неопционального типа необходимо использовать NOT NULL.

Обязательно указание PRIMARY KEY с непустым списком колонок. Эти колонки становятся частью ключа в порядке перечисления.

Пример создания строковой таблицы с использованием опций партиционирования:

CREATE TABLE <table_name> (
  a Uint64,
  b Uint64,
  c Float,
  PRIMARY KEY (a, b)
)
WITH (
  AUTO_PARTITIONING_BY_SIZE = ENABLED,
  AUTO_PARTITIONING_PARTITION_SIZE_MB = 512
);

Такой код создаст строковую таблицу с включенным автоматическим партиционированием по размеру партиции (AUTO_PARTITIONING_BY_SIZE) и предпочитаемым размером каждой партиции (AUTO_PARTITIONING_PARTITION_SIZE_MB) в 512 мегабайт. Полный список опций партиционирования строковой таблицы находится в разделе Партиционирование строковой таблицы статьи Таблица.

CREATE TABLE table_name (
  a Uint64 NOT NULL,
  b Timestamp NOT NULL,
  c Float,
  PRIMARY KEY (a, b)
)
PARTITION BY HASH(b)
WITH (
  STORE = COLUMN
);

Для колоночных таблиц можно явно указать, по каким колонкам будет происходить партиционирование, с помощью конструкции PARTITION BY HASH. Обычно для этого выбирают колонки первичного ключа с большим числом уникальных значений, например, Timestamp. Если PARTITION BY HASH не указать, партиционирование произойдёт автоматически по всем колонкам, входящим в первичный ключ. Подробнее о выборе и работе ключей партиционирования в колоночных таблицах читайте в статье Выбор ключей для максимальной производительности колоночных таблиц.

В настоящий момент колоночные таблицы не поддерживают автоматического репартицирования, поэтому важно указывать правильное число партиций при создании таблицы с помощью параметра AUTO_PARTITIONING_MIN_PARTITIONS_COUNT:

CREATE TABLE table_name (
  a Uint64 NOT NULL,
  b Timestamp NOT NULL,
  c Float,
  PRIMARY KEY (a, b)
)
PARTITION BY HASH(b)
WITH (
  STORE = COLUMN,
  AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10
);

Такой код создаст колоночную таблицу с 10-ю партициями. С полным списком опций партиционирования колоночных таблиц можно ознакомиться в разделе Партицирование колоночной таблицы статьи Таблица.

При создании строковых таблиц возможно задать:

Для колоночных таблиц при их создании возможно задать:

Следующая