Создание строковых таблиц в базе данных
Важно
На данный момент поддерживается создание только строковых таблиц. Функциональность Terraform провайдера по созданию колоночных таблиц находится в разработке.
Таблица в концепциях Terraform — это тоже ресурс, поэтому таблицы баз данных описываются отдельными блоками (resource "yandex_ydb_table"
) с указанием внутренней ссылки на созданную ранее базу данных.
Описание ресурса yandex_ydb_table
Пример создания тестовой строковой таблицы из 3 колонок в уже существующей базе данных:
resource "yandex_ydb_table" "test_table" {
path = "test_dir/test_table_3_col"
connection_string = yandex_ydb_database_serverless.database1.ydb_full_endpoint
column {
name = "a"
type = "Utf8"
not_null = true
}
column {
name = "b"
type = "Uint32"
not_null = true
}
column {
name = "c"
type = "Int32"
not_null = false
}
column {
name = "d"
type = "Timestamp"
}
primary_key = ["a","b"]
}
Свойства полей ресурса yandex_ydb_table
:
path
— путь в базе данных, где будет создана таблица. Название таблицы указывается без закрывающего слеша/
. Если директория, где следует создать таблицу отсутствует — она будет создана;connection_string
— путь для подключения к базе данных. Используется совместно с параметромydb_full_endpoint
, который содержит полный путь до базы:grpcs://ydb.serverless.yandexcloud.net:2135/?database=/ru-central1/b1gv7kfcttio********/etn66ecf1qbt********
. Для краткости и простоты записи можно использовать ссылку на ресурс"yandex_ydb_database_serverless"
с указанием идентификатора и параметраydb_full_endpoint
. Например,yandex_ydb_database_serverless.database1.ydb_full_endpoint
;primary_key
— первичный ключ таблицы. Может быть составным.
Полный перечень полей ресурса yandex_ydb_table
:
Название поля | Тип | Значение | Описание |
---|---|---|---|
path | string |
required |
Путь до таблицы |
connection_string | string |
required |
Строка соединения |
column | array[column] |
required |
Тип данных column |
family | array[family] |
optional |
Группа колонок |
primary_key | array[string] |
required |
Первичный ключ таблицы |
ttl | ttl |
optional |
Настройки TTL |
attributes | map[string]string |
optional |
Атрибуты таблицы |
partitioning_settings | partitioning_settings |
optional |
Настройки партиционирования |
key_bloom_filter | boolean |
optional |
Использование фильтра Блума для первичного ключа |
read_replicas_settings | string |
optional |
Настройки репликаций для чтения |
Внутри блока yandex_ydb_table
заключены вложенные блоки column
, которые описывают индивидуальные свойства колонок, такие как:
Название поля | Тип | Описание |
---|---|---|
name | string required |
Имя колонки |
type | string required |
Тип данных колонки. Используются YQL типы данных |
family | string optional |
Группа колонки |
not_null | boolean optional По умолчанию: false |
Колонка не может быть NULL |
Пример полного описания колонки:
column {
name = "column_name"
type = "Utf8"
family = "some_family"
not_null = true
}
Важно
На данный момент нельзя удалить колонку при помощи Terraform, ее можно только добавить. Для удаления колонки необходимо сначала удалить колонку из базы напрямую (например, при помощи YQL запроса), после чего удалить колонку из конфигурационного файла.
Колонки могут быть объединены в группы
DATA
— тип устройства хранения для данных колонок этой группы (допустимые значения:ssd
,rot
(от rotation — вращение шпинделя HDD));COMPRESSION
— кодек сжатия данных (допустимые значения:off
,lz4
).
Для объединения колонок в группу используется блок family
на одном уровне с блоком column
:
family {
name = "my_family"
data = "ssd"
compression = "lz4"
}
Описание полей блока family
:
Название поля | Тип | Описание |
---|---|---|
name | string required |
Имя группы колонок |
data | string required |
Тип устройства хранения для данных колонок этой группы |
compression | string required |
Кодек сжатия данных |
Пример группировки двух столбцов в одну группу может выглядеть так:
resource "yandex_ydb_table" "test_table" {
path = "test_dir/test_table_3_col"
connection_string = yandex_ydb_database_serverless.database1.ydb_full_endpoint
column {
name = "a"
type = "Uint16"
family = "test_family_group"
not_null = true
}
column {
name = "b"
type = "Uint32"
family = "test_family_group"
not_null = true
}
family {
name = "test_family_group"
data = "ssd"
compression = "lz4"
}
}
YDB позволяет создавать специальный вид колонок — TTL-колонкиDate
, Datetime
, Timestamp
, Uint32
, Uint64
, DyNumber
.
Задается TTL-колонка следующим блоком:
ttl {
column_name = "d"
expire_interval = "PT1H" # 1 час
unit = "seconds" # для числовых типов колонок (non ISO 8601)
}
Описание значений полей ttl
:
Название поля | Тип | Описание |
---|---|---|
column_name | string required |
Имя колонки для TTL |
expire_interval | string required |
Интервал в формате ISO 8601 |
unit | string optional |
Задается, если колонка с TTL имеет числовой типseconds , milliseconds , microseconds , nanoseconds |
Партиционирование строковых таблиц
Партиционированиеpartitioning_settings
ресурса yandex_ydb_table
.
Описание значений полей блока partitioning_settings
Пример:
resource "yandex_ydb_table" "test_table" {
path = "/test_dir/test_table_3_col"
connection_string = yandex_ydb_database_serverless.database1.ydb_full_endpoint
partitioning_settings {
auto_partitioning_min_partitions_count = 5
auto_partitioning_max_partitions_count = 8
auto_partitioning_partition_size_mb = 256
auto_partitioning_by_load = true
...
}
...
}
Полное описание полей partitioning_settings
:
Название поля | Тип | Описание |
---|---|---|
uniform_partitions | number optional |
Количество заранее аллоцированных партиций |
partition_at_keys | string optional |
Партицирование по первичному ключу |
auto_partitioning_min_partitions_count | number optional |
Минимально возможное количество партиций |
auto_partitioning_max_partitions_count | number optional |
Максимально возможное количество партиций |
auto_partitioning_partition_size_mb | number optional |
Задание значения автопартицирования по размеру |
auto_partitioning_by_size_enabled | bool optional |
Включение автопартиционирования по размеру (bool), по умолчанию — включено (true) |
auto_partitioning_by_load | bool optional |
Включение автопартицирования по нагрузке (bool), по умолчанию — выключено (false) |