CREATE TABLE

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

CREATE TABLE [IF NOT EXISTS] <table_name> (
  [<column_name> <column_data_type>] [FAMILY <family_name>] [NULL | NOT NULL] [DEFAULT <default_value>]
  [COMPRESSION([algorithm=<algorithm_name>[, level=<value>]])]
  [ENCODING([OFF|DICT])]
  [, ...],
    INDEX <index_name>
      [GLOBAL]
      [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> (настройка колонки)

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

DEFAULT <default_value>

Важно

Опция DEFAULT поддерживается:

  • Только для строковых таблиц.
  • Только с литеральными значениями.

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

Конструкция DEFAULT false NOT NULL недопустима по причине неоднозначности интерпретации. В таком случае следует использовать перечисление через запятые или изменить порядок опций.

NULL

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

NOT NULL

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

COMPRESSION([algorithm=<algorithm_name>[, level=]])

Важно

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

Для колонок можно задать следующие параметры сжатия:

  • algorithm — алгоритм сжатия данных. Допустимые значения: off (отключение сжатия), lz4, zstd.

  • level — уровень сжатия, поддерживается только для алгоритма zstd (допустимы значения от 0 до 22).

Если COMPRESSION() указан без параметров, для колонки используется сжатие по умолчанию. Сейчас это lz4; в будущих версиях появится возможность настраивать сжатие по умолчанию на уровне кластера или таблицы.

ENCODING([OFF|DICT])

Важно

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

Позволяет задать способ кодирования данных колонки.

Доступные варианты:

  • ENCODING(DICT) — включает словарное кодирование (dictionary encoding). Повторяющиеся значения заменяются небольшими целочисленными идентификаторами, а сами значения хранятся в словаре. Словарное кодирование эффективно для колонок с низкой кардинальностью (небольшим количеством уникальных значений). Позволяет сократить объем хранимых данных и ускорить выполнение некоторых операций. Поддерживается только для сравнимых типов данных, таких как String, Timestamp, UInt64 и других. Для несравнимых типов, таких как Json, JsonDocument или Yson, использование ENCODING(DICT) приведет к ошибке.

  • ENCODING(OFF) — отключает специальное кодирование. Данные будут храниться в стандартном формате без дополнительного кодирования.

Если ENCODING() задается без параметров, то для колонки будет использоваться кодирование по умолчанию. Сейчас это OFF; в будущих версиях появится возможность настраивать кодирование по умолчанию на уровне базы или таблицы.

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)
  );

Пример создания таблицы с использованием значения по умолчанию (DEFAULT):

  CREATE TABLE table_with_default (
  id Uint64,
  name String DEFAULT "unknown",
  score Double NOT NULL DEFAULT 0.0,
  PRIMARY KEY (id)
);

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

Без дополнительных модификаторов колонка приобретает опциональный тип, и допускает запись 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-ю партициями. С полным списком опций партиционирования колоночных таблиц можно ознакомиться в разделе {#T} статьи Таблица.

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

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

Предыдущая
Следующая