> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Загружайте в ClickHouse данные веб-скрейпинга и автоматизации из Apify

# Подключите Apify к ClickHouse

export const CommunityMaintainedBadge = () => {
  return <div className="CommunityMaintainedBadge">
            <div className="CommunityMaintainedIcon">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256">
                <path d="M244.8,150.4a8,8,0,0,1-11.2-1.6A51.6,51.6,0,0,0,192,128a8,8,0,0,1-7.37-4.89,8,8,0,0,1,0-6.22A8,8,0,0,1,192,112a24,24,0,1,0-23.24-30,8,8,0,1,1-15.5-4A40,40,0,1,1,219,117.51a67.94,67.94,0,0,1,27.43,21.68A8,8,0,0,1,244.8,150.4ZM190.92,212a8,8,0,1,1-13.84,8,57,57,0,0,0-98.16,0,8,8,0,1,1-13.84-8,72.06,72.06,0,0,1,33.74-29.92,48,48,0,1,1,58.36,0A72.06,72.06,0,0,1,190.92,212ZM128,176a32,32,0,1,0-32-32A32,32,0,0,0,128,176ZM72,120a8,8,0,0,0-8-8A24,24,0,1,1,87.24,82a8,8,0,1,0,15.5-4A40,40,0,1,0,37,117.51,67.94,67.94,0,0,0,9.6,139.19a8,8,0,1,0,12.8,9.61A51.6,51.6,0,0,1,64,128,8,8,0,0,0,72,120Z"></path>
            </svg>
        </div>
            Поддерживается сообществом
        </div>;
};

<CommunityMaintainedBadge />

