---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.4
alternate:
  - https://ydb.tech/docs/en/concepts/query_execution/federated_query/s3/write_data.md
  - https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/write_data.md
sourcePath: ru/core/concepts/query_execution/federated_query/s3/write_data.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Запись данных в бакеты S3

В YDB для записи данных в бакет S3 можно использовать [внешние источники данных](#external-source-write) или [внешние таблицы](#external-table-write).

## Запись в S3 через внешний источник данных {#external-source-write}

Запись данных с помощью [внешних источников данных](https://ydb.tech/docs/ru/concepts/datamodel/external_data_source.md) удобно использовать для прототипирования и первоначальной настройки работы с записью данных. В общем виде запрос записи в S3-совместимое хранилище данных с использованием внешнего источника данных выглядит следующим образом:

```yql
INSERT INTO
    <s3_external_datasource_name>.<write_folder>
WITH
(
    FORMAT = "<file_format>",
    COMPRESSION = "<compression>",
    SCHEMA = (<schema_definition>),
    <format_settings>
)
    <expression>
```

Где:

* `s3_external_datasource_name` — название внешнего источника данных, ведущего на бакет с S3-совместимого хранилища данных.
* `write_folder` — путь к директории внутри бакета, в которую будет вестись запись;  путь должен быть не пустым и заканчиваться на `/`; запись в корень бакета не поддерживается.
* `file_format` — [формат данных](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/formats.md#formats) в файлах, обязательно.
* `compression` — [формат сжатия](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/formats.md#compression_formats) файлов, опционально.
* `schema_definition` — [описание схемы хранимых данных](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/external_data_source.md#schema) в файлах, опционально; если не указано, будет выведено автоматически из типа `<expression>`.
* `format_settings` — [параметры форматирования](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/external_data_source.md#format_settings), опционально.

SQL-выражение иллюстрирует запись данных во внешний источник данных напрямую.

```yql
INSERT INTO external_source.`test/`
WITH
(
    FORMAT = "csv_with_names"
)
SELECT
    "value" AS value, "name" AS name
```

Запись будет произведена в указанный путь, создаваемые при записи файлы получают случайные имена. Для задания партицирования данных нужно использовать `PARTITIONED_BY` в секции `WITH`, так же как и при чтении из внешних источников данных, подробнее [здесь](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/partitioning.md). [Расширенное партицирование](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/partition_projection.md) не поддерживается для записи в S3. Партицирование данных при записи поддерживается для всех [форматов записи](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/formats.md#formats), кроме `json_list` и `raw`.

При работе с внешними источниками данных и таблицами возможны только операции чтения (`SELECT`) и вставки (`INSERT`) данных, другие виды операций не поддерживаются.

## Запись данных через внешние таблицы {#external-table-write}

Если записывать данные нужно регулярно, то удобно делать это с помощью внешних таблиц. При этом нет необходимости указывать все детали работы с этими данными в каждом запросе. Для записи данных в бакет создайте [внешнюю таблицу](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/external_table.md) для S3-совместимого хранилища данных и используйте обычное SQL-выражение `INSERT INTO`:

```yql
INSERT INTO test
SELECT
    "value" AS value, "name" AS name
```

## Экспорт данных в объектное хранилище S3 {#export-to-s3}

YDB поддерживает экспорт данных из таблиц в S3 с помощью [внешнего источника данных](https://ydb.tech/docs/ru/concepts/datamodel/external_data_source.md).

Для экспорта необходимо использовать запрос [записи во внешний источник данных](#external-source-write) с указанием [формата экспортируемых файлов](https://ydb.tech/docs/ru/concepts/query_execution/federated_query/s3/formats.md#formats):

```yql
INSERT INTO external_source.`test/`
WITH
(
    FORMAT = "parquet"
)
SELECT
    *
FROM table
```

Экспортировать можно как обычные YDB [таблицы](https://ydb.tech/docs/ru/concepts/datamodel/table.md), так и любые [внешние таблицы](https://ydb.tech/docs/ru/concepts/datamodel/external_table.md).

{% note tip %}

Рекомендованным форматом экспорта является `parquet`, для него оптимизированы сценарии импорта и экспорта.

{% endnote %}

Для экспорта в S3-совместимое хранилище данных всех таблиц, расположенных в определённой директории в схеме данных, а также информации о расположении таблиц, директорий и индексов таблиц, нужно использовать YDB CLI. Подробнее см. в статье [Выгрузка в S3-совместимое хранилище](https://ydb.tech/docs/ru/reference/ydb-cli/export-import/export-s3.md).
