---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ydb.tech/docs/en/yql/reference/syntax/create_table.md?version=v25.3
  - https://ydb.tech/docs/ru/yql/reference/syntax/create_table.md?version=v25.3
  - href: ru/yql/reference/syntax/create_table/index.md
    type: text/markdown
    title: Markdown version
  - href: ../../../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/yql/reference/syntax/create_table/index.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# CREATE TABLE


Вызов `CREATE TABLE` создает [таблицу](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3) с указанной схемой данных  и ключевыми колонками (`PRIMARY KEY`). Позволяет определить вторичные индексы на создаваемой таблице.



```yql
CREATE TABLE [IF NOT EXISTS] <table_name> (
  [<column_name> <column_data_type>] [FAMILY <family_name>] [NULL | NOT NULL]
  [, ...],
    INDEX <index_name>
      [GLOBAL]
      [SYNC|ASYNC]
      [USING <index_type>]
      ON ( <index_columns> )
      [COVER ( <cover_columns> )]
      [WITH ( <parameter_name> = <parameter_value>[, ...])]
    [, ...]
  PRIMARY KEY ( <column>[, ...]),
  [FAMILY <column_family> ( family_options[, ...])]
)
[PARTITION BY HASH ( <column>[, ...])]
[WITH (<setting_name> = <setting_value>[, ...])]

[AS SELECT ...]
```


## Параметры запроса

### table_name

Путь создаваемой таблицы.

