Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Connecter Apify à ClickHouse

Géré par la communauté

Apify est une plateforme de web scraping et d’automatisation. Vous créez, exécutez et faites évoluer des programmes serverless dans le cloud appelés Actors. Les Actors extraient des données de sites web, parcourent le web, traitent des données ou automatisent des workflows. Chaque exécution d’un Actor produit une sortie structurée stockée dans des Datasets (collections d’objets JSON).

Chargez les données extraites ou traitées dans ClickHouse pour des pipelines d’analyse, de monitoring ou d’enrichissement.

Concepts clés

Concept Apify Ce que c’est
Actor Un programme serverless dans le cloud qui s’exécute sur la plateforme Apify. Des milliers d’Actors prêts à l’emploi sont disponibles dans l’Apify Store.
Dataset Le résultat d’une exécution d’Actor. Une collection d’objets JSON structurée comme une table, récupérable en JSON, CSV, XML ou dans d’autres formats via l’API Apify.
Webhook Un appel HTTP déclenché par un événement lorsqu’une exécution d’Actor réussit, échoue ou atteint d’autres étapes de son cycle de vie. Utilisez les webhooks pour automatiser le pipeline d’Apify vers ClickHouse.

Guide de configuration

Rassemblez vos informations de connexion ClickHouse

Pour vous connecter à ClickHouse via HTTP(S), vous avez besoin des informations suivantes :

Paramètre(s) Description
HOST and PORT En général, le port est 8443 lors de l’utilisation de TLS, ou 8123 sans TLS.
DATABASE NAME Par défaut, une base de données nommée default est disponible ; utilisez le nom de la base de données à laquelle vous voulez vous connecter.
USERNAME and PASSWORD Par défaut, le nom d’utilisateur est default. Utilisez le nom d’utilisateur adapté à votre cas d’usage.

Les informations de votre service ClickHouse Cloud sont disponibles dans la console ClickHouse Cloud. Sélectionnez un service, puis cliquez sur Connect :

Bouton Connect du service ClickHouse Cloud

Choisissez HTTPS. Les détails de connexion s’affichent dans un exemple de commande curl.

Détails de connexion HTTPS ClickHouse Cloud

Si vous utilisez ClickHouse autogéré, les détails de connexion sont définis par votre administrateur ClickHouse.

Prérequis Apify

Vous aurez également besoin de :

Installer les dépendances

Installez le client JavaScript Apify et le client JavaScript ClickHouse :

npm install apify-client @clickhouse/client

Créer une table cible dans ClickHouse

Créez une table pour stocker les données extraites. Le schéma dépend de l’Actor que vous utilisez. Cet exemple utilise MergeTree pour un Actor de scraping de produits :

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

Récupérer le dataset Apify et le charger dans ClickHouse

Le script suivant récupère les résultats d’une exécution d’Actor Apify et les insère dans ClickHouse :

import { ApifyClient } from 'apify-client';
import { createClient } from '@clickhouse/client';

// Initialiser les clients
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',
});

// Récupérer les éléments du dataset de la dernière exécution d'un 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.`);

// Insérer dans ClickHouse
await clickhouse.insert({
    table: 'apify_products',
    values: items,
    format: 'JSONEachRow',
});

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

Automatiser avec des webhooks

Au lieu d’exécuter le script manuellement, automatisez le pipeline afin que les données soient chargées dans ClickHouse à chaque fin d’exécution d’un Actor :

  1. Dans la Console Apify, accédez à votre Actor et ouvrez l’onglet Integrations.
  2. Ajoutez un nouveau webhook avec :
    • Event type: ACTOR.RUN.SUCCEEDED
    • Action: une requête HTTP POST vers votre point de terminaison de chargement, ou le déclenchement d’un autre Actor chargé de l’insertion dans ClickHouse.
  3. Le payload du webhook inclut defaultDatasetId, que vous pouvez utiliser pour récupérer les résultats de l’exécution.

Consultez la documentation des webhooks Apify pour plus de détails sur le payload et les options de configuration.

Une autre approche consiste à utiliser les Apify Schedules pour exécuter des Actors selon une planification de type cron, combinée à des webhooks pour l’étape de chargement.

Bonnes pratiques

Récupération de données depuis Apify

Utilisez la bibliothèque client Apify (apify-client pour JavaScript ou Python) plutôt que des appels HTTP directs. Elle gère pour vous la pagination, les tentatives de nouvelle exécution et l'authentification. Pour les datasets volumineux, parcourez les résultats avec pagination à l'aide des paramètres limit et offset de l'endpoint List dataset items.

Chargement dans ClickHouse

Utilisez le format JSONEachRow pour insérer des données dans ClickHouse. Il correspond directement à la sortie JSON d'Apify, sans nécessiter de transformation.

Faites correspondre le schéma de votre table ClickHouse aux champs de sortie de l'Actor. Vérifiez le schéma de sortie de l'Actor sur sa page Apify Store ou dans l'onglet Dataset après l'exécution.

Performances

Pour des insertions à haut débit depuis le client JavaScript, consultez les conseils d'optimisation des performances. Regroupez les lignes dans des insertions de plus grande taille plutôt que d'insérer une ligne à la fois, et envisagez les insertions asynchrones lorsque le batching côté client n'est pas pratique.

Sécurité

Les exemples de cette page utilisent l’utilisateur et la base de données default pour faire simple. En production, créez un utilisateur dédié avec le minimum de privilèges nécessaires pour insérer dans votre table cible, et stockez les identifiants de manière sécurisée (par exemple, dans des variables d’environnement ou un gestionnaire de secrets, plutôt que de les versionner dans le code source). Consultez la gestion des accès Cloud pour plus d’informations.

Navigation