Skip to main content
Apache Airflow est une plateforme open-source permettant de définir, d’ordonnancer et de superviser des workflows sous forme de code. Les workflows sont définis comme des graphes orientés acycliques (DAG) de tâches écrites en Python. Le provider apache-airflow-providers-clickhousedb connecte Airflow à ClickHouse, ce qui vous permet d’exécuter des requêtes, de créer des tables et de charger des données dans le cadre d’un DAG. Il se connecte via l’interface HTTP à l’aide du client clickhouse-connect, et expose ClickHouse via le framework SQL commun d’Airflow, de sorte que l’opérateur standard SQLExecuteQueryOperator gère les requêtes DDL, DML et analytiques, sans nécessiter d’opérateur spécifique à ClickHouse.

Installer le provider

Installez le provider dans l’environnement où s’exécutent le scheduler Airflow et les workers :
Le provider dépend de apache-airflow-providers-common-sql et de clickhouse-connect, qui sont installés en même temps que lui. Pour transmettre les résultats de la requête à des DataFrames pandas ou polars, installez les extras facultatifs :

Créer une connexion à ClickHouse

Le provider enregistre un type de connexion clickhouse. Créez une connexion depuis l’UI d’Airflow, dans Admin > Connections, ou définissez-en une via la CLI ou une variable d’environnement. Dans l’UI, sélectionnez ClickHouse comme type de connexion et renseignez les champs suivants : Pour ClickHouse Cloud ou tout cluster auto-hébergé avec TLS activé, définissez secure sur true dans le champ Extra et utilisez le port TLS (8443).

Options de connexion supplémentaires

Le provider expose des options supplémentaires sous forme de champs dédiés dans le formulaire de connexion. Si vous définissez la connexion via un URI, du JSON ou une variable d’environnement, indiquez-les plutôt comme clés dans l’objet JSON extra. Elles sont toutes facultatives :

Définir une connexion sans l’UI

Configurez la connexion à l’aide d’une variable d’environnement. Le format URI inclut l’hôte, les identifiants et la base de données :
Tous les éléments de l’URI doivent être codés en URL. Pour TLS, les délais d’expiration ou les paramètres de session, utilisez le format JSON, qui expose les champs Extra :
Tous les hooks et les opérateurs utilisent l’identifiant de connexion clickhouse_default, sauf si vous en indiquez un autre.

Exécuter des requêtes avec SQLExecuteQueryOperator

Définissez le conn_id de l’opérateur sur votre connexion à ClickHouse. Le DAG suivant crée une table, y insère des lignes, les relit, puis supprime la table :
Le résultat de la requête est récupéré avec le handler par défaut (fetch_all_handler). Pour renvoyer autre chose que l’ensemble complet des résultats, transmettez un autre handler, par exemple fetch_one_handler pour récupérer uniquement la première ligne.

Utiliser une base de données différente pour chaque tâche

Lorsqu’une connexion pointe vers un cluster et que certaines tâches interrogent différentes bases de données, remplacez la base de données via hook_params au lieu de créer une connexion distincte :

Utiliser directement le hook

Pour les opérations qui ne se prêtent pas à un opérateur SQL — insertions en masse, streaming ou appels client propres à ClickHouse — utilisez ClickHouseHook dans une tâche Python. La méthode bulk_insert_rows du hook utilise le mécanisme d’insertion colonnaire natif de clickhouse-connect, bien plus rapide que les insertions ligne par ligne pour de grands jeux de données. Définissez batch_size afin de limiter le pic de mémoire sur des entrées très volumineuses :
Appelez get_client() pour accéder au client clickhouse-connect sous-jacent afin de gérer tout ce que le hook n’expose pas directement :

Appliquer les paramètres de session

Transmettez des paramètres de session lors de l’initialisation du hook, soit directement, soit via le hook_params d’un opérateur. Les paramètres transmis au constructeur sont fusionnés avec les session_settings définis dans le champ Extra de la connexion, et les valeurs du constructeur prévalent en cas de conflit de clés :
Dernière modification le 24 juillet 2026