CREATE TABLE
YDB поддерживает два типа таблиц:
Тип таблицы при создании задается параметром STORE
, где ROW
означает строковую таблицу, а COLUMN
— колоночную. По умолчанию, если параметр STORE
не указан, создается строковая таблица.
Строковые таблицы
Вызов CREATE TABLE
создает таблицу с указанной схемой данных и ключевыми колонками (PRIMARY KEY
). Позволяет определить вторичные индексы на создаваемой таблице.
CREATE TABLE table_name (
column1 type1,
column2 type2,
...
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,
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)
)
Дополнительные параметры
Для таблицы может быть указан ряд специфичных для 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"
,"hdd"
.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 = "hdd",
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
— его значение.
Поддерживаемые параметры колоночных таблиц:
AUTO_PARTITIONING_MIN_PARTITIONS_COUNT
— определяет минимальное физическое количество партиций для хранения данных (см. Партицирование).
Например, следующий код создает колоночную таблицу с 10-ю партициями:
CREATE TABLE my_table (
id Uint64,
title Utf8,
PRIMARY KEY (id)
)
PARTITION BY HASH(id)
WITH (
AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10
);