Создание строковых и колоночных таблиц в базе данных
Таблица в концепциях Terraform — это тоже ресурс, поэтому таблицы баз данных описываются отдельными блоками (resource "yandex_ydb_table") с указанием внутренней ссылки на созданную ранее базу данных.
Описание ресурса yandex_ydb_table
Пример создания тестовой таблицы из 4 колонок в уже существующей базе данных:
resource "yandex_ydb_table" "test_table" {
path = "test_dir/test_table_4_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"]
}
resource "yandex_ydb_table" "test_table" {
path = "test_dir/test_table_4_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"]
store = "column"
partitioning_settings {
partition_by = ["b", "a"]
}
}
Свойства полей ресурса yandex_ydb_table:
path— путь в базе данных, где будет создана таблица. Название таблицы указывается без закрывающего слеша/. Если директория, где следует создать таблицу отсутствует — она будет создана;connection_string— путь для подключения к базе данных. Используется совместно с параметромydb_full_endpoint, который содержит полный путь до базы:grpcs://ydb.serverless.yandexcloud.net:2135/?database=/kz1/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 |
Группа колонок |
| store | string |
optional |
Тип таблицы. Для создания колоночной таблицы укажите значение column. Для создания строковой таблицы, не указывайте поле store |
| 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 | stringrequired |
Имя колонки |
| type | stringrequired |
Тип данных колонки. Используются YQL типы данных |
| family | stringoptional |
Группа колонки |
| not_null | booleanoptionalПо умолчанию: 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 | stringrequired |
Имя группы колонок |
| data | stringrequired |
Тип устройства хранения для данных колонок этой группы |
| compression | stringrequired |
Кодек сжатия данных |
Пример группировки двух столбцов в одну группу может выглядеть так:
resource "yandex_ydb_table" "test_table" {
path = "test_dir/test_table"
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 | stringrequired |
Имя колонки для TTL |
| expire_interval | stringrequired |
Интервал в формате ISO 8601 |
| unit | stringoptional |
Задается, если колонка с TTL имеет числовой типseconds, milliseconds, microseconds, nanoseconds |
Партиционирование строковых таблиц
Партиционированиеpartitioning_settings ресурса yandex_ydb_table.
Описание значений полей блока partitioning_settings
Пример:
resource "yandex_ydb_table" "test_table" {
path = "/test_dir/test_table_4_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 | numberoptional |
Количество заранее аллоцированных партиций |
| partition_at_keys | stringoptional |
Партицирование по первичному ключу |
| auto_partitioning_min_partitions_count | numberoptional |
Минимально возможное количество партиций |
| auto_partitioning_max_partitions_count | numberoptional |
Максимально возможное количество партиций |
| auto_partitioning_partition_size_mb | numberoptional |
Задание значения автопартицирования по размеру |
| auto_partitioning_by_size_enabled | booloptional |
Включение автопартиционирования по размеру (bool), по умолчанию — включено (true) |
| auto_partitioning_by_load | booloptional |
Включение автопартицирования по нагрузке (bool), по умолчанию — выключено (false) |
Партиционирование колоночных таблиц
Партиционирование
В Terraform для партиционирования колоночных таблиц YDB используются параметры в разделе partitioning_settings ресурса yandex_ydb_table.
Пример:
resource "yandex_ydb_table" "test_table" {
path = "test_dir/test_table_4_col"
connection_string = yandex_ydb_database_serverless.database1.ydb_full_endpoint
...
partitioning_settings {
partition_by = ["b", "a"]
}
}
Описание полей partitioning_settings для колоночных таблиц:
| Название поля | Тип | Описание |
|---|---|---|
| partition_by | stringoptional |
Партиционирование по указанным ключам партиционирования |
| auto_partitioning_min_partitions_count | numberoptional |
Количество партиций |