Apache Beam est un modèle de programmation unifié open source qui permet aux développeurs de définir et d’exécuter des pipelines de traitement de données à la fois par lots et en flux continu. La flexibilité d’Apache Beam réside dans sa capacité à prendre en charge un large éventail de scénarios de traitement de données, allant des opérations ETL (Extract, Transform, Load) au traitement complexe d’événements et à l’analyse en temps réel.
Cette intégration s’appuie sur le connecteur JDBC officiel de ClickHouse pour la couche d’insertion sous-jacente.
Le paquet d’intégration nécessaire pour intégrer Apache Beam et ClickHouse est maintenu et développé dans Apache Beam I/O Connectors — un bundle d’intégrations pour de nombreux systèmes de stockage de données et bases de données populaires.
L’implémentation org.apache.beam.sdk.io.clickhouse.ClickHouseIO se trouve dans le dépôt Apache Beam.
Mise en place du paquet Apache Beam ClickHouse
Ajoutez la dépendance suivante à votre outil de gestion de paquets :
Version recommandée de BeamIl est recommandé d’utiliser le connecteur ClickHouseIO à partir de la version 2.59.0 d’Apache Beam.
Les versions antérieures peuvent ne pas prendre entièrement en charge les fonctionnalités du connecteur.
Les artifacts sont disponibles dans le dépôt Maven officiel.
L’exemple suivant lit un fichier CSV nommé input.csv sous forme de PCollection, le convertit en objet Row (à l’aide du schéma défini) et l’insère dans une instance ClickHouse locale à l’aide de ClickHouseIO :
Types de données pris en charge
Paramètres de ClickHouseIO.Write
Vous pouvez ajuster la configuration de ClickHouseIO.Write à l’aide des fonctions setter suivantes :
Veuillez tenir compte des limitations suivantes lors de l’utilisation du connecteur :
- À ce jour, seule l’opération Sink est prise en charge. Le connecteur ne prend pas en charge l’opération Source.
- ClickHouse effectue une déduplication lors de l’insertion dans une table
ReplicatedMergeTree ou dans une table Distributed basée sur une table ReplicatedMergeTree. Sans réplication, l’insertion dans une table MergeTree standard peut entraîner des doublons si une insertion échoue puis aboutit lors d’une nouvelle tentative. Cependant, chaque bloc est inséré de manière atomique, et la taille du bloc peut être configurée à l’aide de ClickHouseIO.Write.withMaxInsertBlockSize(long). La déduplication s’appuie sur les sommes de contrôle des blocs insérés. Pour plus d’informations sur la déduplication, veuillez consulter Déduplication et Configuration de la déduplication à l’insertion.
- Le connecteur n’exécute aucune instruction DDL ; par conséquent, la table cible doit exister avant toute insertion.