[Apify](https://apify.com/) — это платформа для веб-скрейпинга и автоматизации. Вы создаёте, запускаете и масштабируете бессерверные облачные программы под названием [**Actors**](https://docs.apify.com/platform/actors). Actors собирают данные с веб-сайтов, сканируют веб, обрабатывают данные или автоматизируют рабочие процессы. Каждый запуск Actor создаёт структурированный результат, который сохраняется в [**датасетах**](https://docs.apify.com/platform/storage/dataset) (коллекциях объектов JSON).

Загружайте собранные или обработанные данные в ClickHouse для аналитики, мониторинга или конвейеров обогащения.

<div id="key-concepts">
  ## Ключевые понятия
</div>

| Понятие Apify                                                        | Что это                                                                                                                                                                                                              |
| -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Actor](https://docs.apify.com/platform/actors)**                  | Бессерверная облачная программа, работающая на платформе Apify. В [Apify Store](https://apify.com/store) доступны тысячи готовых Actor.                                                                              |
| **[Dataset](https://docs.apify.com/platform/storage/dataset)**       | Результат выполнения Actor. Табличная коллекция объектов JSON, доступная в форматах JSON, CSV, XML и других через [Apify API](https://docs.apify.com/api/v2).                                                        |
| **[Webhook](https://docs.apify.com/platform/integrations/webhooks)** | HTTP-вызов, запускаемый по событию, когда выполнение Actor завершается успешно, с ошибкой или достигает других этапов жизненного цикла. Используйте вебхуки, чтобы автоматизировать конвейер от Apify до ClickHouse. |

<div id="setup-guide">
  ## Руководство по настройке
</div>

<Steps>
  <Step title="Подготовьте сведения о подключении к ClickHouse" id="1-gather-your-connection-details">
    Чтобы подключиться к ClickHouse по HTTP(S), вам понадобится следующая информация:

    | Параметр(ы)               | Описание                                                                                                               |
    | ------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
    | `HOST` and `PORT`         | Обычно используется порт 8443 при использовании TLS и 8123 без TLS.                                                    |
    | `DATABASE NAME`           | По умолчанию есть база данных `default`; используйте имя базы данных, к которой хотите подключиться.                   |
    | `USERNAME` and `PASSWORD` | По умолчанию имя пользователя — `default`. Используйте имя пользователя, подходящее для вашего сценария использования. |

    Сведения о подключении для вашего сервиса ClickHouse Cloud доступны в консоли ClickHouse Cloud.
    Выберите сервис и нажмите **Connect**:

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/cloud-connect-button.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=ec0a298a33ca841e947fa5e8bae47362" alt="Кнопка подключения сервиса ClickHouse Cloud" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    Выберите **HTTPS**. Сведения о подключении будут показаны в примере команды `curl`.

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/connection-details-https.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=cb0fbd98aa2b5b7ca484c9f53395ee07" alt="Сведения о подключении к ClickHouse Cloud по HTTPS" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    Если вы используете самоуправляемый ClickHouse, сведения о подключении задаёт ваш администратор ClickHouse.
  </Step>

  <Step title="Необходимые условия для Apify" id="2-apify-prerequisites">
    Также вам понадобятся:

    * [Учетная запись Apify](https://console.apify.com/sign-up) (доступен бесплатный уровень).
    * [API-токен Apify](https://docs.apify.com/platform/integrations/api#api-token), который можно найти в разделе **Settings > Integrations** в [консоли Apify](https://console.apify.com/).
    * Локально установленный Node.js 18+ (для примеров на JavaScript).
  </Step>

  <Step title="Установите зависимости" id="3-install-dependencies">
    Установите JavaScript-клиент Apify и JavaScript-клиент ClickHouse:

    ```bash theme={null}
    npm install apify-client @clickhouse/client
    ```

    <Note>
      Apify также предоставляет [клиент Python](https://docs.apify.com/api/client/python). Если вы предпочитаете Python, установите `apify-client` через pip и используйте [clickhouse-connect](/docs/ru/integrations/language-clients/python/index) для ClickHouse.
    </Note>
  </Step>

  <Step title="Создайте целевую таблицу в ClickHouse" id="4-create-a-target-table">
    Создайте таблицу для хранения собранных данных. Схема зависит от используемого Actor. В этом примере для Actor, собирающего данные о товарах, используется [MergeTree](/docs/ru/reference/engines/table-engines/mergetree-family/mergetree):

    ```sql theme={null}
    CREATE TABLE apify_products
    (
        url        String,
        title      String,
        price      Float64,
        currency   String,
        scraped_at DateTime DEFAULT now()
    )
    ENGINE = MergeTree()
    ORDER BY (scraped_at, url);
    ```
  </Step>

  <Step title="Получите датасет Apify и загрузите его в ClickHouse" id="5-fetch-and-load">
    Следующий скрипт получает результаты запуска Actor в Apify и вставляет их в ClickHouse:

    ```javascript theme={null}
    import { ApifyClient } from 'apify-client';
    import { createClient } from '@clickhouse/client';

    // Инициализация клиентов
    const apify = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
    const clickhouse = createClient({
        url: 'https://YOUR_CLICKHOUSE_HOST:8443',
        username: 'default',
        password: 'YOUR_CLICKHOUSE_PASSWORD',
        database: 'default',
    });

    // Получение элементов dataset из последнего запуска Actor
    const run = await apify.actor('YOUR_ACTOR_ID').call();
    const { items } = await apify.dataset(run.defaultDatasetId).listItems();

    console.log(`Fetched ${items.length} items from Apify dataset.`);

    // Вставка в ClickHouse
    await clickhouse.insert({
        table: 'apify_products',
        values: items,
        format: 'JSONEachRow',
    });

    console.log(`Inserted ${items.length} rows into ClickHouse.`);
    await clickhouse.close();
    ```

    <Tip>
      Для больших датасетов получайте результаты постранично с помощью параметров `limit` и `offset` конечной точки [Список элементов датасета](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items). Также можно передать `clean=true`, чтобы получать только непустые дедуплицированные элементы.
    </Tip>
  </Step>

  <Step title="Автоматизируйте процесс с помощью вебхуков" id="6-automate-with-webhooks">
    Вместо ручного запуска скрипта автоматизируйте конвейер, чтобы данные загружались в ClickHouse каждый раз, когда Actor завершает работу:

    1. В [консоли Apify](https://console.apify.com/) перейдите к нужному Actor и откройте вкладку **Integrations**.
    2. Добавьте новый вебхук со следующими параметрами:
       * **Тип события:** `ACTOR.RUN.SUCCEEDED`
       * **Действие:** HTTP POST на конечную точку вашего загрузчика либо запуск другого Actor, который выполняет вставку в ClickHouse.
    3. Полезная нагрузка вебхука включает `defaultDatasetId`, который можно использовать для получения результатов запуска.

    Подробные сведения о полезной нагрузке и параметрах конфигурации см. в [документации Apify по вебхукам](https://docs.apify.com/platform/integrations/webhooks).

    Альтернативный вариант — использовать [Apify Schedules](https://docs.apify.com/platform/schedules) для запуска Actors по cron-подобному расписанию в сочетании с вебхуками для этапа загрузки.
  </Step>
</Steps>

<div id="best-practices">
  ## Рекомендации по лучшей практике
</div>

<div id="fetching-data-from-apify">
  ### Получение данных из Apify
</div>

Используйте клиентскую библиотеку Apify (`apify-client` для [JavaScript](https://docs.apify.com/api/client/js) или [Python](https://docs.apify.com/api/client/python)) вместо прямых HTTP-запросов. Она сама обрабатывает пагинацию, повторные попытки и аутентификацию. Для больших датасетов постранично получайте результаты с помощью параметров `limit` и `offset` конечной точки [Список элементов датасета](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items).

<div id="loading-into-clickhouse">
  ### Загрузка данных в ClickHouse
</div>

При вставке данных в ClickHouse используйте формат [`JSONEachRow`](/docs/ru/reference/formats/JSON/JSONEachRow). Он напрямую соответствует JSON-выводу Apify, поэтому никакого преобразования не требуется.

Схема таблицы ClickHouse должна соответствовать выходным полям Actor. Проверить выходную схему Actor можно на его странице в [Apify Store](https://apify.com/store) или на вкладке **Dataset** после выполнения.

<div id="performance">
  ### Производительность
</div>

Для высокопроизводительных вставок из JavaScript-клиента следуйте рекомендациям в разделе [Советы по оптимизации производительности](/docs/ru/integrations/language-clients/js/index#tips-for-performance-optimizations). Собирайте строки в более крупные батчи для вставки вместо того, чтобы вставлять их по одной, и рассмотрите [асинхронные вставки](/docs/ru/concepts/features/operations/insert/asyncinserts), если батчинг на стороне клиента непрактичен.

<div id="security">
  ### Безопасность
</div>

В примерах на этой странице для простоты используются пользователь и база данных `default`. В рабочей среде создайте отдельного пользователя с минимальными привилегиями, необходимыми для вставки данных в целевую таблицу, и храните учетные данные в безопасном месте (например, в переменных окружения или менеджере secrets, а не добавляйте их в исходный код). Рекомендации см. в разделе [Cloud access management](/docs/ru/products/cloud/guides/security/cloud-access-management/index).

<div id="related-resources">
  ## Связанные ресурсы
</div>

* [Документация по платформе Apify](https://docs.apify.com)
* [Справочник по API Apify](https://docs.apify.com/api/v2)
* [JavaScript-клиент Apify](https://docs.apify.com/api/client/js)
* [Клиент Python для Apify](https://docs.apify.com/api/client/python)
* [Apify Store (готовые Actors)](https://apify.com/store)
* [Обзор интеграций Apify](https://docs.apify.com/platform/integrations)
* [JavaScript-клиент ClickHouse](/docs/ru/integrations/language-clients/js/index)
