# Ввод данных в системы хранения


{% note warning %}

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в [регионе Россия](../../overview/concepts/region.md).

{% endnote %}


Данные от мобильных телефонов, разнообразных умных устройств или внешних сервисов могут поступать небольшими пакетами, количество пакетов может быть очень велико. Часто для передачи используются медленные каналы связи, а время связи ограничено. Yandex Data Streams принимает поступающие с высокой частотой и скоростью данные, формирует пакеты для отправки в принимающие системы, обеспечивая оптимальные режимы работы для источников и приемников. Использование API-шлюза для приема сообщений позволяет реализовать собственный протокол передачи данных.

В этом сценарии [API-шлюз](../../api-gateway/concepts/index.md) принимает входящие данные и отправляет их в [поток данных](../../data-streams/concepts/index.md). В потоке данные буферизируются и передаются с помощью [трансфера](../../data-transfer/concepts/index.md) в кластер баз данных [ClickHouse®](../../managed-clickhouse/concepts/index.md).

Чтобы настроить ввод данных:

1. [Подготовьте облако к работе](#before-you-begin).
1. [Настройте окружение](#setup).
1. [Создайте кластер ClickHouse®](#create-cluster).
1. [Создайте поток данных](#create-stream).
1. [Создайте API-шлюз](#create-api-gw).
1. [Создайте трансфер](#create-transfer).
1. [Проверьте отправку и получение данных](#test-ingestion).

Если ввод данных вам больше не нужен, [удалите используемые им ресурсы](#clear-out).

## Подготовьте облако к работе {#before-you-begin}

Зарегистрируйтесь в Yandex Cloud и создайте [платежный аккаунт](../../billing/concepts/billing-account.md):
1. Перейдите в [консоль управления](https://kz.console.yandex.cloud), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Yandex Cloud Billing](https://kz.console.yandex.cloud/billing)** убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](../../billing/quickstart/index.md) и [привяжите](../../billing/operations/pin-cloud.md) к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет работать ваша инфраструктура, на [странице облака](https://kz.console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](../../resource-manager/concepts/resources-hierarchy.md).


### Необходимые платные ресурсы {#paid-resources}

* API-шлюз: количество запросов к шлюзу ([тарифы Yandex API Gateway](../../api-gateway/pricing.md)).
* Сервис Data Streams ([тарифы Data Streams](../../data-streams/pricing.md)). Стоимость зависит от режима тарификации:

    * [По выделенным ресурсам](../../data-streams/pricing.md#rules) — оплачивается фиксированная почасовая ставка за установленный лимит пропускной способности и срок хранения сообщений, а также дополнительно количество единиц фактически записанных данных.

    * [По фактическому использованию](../../data-streams/pricing.md#on-demand) (On-demand) — оплачиваются выполненные операции записи и чтения данных, объем считанных/записанных данных, а также объем фактически используемого хранилища для сообщений, по которым не истек срок хранения.

* База данных Managed Service for YDB, работающая в бессерверном режиме: операции с данными, объем хранимых данных и резервных копий ([тарифы Managed Service for YDB](../../ydb/pricing/index.md)).
* Кластер Managed Service for ClickHouse®: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий ([тарифы Managed Service for ClickHouse®](../../managed-clickhouse/pricing.md)).
* Публичные IP-адреса, если для хостов кластера включен публичный доступ ([тарифы Virtual Private Cloud](../../vpc/pricing.md)).
* Каждый трансфер: использование вычислительных ресурсов и количество переданных строк данных ([тарифы Yandex Data Transfer](../../data-transfer/pricing.md)).


## Настройте окружение {#setup}

[Создайте](../../iam/operations/sa/create.md) сервисный аккаунт и [назначьте](../../iam/operations/sa/assign-role-for-sa.md) ему роль `editor` на ваш каталог.

## Создайте кластер ClickHouse® {#create-cluster}

1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором нужно создать кластер БД.
1. Перейдите в сервис **Managed Service for&nbsp;ClickHouse**.
1. Нажмите кнопку **Создать кластер**.
1. Укажите настройки кластера ClickHouse®:
    1. В блоке **Настройки СУБД** укажите имя БД, имя пользователя и пароль.
    1. В блоке **Базовые параметры**:
      * Введите имя кластера.
      * Выберите созданный ранее сервисный аккаунт.
    1. В блоке **Хосты** нажмите значок ![pencil](../../_assets/pencil.svg). Включите опцию **Публичный доступ** и нажмите кнопку **Сохранить**.

        {% note info %}
        
        Публичный доступ к хостам кластера нужен, если вы планируете подключаться к кластеру через интернет. Этот вариант подключения более простой, и его рекомендуется использовать для прохождения руководства. К хостам без публичного доступа тоже можно подключиться, но только с виртуальных машин Yandex Cloud, расположенных в той же облачной сети, что и кластер.
        
        {% endnote %}
    1. Задайте остальные параметры кластера по [инструкции](../../managed-clickhouse/operations/cluster-create.md).
1. Нажмите кнопку **Создать кластер**.

Дождитесь запуска кластера. Когда кластер будет готов к использованию, его состояние изменится на `Alive`.

## Создайте поток данных {#create-stream}

1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором хотите создать поток данных.
1. Перейдите в сервис **Data Streams**.
1. Нажмите кнопку **Создать поток**.
1. Укажите существующую [бессерверную](../../ydb/concepts/serverless-and-dedicated.md#serverless) базу данных YDB или [создайте](../../ydb/quickstart.md#serverless) новую. Если вы создали новую базу данных, после ее создания нажмите кнопку ![refresh-button](../../_assets/data-streams/refresh-button.svg) для обновления списка баз.
1. Введите имя потока данных.
1. Нажмите кнопку **Создать**.

Дождитесь запуска потока данных. Когда поток будет готов к использованию, его статус изменится с `CREATING` на `ACTIVE`.

## Создайте API-шлюз {#create-api-gw}

1. На странице созданного потока данных нажмите кнопку **Действия** и выберите **API Gateway**.
1. Введите имя API-шлюза.
1. В поле **Спецификация** замените значение ключа `service_account_id` идентификатором созданного ранее сервисного аккаунта.

    Сохраните значения полей **Имя** и ***Служебный домен**, они понадобятся на следующих шагах.
1. Нажмите кнопку **Создать**.

Дождитесь запуска API-шлюза. Когда API-шлюз будет готов к использованию, его статус изменится с `CREATING` на `ACTIVE`.

## Создайте трансфер {#create-transfer}

1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором нужно создать трансфер.
1. Перейдите в сервис **Data Transfer**.
1. Нажмите кнопку **Создать трансфер**.
1. Введите имя трансфера.
1. [Cоздайте](../../data-transfer/operations/endpoint/index.md#create) эндпоинт-источник:
    1. Укажите имя эндпоинта.
    1. В списке **Тип базы данных** выберите `Yandex Data Streams`.
    1. Выберите базу данных для источника.
    1. Введите имя созданного ранее потока данных.
    1. Выберите созданный ранее сервисный аккаунт.
    1. Нажмите кнопку **Создать**.
1. [Cоздайте](../../data-transfer/operations/endpoint/index.md#create) эндпоинт-приемник:
    1. Укажите имя эндпоинта.
    1. В списке **Тип базы данных** выберите `ClickHouse`.
    1. Выберите созданный ранее MDB кластер.
    1. Введите имя БД, имя пользователя и пароль созданного ранее кластера.
    1. Нажмите кнопку **Создать**.
1. Нажмите кнопку **Создать**.
1. Нажмите на значок ![ellipsis](../../_assets/horizontal-ellipsis.svg) рядом с именем созданного трансфера и выберите **Активировать**.

Дождитесь активации трансфера. Когда трансфер будет готов к использованию, его статус сменится с **Создается** на **Реплицируется**.

## Проверьте отправку и получение данных {#test-ingestion}

1. Отправьте данные в систему хранения:

    ```bash
    curl --request POST --data 'test massage' https://<url>/<paths>
    ```

    Где:

    * `<url>` — сохраненное ранее значение **Служебный домен** API-шлюза;
    * `<paths>` — сохраненное ранее значение **Имя** API-шлюза.
1. В [консоли управления](https://kz.console.yandex.cloud) выберите созданный ранее кластер Managed Service for ClickHouse®.
1. На панели слева выберите **SQL**.
1. Введите имя пользователя и пароль и нажмите кнопку **Подключиться**.
1. В списке выберите созданную ранее базу данных.
1. Выберите таблицу БД.

Если настройка выполнена успешно, в таблице появится запись, содержащая служебные данные и отправленное сообщение.

## Удалите созданные ресурсы {#clear-out}

Чтобы снизить потребление ресурсов, которые вам не нужны, удалите их:

1. [Удалите API-шлюз](../../api-gateway/operations/api-gw-delete.md).
1. [Удалите трансфер](../../data-transfer/operations/transfer.md#delete).
1. [Удалите эндпоинты](../../data-transfer/operations/endpoint/index.md#delete).
1. [Удалите поток данных](../../data-streams/operations/manage-streams.md#delete-data-stream).
1. [Удалите кластер ClickHouse®](../../managed-clickhouse/operations/cluster-delete.md).

_ClickHouse® является зарегистрированным товарным знаком [ClickHouse, Inc](https://clickhouse.com)._