CREATE TABLE

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

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

Строковые таблицы

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

CREATE [TEMP | TEMPORARY] TABLE table_name (
    column1 type1,
    column2 type2 NOT NULL,
    ...
    columnN typeN,
    INDEX index1_name GLOBAL ON ( column ),
    INDEX index2_name GLOBAL ON ( column1, column2, ... ),
    PRIMARY KEY ( column, ... ),
    FAMILY column_family ( family_options, ... )
)
WITH ( key = value, ... )

Колонки

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

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

Пример

CREATE TABLE my_table (
    a Uint64 NOT NULL,
    b Bool,
    c Float NOT NULL,
    PRIMARY KEY (b, a)
)

Вторичные индексы

Конструкция INDEX используется для определения вторичного индекса на таблице:

CREATE TABLE table_name (
    ...
    INDEX <index_name> GLOBAL [SYNC|ASYNC] ON ( <index_columns> ) COVER ( <cover_columns> ),
    ...
)

где:

  • index_name — уникальное имя индекса, по которому будет возможно обращение к данным.
  • SYNC/ASYNC — синхронная или асинхронная запись в индекс, если не указано — синхронная.
  • index_columns — имена колонок создаваемой таблицы через запятую, по которым возможен поиск в индексе.
  • cover_columns — имена колонок создаваемой таблицы через запятую, которые будет сохранены в индексе дополнительно к колонкам поиска, давая возможность получить дополнительные данные без обращения за ними в таблицу.

Пример

CREATE TABLE my_table (
    a Uint64,
    b Bool,
    c Utf8,
    d Date,
    INDEX idx_d GLOBAL ON (d),
    INDEX idx_ba GLOBAL ASYNC ON (b, a) COVER (c),
    PRIMARY KEY (a)
)

Создание временных таблиц

CREATE TEMPORARY TABLE table_name (
    ...
);

TEMPORARY / TEMP – временная таблица, которая автоматически удаляется при завершении сессии. Если параметр не задан (оставлен пустым) – создается постоянная таблица. Любые индексы, созданные во временных таблицах, также будут удалены при завершении сессиии, следовательно они тоже являются временными. Допускается существование временной таблицы и постоянной таблицы с одинаковым именем, в этом случае будет выбрана временная таблица.

Дополнительные параметры

Для таблицы может быть указан ряд специфичных для YDB параметров. При создании таблицы такие параметры перечисляются в блоке WITH:

CREATE TABLE table_name (...)
WITH (
    key1 = value1,
    key2 = value2,
    ...
)

Здесь key — это название параметра, а value — его значение.

Перечень допустимых имен параметров и их значений приведен на странице описания таблицы YDB.

Например, такой код создаст таблицу с включенным автоматическим партиционированием по размеру партиции и предпочитаемым размером каждой партиции 512 мегабайт:

Листинг 4

CREATE TABLE my_table (
    id Uint64,
    title Utf8,
    PRIMARY KEY (id)
)
WITH (
    AUTO_PARTITIONING_BY_SIZE = ENABLED,
    AUTO_PARTITIONING_PARTITION_SIZE_MB = 512
);

Группы колонок

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

  • DATA — тип устройства хранения для данных колонок этой группы. Допустимые значения: "ssd", "rot".
  • COMPRESSION — кодек сжатия данных. Допустимые значения: "off", "lz4".

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

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

CREATE TABLE series_with_families (
    series_id Uint64,
    title Utf8,
    series_info Utf8 FAMILY family_large,
    release_date Uint64,
    PRIMARY KEY (series_id),
    FAMILY default (
        DATA = "ssd",
        COMPRESSION = "off"
    ),
    FAMILY family_large (
        DATA = "rot",
        COMPRESSION = "lz4"
    )
);

Примечание

Доступные типы устройств хранения зависят от конфигурации кластера YDB.

Колоночные таблицы

Важно

Колоночные таблицы YDB доступны в режиме Preview.

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

CREATE TABLE table_name (
    column1 type1,
    column2 type2 NOT NULL,
    column2 type2,
    ...
    columnN typeN,
    PRIMARY KEY ( column, ... ),
    ...
)
PARTITION BY HASH(column1, column2, ...)
WITH (
    STORE = COLUMN,
    key = value,
    ...
)

Колонки

Поддерживаемые типы данных в колоночных таблицах и ограничение на использование типов в первичных ключах или колонках данных описаны в разделе колоночные таблицы.

Обязательно указание PRIMARY KEY и PARTITION BY с непустым списком колонок.

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

Пример

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

Дополнительные параметры

Для таблицы может быть указан ряд специфичных для YDB параметров. При создании таблицы такие параметры перечисляются в блоке WITH:

CREATE TABLE table_name (...)
WITH (
    key1 = value1,
    key2 = value2,
    ...
)

Здесь key — это название параметра, а value — его значение.

Поддерживаемые параметры колоночных таблиц:

Например, следующий код создает колоночную таблицу с 10-ю партициями:

CREATE TABLE my_table (
    id Uint64,
    title Utf8,
    PRIMARY KEY (id)
)
PARTITION BY HASH(id)
WITH (
    AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10
);
Следующая