Yandex Cloud
Search
Contact UsTry it for free
  • Customer Stories
  • Documentation
  • Blog
  • All Services
  • System Status
  • Marketplace
    • Featured
    • Infrastructure & Network
    • Data Platform
    • AI for business
    • Security
    • DevOps tools
    • Serverless
    • Monitoring & Resources
  • All Solutions
    • By industry
    • By use case
    • Economics and Pricing
    • Security
    • Technical Support
    • Start testing with double trial credits
    • Cloud credits to scale your IT product
    • Gateway to Russia
    • Cloud for Startups
    • Center for Technologies and Society
    • Yandex Cloud Partner program
    • Price calculator
    • Pricing plans
  • Customer Stories
  • Documentation
  • Blog
© 2026 Direct Cursus Technology L.L.C.
Yandex Managed Service for YDB
  • Getting started
  • Access management
  • Monitoring metrics
  • Audit Trails events
    • Introduction to using YDB via Terraform
    • Getting authentication credentials
    • Installing and configuring Terraform and a provider to connect to YDB
    • Creating configuration files and connecting to YDB
    • Creating and reconfiguring a serverless database
    • Creating and reconfiguring a dedicated database
    • Creating row-oriented and column-oriented tables in a database
    • Creating document tables in a database
    • Creating a change data feed for a table
    • Creating secondary indexes in row-oriented tables
    • Managing YDB topic configurations
  • FAQ
  • Public materials

In this article:

  • Description of the yandex_ydb_table resource
  • Partitioning row-oriented tables
  • Description of the partitioning_settings section fields
  • Partitioning column-oriented tables
  1. Using YDB via Terraform
  2. Creating row-oriented and column-oriented tables in a database

Creating row-oriented and column-oriented tables in a database

Written by
Yandex Cloud
Updated at April 24, 2026
  • Description of the yandex_ydb_table resource
  • Partitioning row-oriented tables
    • Description of the partitioning_settings section fields
  • Partitioning column-oriented tables

Terraform treats a table as a resource. Therefore, we describe database tables in independent sections (resource "yandex_ydb_table"), specifying an internal link to the previously created database.

Description of the yandex_ydb_table resourceDescription of the yandex_ydb_table resource

Example of creating a 4-column test table in an existing database:

Row-oriented table
Column-oriented table
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"]
  }
}

Properties of the yandex_ydb_table resource fields:

  1. path: Path to the table in the database. Specify the table name without the trailing slash, /. If there is no directory for the table, it will be created automatically.
  2. connection_string: Path for connecting to the database. It is used together with the ydb_full_endpoint parameter that contains the full database path: grpcs://ydb.serverless.yandexcloud.net:2135/?database=/ru-central1/b1gv7kfcttio********/etn66ecf1qbt********. For brevity and simplicity, you can use a link to the "yandex_ydb_database_serverless" resource with the ID and the ydb_full_endpoint parameter specified, e.g., yandex_ydb_database_serverless.database1.ydb_full_endpoint.
  3. primary_key: Primary key of the table. The key can be composite.

Full list of the yandex_ydb_table resource fields:

Field name Type Value Description
path string required Table path.
connection_string string required Connection string.
column array[column] required Column data type.
family array[family] optional Column family.
store string optional Table type. To create a column-oriented table, specify column. To create a row-oriented table, do not specify the store field.
primary_key array[string] required Primary key of the table.
ttl ttl optional TTL settings.
attributes map[string]string optional Table attributes.
partitioning_settings partitioning_settings optional Partitioning settings.
key_bloom_filter boolean optional Using the Bloom filter for the primary key.
read_replicas_settings string optional Settings for reading data from replicas.

The yandex_ydb_table section contains nested column sections describing individual column properties, such as:

Field name Type Description
name string
required
Column name.
type string
required
Column data type. YQL data types are used.
family string
optional
Column family.
not_null boolean
optional
The default value is false.
The column cannot be NULL.

Example of a full column description:

column {
  name     = "column_name"
  type     = "Utf8"
  family   = "some_family"
  not_null = true
}

Warning

Currently, you cannot delete a column using Terraform; you can only add one. To delete a column, first delete it in the database (e.g., using a YQL query), then remove it from the configuration file.

You can group columns into families to set shared fields for them, such as the following:

  • DATA: Type of storage device for column data in this family. The acceptable values are ssd and rot (named after HDD spindle rotation).
  • COMPRESSION: Data compression codec. The acceptable values are off and lz4.

To group columns into a family, add the family section at the same level as the column section:

family {
  name        = "my_family"
  data        = "ssd"
  compression = "lz4"
}

Descriptions of the family section fields:

Field name Type Description
name string
required
Column family name.
data string
required
Storage device type for the data in this column family.
compression string
required
Data compression codec.

Here is an example of grouping two columns into a family:

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 allows you to create a TTL column, i.e., a special column type, whose values determine the time-to-live for rows. The TTL mechanism automatically deletes the row from your table after the specified number of seconds elapses from the time set in the TTL column. You can only define a single TTL column. A TTL column can be one of the following types: Date, Datetime, Timestamp, Uint32, Uint64, DyNumber.

The TTL column is described in the following section:

ttl {
  column_name     = "d"
  expire_interval = "PT1H" # 1 hour
  unit            = "seconds" # For numeric column types (non ISO 8601)
}

Description of the ttl field values:

Field name Type Description
column_name string
required
TTL column name.
expire_interval string
required
Time in ISO 8601 format.
unit string
optional
It is specified if the TTL column is of numeric type. The supported values are seconds, milliseconds, microseconds, nanoseconds.

Partitioning row-oriented tablesPartitioning row-oriented tables

Partitioning is splitting table data into parts to improve query performance and optimize data management. For partitioning row-oriented YDB tables in Terraform, use the partitioning_settings parameter of the yandex_ydb_table resource.

Description of the section fieldsDescription of the partitioning_settings section fields

Here is an example:

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
    ...
  }
 ...
}

Full description of the partitioning_settings fields for row-oriented tables:

Field name Type Description
uniform_partitions number
optional
Number of pre-allocated partitions.
partition_at_keys string
optional
Partitioning by primary key.
auto_partitioning_min_partitions_count number
optional
Minimum possible number of partitions for auto partitioning.
auto_partitioning_max_partitions_count number
optional
Maximum possible number of partitions for auto partitioning.
auto_partitioning_partition_size_mb number
optional
Setting auto partitioning by size in MB.
auto_partitioning_by_size_enabled bool
optional
Auto partitioning by size (bool); enabled by default (true).
auto_partitioning_by_load bool
optional
Auto partitioning by load (bool); disabled by default (false).

Partitioning column-oriented tablesPartitioning column-oriented tables

Partitioning is splitting table data into parts to improve query performance and optimize data management. Unlike YDB row-oriented tables, column-oriented tables split data using special partition keys rather than primary keys. Partition keys are a subset of the table's primary keys.

In Terraform, column-oriented tables are partitioned using the parameters in the partitioning_settings section of the yandex_ydb_table resource.

Here is an example:

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"]
    }
}

Description of the partitioning_settings fields for column-oriented tables:

Field name Type Description
partition_by string
optional
Partitioning based on specified partition keys.
auto_partitioning_min_partitions_count number
optional
Number of partitions for data storage. The default value is 64.

Was the article helpful?

Previous
Creating and reconfiguring a dedicated database
Next
Creating document tables in a database
© 2026 Direct Cursus Technology L.L.C.