[Документация Yandex Cloud](../../../../index.md) > [Yandex Data Transfer](../../../index.md) > [Пошаговые инструкции](../../index.md) > [Настройка эндпоинтов](../index.md) > Object Storage > Источник

# Передача данных из эндпоинта-источника Yandex Object Storage

С помощью сервиса Yandex Data Transfer вы можете переносить данные из хранилища Yandex Object Storage в управляемые базы данных Yandex Cloud и реализовывать различные сценарии обработки и трансформации данных. Для реализации трансфера:

1. [Ознакомьтесь с возможными сценариями передачи данных](#scenarios).
1. [Настройте эндпоинт-источник](#endpoint-settings) в Yandex Data Transfer.
1. [Настройте один из поддерживаемых приемников данных](#supported-targets).
1. [Создайте](../../transfer.md#create) и [запустите](../../transfer.md#activate) трансфер.
1. Выполняйте необходимые действия по работе с хранилищем и [контролируйте трансфер](../../monitoring.md).
1. При возникновении проблем, [воспользуйтесь готовыми решениями](../../../troubleshooting/index.md) по их устранению.

## Сценарии передачи данных из Object Storage {#scenarios}

Вы можете реализовывать сценарии миграции и поставки данных из хранилища Yandex Object Storage в управляемые базы данных для дальнейшего хранения в облаке, обработки и загрузки в витрины данных с целью последующей визуализации.

Загрузка данных в витрины — процесс трансфера подготовленных данных в хранилища с целью последующей визуализации.

* [Загрузка данных из Object Storage в PostgreSQL](../../../tutorials/object-storage-to-postgresql.md);
* [Загрузка данных из Object Storage в Greenplum®](../../../tutorials/object-storage-to-greenplum.md);
* [Загрузка данных из Object Storage в MySQL®](../../../tutorials/objs-mmy-migration.md);
* [Загрузка данных из Object Storage в ClickHouse®](../../../tutorials/object-storage-to-clickhouse.md);

Подробное описание возможных сценариев передачи данных в Yandex Data Transfer читайте в разделе [Практические руководства](../../../tutorials/index.md).

## Настройка эндпоинта-источника Object Storage {#endpoint-settings}

При [создании](../index.md#create) или [изменении](../index.md#update) эндпоинта вы можете задать:

* [Настройки конфигурации](#bucket-config) и [очереди событий](#sqs-queue) для бакета Yandex Object Storage или пользовательского S3-совместимого хранилища.
* [Дополнительные параметры](#additional-settings).

### Настройки конфигурации бакета {#bucket-config}

{% list tabs group=instructions %}

- Бакет Yandex Object Storage {#obj-storage}

    
    * **Бакет** — имя [бакета](../../../../storage/concepts/bucket.md).
    * **Сервисный аккаунт** – выберите из списка [сервисный аккаунт](../../../../iam/concepts/users/service-accounts.md) с доступом к бакету.


    * (Опционально) **Префикс пути** — префикс для каталогов и файлов, которые можно использовать для поиска по бакету.
    * **Шаблон пути** — укажите шаблон пути. Если в бакете размещаются только файлы, используйте значение `**`.

- Пользовательское S3-совместимое хранилище {#s3-storage}

    * **Бакет** — имя бакета.
    * **Идентификатор статического ключа** и **Содержимое статического ключа** — [идентификатор и содержимое ключа AWS](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) для доступа к частному бакету.
    * (Опционально) **Эндпоинт** — эндпоинт для службы, совместимой с Amazon S3. Оставьте поле пустым для использования Amazon.
    * **Регион** — регион для отправки запросов.
    * **Использовать SSL** — выберите, если удаленный сервер использует безопасное соединение SSL/TLS.
    * **Проверять SSL-сертификат** — разрешить самоподписанные сертификаты.
    * (Опционально) **Префикс пути** — префикс для каталогов и файлов, которые можно использовать для поиска по бакету.
    * **Шаблон пути** — укажите шаблон пути. Если в бакете размещаются только файлы, используйте значение `**`.

{% endlist %}

### Конфигурация очереди событий {#sqs-queue}

* **Имя очереди** — имя очереди, настроенной в бакете S3, для получения событий `s3:ObjectCreated`.
* **Идентификатор аккаунта владельца очереди** — идентификатор аккаунта AWS для аккаунта, создавшего очередь. Оставьте поле пустым, если бакет S3 и очередь созданы в одном и том же аккаунте.
* **Идентификатор статического ключа** — идентификатор ключа AWS, используемый как часть учетных данных для чтения из очереди SQS. Оставьте поле пустым, если можно использовать те же учетные данные, что и для бакета S3.
* **Содержимое статического ключа** — секрет AWS, используемый как часть учетных данных для чтения из очереди SQS. Оставьте пустым, если можно использовать те же учетные данные, что и для бакета S3.
* **Эндпоинт** — эндпоинт для S3-совместимого сервиса. Оставьте поле пустым, чтобы использовать AWS.
* **Регион** — регион AWS для отправки запросов. Оставьте поле пустым, если он совпадает с регионом бакета.
* **Использовать SSL** — выберите, если удаленный сервер использует безопасное соединение SSL/TLS.
* **Проверять SSL-сертификат** — разрешить самоподписанные сертификаты.

### Дополнительные настройки {#additional-settings}

#### Формат данных {#data-format}

{% list tabs %}

- CSV

     * **Разделитель** — символ-разделитель.
     * **Символ кавычек** — символ для обозначения начала и конца строки.
     * **Символ отмены** — Escape-символ, используемый для экранирования специальных символов.
     * **Кодировка** — [кодировка](https://docs.python.org/3/library/codecs.html#standard-encodings).
     * **Двойные кавычки** — выберите, чтобы заменять двойные кавычки на одинарные.
     * **Разрешить перенос строк в значениях** — выберите, если значения текстовых данных могут содержать символы переноса строки.
     * **Размер блока** — максимальная длина части файла, размещаемой в памяти во время чтения.
     * **Расширенные настройки** — необходимые CSV [ConvertOptions](https://arrow.apache.org/docs/python/generated/pyarrow.csv.ConvertOptions.html#pyarrow.csv.ConvertOptions) для редактирования. Указываются в виде JSON-строки.
     * **Дополнительные возможности чтения** — необходимые CSV [ReadOptions](https://arrow.apache.org/docs/python/generated/pyarrow.csv.ReadOptions.html#pyarrow.csv.ReadOptions) для редактирования. Указываются в виде JSON-строки.

- Parquet

- JSON Lines
  
     * **Разрешить перенос строк в значениях** — разрешить использовать символы новой строки в значениях JSON. Использование этого параметра может повлиять на производительность. Оставьте пустым, чтобы по умолчанию было установлено значение `FALSE`.
     * **Неожиданное поведение поля** — метод обработки полей JSON за пределами `explicit_schema` (если указано). Смотрите [документацию PyArrow](https://arrow.apache.org/docs/python/generated/pyarrow.json.ParseOptions.html).
     * **Размер блока** — размер фрагмента в байтах для одновременной обработки в памяти каждого файла. Если объем данных большой, и не удается обнаружить схему, увеличение этого значения должно решить проблему. Слишком большое значение может привести к ошибкам OOM.

- Proto

    * **Дескриптор protobuf** — загрузите файл-дескриптор.
    * **Тип упаковки protobuf-сообщений** — укажите способ упаковки сообщений:
        * `Protoseq` — последовательность целевых сообщений с разделителем;
        * `Repeated` — целевое сообщение находится в поле `repeated` единственного сообщения-обертки;
        * `Single message` — единственное целевое сообщение;
    * **Имя protobuf-сообщения** — если тип упаковки `Repeated`, указывается имя сообщения, содержащего единственное поле `repeated` целевым сообщением (иначе указывается имя целевого сообщения).
    * **Список первичных ключей** — перечислите поля, чтобы они добавились в результат как первичные ключи.
    * **Включаемые поля** — перечислите поля сообщения для передачи. Если не задано, выводятся все поля сообщения.
    * **Использовать значение NULL в ключевых столбцах** — выберите эту опцию, чтобы разрешить значение `null` в ключевых колонках.

- Nginx logs

    * **Шаблон (log_format)** — формат лога, аналогичный директиве [log_format](https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format), например:

        ```text
        "$remote_addr" "$remote_user" "[$time_local]" "$request"
        ```

        Чтобы избежать ошибок парсинга, настройте Nginx так, чтобы токены были заключены в кавычки, и включите экранирование данных (`escape=default` или `escape=json`).

        Чтобы переименовать поля в целевой таблице, переименуйте необходимые токены в поле **Шаблон (log_format)**. На примере выше — чтобы перенести данные с токеном `time_local` в колонку `date_time` целевой таблицы, укажите следующий формат лога:

        ```text
        "$remote_addr" "$remote_user" "[$date_time]" "$request"
        ```

    * **Размер блока** — максимальный размер части файла, размещаемой в памяти во время чтения (в байтах).

{% endlist %}

#### Датасет {#dataset}

* **Схема** — укажите схему служебной таблицы, которая будет использоваться для подключения.
* **Таблица** — укажите имя служебной таблицы, которое будет использоваться для подключения.
* **Добавить системные колонки** — добавить в схему результатов системные колонки `__file_name` и `__row_index`. `__file_name` соответствует имени объекта S3, из которого поступают данные. `__row_index` соответствует счетчику строк, в котором находятся данные, в объекте S3.

  {% note warning %}

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

  {% endnote %}

* **Схема результирующей таблицы** — укажите JSON-схему в формате `{"<столбец>": "<тип_данных>"}` или перечислите поля для схемы результирующей таблицы. Если вы выберете `Автоматически`, то схема определится автоматически.
* **Политика обработки unparsed** — определите, как следует обрабатывать строки, не прошедшие проверку типов:
  * **Продолжать** — продолжать передачу данных.
  * **Прерывать** — не продолжать.
  * **Повторять** — повторить попытку определить тип.
* **Интервал сканирования** — укажите интервал между сканированиями для новых файлов при репликации.

## Настройка приемника данных {#supported-targets}

Настройте один из поддерживаемых приемников данных:

* [PostgreSQL](../target/postgresql.md)
* [MySQL®](../target/mysql.md)
* [ClickHouse®](../target/clickhouse.md)
* [Greenplum®](../target/greenplum.md)

Полный список поддерживаемых источников и приемников в Yandex Data Transfer читайте в разделе [Доступные трансферы](../../../transfer-matrix.md).

После настройки источника и приемника данных [создайте и запустите трансфер](../../transfer.md#create).

## Решение проблем, возникающих при переносе данных {#troubleshooting}

Смотрите полный список рекомендаций в разделе [Решение проблем](../../../troubleshooting/index.md).

### Ошибка при обновлении данных в источнике {#update-not-supported}

Текст ошибки:

```text
Push failed: kind: update not supported
```

Object Storage поддерживает только вставку новых данных, но не поддерживает их обновление. Если в источнике происходит обновление данных, трансфер завершится с ошибкой.

**Решение**: используйте источники, которые поддерживают только вставку данных, или выберите вместо Object Storage другой приемник.