Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

Поддерживается сообществом

Apify — это платформа для веб-скрейпинга и автоматизации. Вы создаёте, запускаете и масштабируете бессерверные облачные программы под названием Actors. Actors собирают данные с веб-сайтов, сканируют веб, обрабатывают данные или автоматизируют рабочие процессы. Каждый запуск Actor создаёт структурированный результат, который сохраняется в датасетах (коллекциях объектов JSON).

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

Ключевые понятия

Понятие Apify Что это
Actor Бессерверная облачная программа, работающая на платформе Apify. В Apify Store доступны тысячи готовых Actor.
Dataset Результат выполнения Actor. Табличная коллекция объектов JSON, доступная в форматах JSON, CSV, XML и других через Apify API.
Webhook HTTP-вызов, запускаемый по событию, когда выполнение Actor завершается успешно, с ошибкой или достигает других этапов жизненного цикла. Используйте вебхуки, чтобы автоматизировать конвейер от Apify до ClickHouse.

Руководство по настройке

Подготовьте сведения о подключении к ClickHouse

Чтобы подключиться к ClickHouse по HTTP(S), вам понадобится следующая информация:

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

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

Кнопка подключения сервиса ClickHouse Cloud

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

Сведения о подключении к ClickHouse Cloud по HTTPS

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

Необходимые условия для Apify

Также вам понадобятся:

Установите зависимости

Установите JavaScript-клиент Apify и JavaScript-клиент ClickHouse:

npm install apify-client @clickhouse/client

Создайте целевую таблицу в ClickHouse

Создайте таблицу для хранения собранных данных. Схема зависит от используемого Actor. В этом примере для Actor, собирающего данные о товарах, используется MergeTree:

CREATE TABLE apify_products
(
    url        String,
    title      String,
    price      Float64,
    currency   String,
    scraped_at DateTime DEFAULT now()
)
ENGINE = MergeTree()
ORDER BY (scraped_at, url);

Получите датасет Apify и загрузите его в ClickHouse

Следующий скрипт получает результаты запуска Actor в Apify и вставляет их в ClickHouse:

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();

Автоматизируйте процесс с помощью вебхуков

Вместо ручного запуска скрипта автоматизируйте конвейер, чтобы данные загружались в ClickHouse каждый раз, когда Actor завершает работу:

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

Подробные сведения о полезной нагрузке и параметрах конфигурации см. в документации Apify по вебхукам.

Альтернативный вариант — использовать Apify Schedules для запуска Actors по cron-подобному расписанию в сочетании с вебхуками для этапа загрузки.

Рекомендации по лучшей практике

Получение данных из Apify

Используйте клиентскую библиотеку Apify (apify-client для JavaScript или Python) вместо прямых HTTP-запросов. Она сама обрабатывает пагинацию, повторные попытки и аутентификацию. Для больших датасетов постранично получайте результаты с помощью параметров limit и offset конечной точки Список элементов датасета.

Загрузка данных в ClickHouse

При вставке данных в ClickHouse используйте формат JSONEachRow. Он напрямую соответствует JSON-выводу Apify, поэтому никакого преобразования не требуется.

Схема таблицы ClickHouse должна соответствовать выходным полям Actor. Проверить выходную схему Actor можно на его странице в Apify Store или на вкладке Dataset после выполнения.

Производительность

Для высокопроизводительных вставок из JavaScript-клиента следуйте рекомендациям в разделе Советы по оптимизации производительности. Собирайте строки в более крупные батчи для вставки вместо того, чтобы вставлять их по одной, и рассмотрите асинхронные вставки, если батчинг на стороне клиента непрактичен.

Безопасность

В примерах на этой странице для простоты используются пользователь и база данных default. В рабочей среде создайте отдельного пользователя с минимальными привилегиями, необходимыми для вставки данных в целевую таблицу, и храните учетные данные в безопасном месте (например, в переменных окружения или менеджере secrets, а не добавляйте их в исходный код). Рекомендации см. в разделе Cloud access management.

Navigation