При выборе имени для таблицы учитывайте общие [правила именования схемных объектов](https://ydb.tech/docs/ru/concepts/datamodel/cluster-namespace.md?version=v25.3#object-naming-rules).

### IF NOT EXISTS

Если таблица с указанным именем уже существует, выполнение оператора полностью пропускается — не происходит никаких проверок или сопоставления схемы, и никакой ошибки не возникает. Обратите внимание, что существующая таблица может отличаться по структуре от той, которую вы хотели бы создать этим запросом — сравнение или проверка эквивалентности не производится.

### column_name

Имя колонки, создаваемой в новой таблице.

При выборе имени для колонки учитывайте общие [правила именования колонок](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#column-naming-rules).

### column_data_type

Тип данных колонки. Полный список типов данных, которые поддерживает YDB доступен в разделе [Типы данных YQL](https://ydb.tech/docs/ru/yql/reference/types/index.md?version=v25.3).

### FAMILY <family_name> (настройка колонки)

Указание принадлежности данной колонки к указанной группе колонок. Подробнее в разделе [Группы колонок](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/family.md?version=v25.3).

### NULL

Данная колонка может содержать значения `NULL` (по умолчанию).

### NOT NULL

Данная колонка не принимает значения `NULL`.

### INDEX

Определение индекса на таблице. Поддерживаются [вторичные индексы](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/secondary_index.md?version=v25.3) и [векторные индексы](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/vector_index.md?version=v25.3).

### PRIMARY KEY

Определение первичного ключа таблицы. Указывает колонки, которые составляют первичный ключ в порядке перечисления. Подробнее о выборе первичного ключа в разделе [Выбор первичного ключа](https://ydb.tech/docs/ru/dev/primary-key/index.md?version=v25.3).

### PARTITION BY HASH

Определение ключей партиционирования для **колоночных** таблиц. Указывает колонки, по хэшу которых выполняется [партиционирование](https://ydb.tech/docs/ru/concepts/glossary.md?version=v25.3#partition) данных. Колонки должны быть частью первичного ключа. При этом колонки не обязательно должны быть префиксом или суффиксом -- требование быть частью первичного ключа.

Если параметр не будет указан, таблица будет разбита на партиции по тем же колонкам, которые входят в первичный ключ. Как правильно выбирать ключи для партиционирования в колоночных таблицах, читайте в статье [Выбор ключей для максимальной производительности колоночных таблиц](https://ydb.tech/docs/ru/dev/primary-key/column-oriented.md?version=v25.3).

Подробнее о партиционировании колоночных таблиц читайте в разделе [Партицирование колоночной таблицы](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#olap-tables-partitioning).

### FAMILY <column_family> (настройка группы колонок)

Определение группы колонок с заданными параметрами. Подробнее в разделе [Группы колонок](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/family.md?version=v25.3).

### WITH

Дополнительные параметры создания таблицы. Подробнее в разделе [Дополнительные параметры (WITH)](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/with.md?version=v25.3).

{% note info %}

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

* [Строковые](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#row-oriented-tables).
* [Колоночные](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#column-oriented-tables).

Тип таблицы при создании задается параметром `STORE` в блоке `WITH`, где `ROW` означает [строковую таблицу](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#row-oriented-tables), а `COLUMN` — [колоночную](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#column-oriented-tables):

```yql
CREATE <table_name> (
  columns
  ...
)

WITH (
  STORE = COLUMN -- Default value ROW
)
```

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

{% endnote %}

### AS SELECT

Создание и заполнение таблицы на основе результатов запроса `SELECT`. Подробнее в разделе [Заполнение таблицы данными из запроса](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/as_select.md?version=v25.3).


## Примеры создания таблиц

{% list tabs %}

- Создание строковой таблицы


  ```yql
    CREATE TABLE <table_name> (
      a Uint64,
      b Uint64,
      c Float,
      PRIMARY KEY (a, b)
    );
    ```





  Для ключевых колонок допускаются только [примитивные](https://ydb.tech/docs/ru/yql/reference/types/primitive.md?version=v25.3) и [серийные](https://ydb.tech/docs/ru/yql/reference/types/serial.md?version=v25.3) типы данных, для неключевых колонок допускаются только [примитивные](https://ydb.tech/docs/ru/yql/reference/types/primitive.md?version=v25.3).




  Без дополнительных модификаторов колонка приобретает [опциональный тип](https://ydb.tech/docs/ru/yql/reference/types/optional.md?version=v25.3), и допускает запись `NULL` в качестве значений. Для получения неопционального типа необходимо использовать `NOT NULL`.



  Обязательно указание `PRIMARY KEY` с непустым списком колонок. Эти колонки становятся частью ключа в порядке перечисления.


  Пример создания строковой таблицы с использованием опций партиционирования:

  ```yql
  CREATE TABLE <table_name> (
    a Uint64,
    b Uint64,
    c Float,
    PRIMARY KEY (a, b)
  )
  WITH (
    AUTO_PARTITIONING_BY_SIZE = ENABLED,
    AUTO_PARTITIONING_PARTITION_SIZE_MB = 512
  );
  ```

  Такой код создаст строковую таблицу с включенным автоматическим партиционированием по размеру партиции (`AUTO_PARTITIONING_BY_SIZE`) и предпочитаемым размером каждой партиции (`AUTO_PARTITIONING_PARTITION_SIZE_MB`) в 512 мегабайт. Полный список опций партиционирования строковой таблицы находится в разделе [Партиционирование строковой таблицы](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#partitioning_row_table) статьи [Таблица](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3).

- Создание колоночной таблицы

  ```yql
  CREATE TABLE table_name (
    a Uint64 NOT NULL,
    b Timestamp NOT NULL,
    c Float,
    PRIMARY KEY (a, b)
  )
  PARTITION BY HASH(b)
  WITH (
    STORE = COLUMN
  );
  ```

  Для колоночных таблиц можно явно указать, по каким колонкам будет происходить партиционирование, с помощью конструкции `PARTITION BY HASH`. Обычно для этого выбирают колонки первичного ключа с большим числом уникальных значений, например, `Timestamp`. Если `PARTITION BY HASH` не указать, партиционирование произойдёт автоматически по всем колонкам, входящим в первичный ключ. Подробнее о выборе и работе ключей партиционирования в колоночных таблицах читайте в статье [Выбор ключей для максимальной производительности колоночных таблиц](https://ydb.tech/docs/ru/dev/primary-key/column-oriented.md?version=v25.3).

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

  ```yql
  CREATE TABLE table_name (
    a Uint64 NOT NULL,
    b Timestamp NOT NULL,
    c Float,
    PRIMARY KEY (a, b)
  )
  PARTITION BY HASH(b)
  WITH (
    STORE = COLUMN,
    AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10
  );
  ```

  Такой код создаст колоночную таблицу с 10-ю партициями. С полным списком опций партиционирования колоночных таблиц можно ознакомиться в разделе [Партицирование колоночной таблицы](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3#olap-tables-partitioning) статьи [Таблица](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=v25.3).


{% endlist %}



При создании строковых таблиц возможно задать:

* [Вторичный индекс](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/secondary_index.md?version=v25.3).
* [Векторный индекс](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/vector_index.md?version=v25.3).
* [Группы колонок](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/family.md?version=v25.3).
* [Дополнительные параметры](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/with.md?version=v25.3).
* [Запрос для заполнения таблицы данными](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/as_select.md?version=v25.3).

Для колоночных таблиц при их создании возможно задать:

* [Группы колонок](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/family.md?version=v25.3).
* [Дополнительные параметры](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/with.md?version=v25.3).
* [Запрос для заполнения таблицы данными](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/as_select.md?version=v25.3).
