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

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

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

```yql
CREATE TABLE table_name (
    PRIMARY KEY ( column, ... )
)
WITH ( key = value, ... )
AS SELECT ...
```

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

При создании таблицы через `CREATE TABLE AS` не поддерживается указание имен колонок (имена колонок созданной таблицы берутся из результата запроса), [вторичных индексов](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/secondary_index.md?version=v25.4), [векторных индексов](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/vector_index.md?version=v25.4), [групп колонок](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/family.md?version=v25.4). Все вышеперечисленное можно изменять при помощи [`ALTER TABLE`](https://ydb.tech/docs/ru/yql/reference/syntax/alter_table/index.md?version=v25.4) после создания таблицы. При этом поддерживаются [дополнительные параметры](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/with.md?version=v25.4).


## Особенности

{% note warning %}

Запись строк производится с полной перезаписью строки, как при использовании [`REPLACE INTO`](https://ydb.tech/docs/ru/yql/reference/syntax/replace_into.md?version=v25.4), но при этом отсутствуют гарантии на порядок записи строк в таблицу.

Если `SELECT` вернул 2 или более строки с одним и тем же значением первичного ключа, то после завершения выполнения `CREATE TABLE AS` в созданной таблице будет только одна запись с таким значением первичного ключа. При этом какая именно из записей найденных в `SELECT` будет добавлена - в общем случае не определено.

{% endnote %}


* `CREATE TABLE AS` поддерживается только в режиме [неявного контроля транзакций](https://ydb.tech/docs/ru/concepts/transactions.md?version=v25.4#implicit). Таблица появится по указанному пути уже заполненной.

* `CREATE TABLE AS` может быть только единственным [DML](https://en.wikipedia.org/wiki/Data_manipulation_language)/[DDL](https://en.wikipedia.org/wiki/Data_definition_language) выражением в запросе. Допустимо использование [PRAGMA](https://ydb.tech/docs/ru/yql/reference/syntax/pragma.md?version=v25.4), [DECLARE](https://ydb.tech/docs/ru/yql/reference/syntax/declare.md?version=v25.4) и [именованных выражений](https://ydb.tech/docs/ru/yql/reference/syntax/expressions.md?version=v25.4#named-nodes).

* `CREATE TABLE AS` не конфликтует с другими транзакциями. При выполнении запроса не используются блокировки, а все чтения производятся из консистентного снапшота. Балансировка или разделение [таблеток](https://ydb.tech/docs/ru/concepts/glossary.md?version=v25.4#tablet) не приводят к ошибкам.

* `CREATE TABLE AS` позволяет использовать в одном запросе и [колоночные таблицы](https://ydb.tech/docs/ru/concepts/glossary.md?version=v25.4#column-oriented-table), и [строковые таблицы](https://ydb.tech/docs/ru/concepts/glossary.md?version=v25.4#row-oriented-table).

* `CREATE TABLE AS` при выполнении создаёт [временную таблицу](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/temporary.md?version=v25.4) и перемещает её по нужному пути после окончания записи данных. Если при выполнении `CREATE TABLE AS` произошла ошибка приведшая к прерыванию выполнения команды, то временная таблица может быть удалена не сразу, а в течение небольшого промежутка времени.

## Примеры

{% list tabs %}

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

    ```yql
    CREATE TABLE my_table (
        PRIMARY KEY (key)
    ) AS SELECT 
        1 AS key,
        "test" AS value;
    ```

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

    ```yql
    CREATE TABLE my_table (
        PRIMARY KEY (key1, key2)
    ) WITH (
        STORE=COLUMN
    ) AS SELECT 
        key AS key1,
        Unwrap(other_key) AS key2,
        value,
        String::Contains(value, "test") AS has_test
    FROM other_table;
    ```

{% endlist %}
