Apache NiFi est un logiciel open source de gestion de workflows conçu pour automatiser les flux de données entre différents systèmes logiciels. Il permet de créer des pipelines ETL et est livré avec plus de 300 processeurs de données. Ce tutoriel pas à pas montre comment connecter Apache NiFi à ClickHouse à la fois comme source et comme destination, puis charger un jeu de données d’exemple.
Rassemblez vos informations de connexion
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 :

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

Si vous utilisez ClickHouse autogéré, les détails de connexion sont définis par votre administrateur ClickHouse.
Télécharger et exécuter Apache NiFi
Pour une nouvelle installation, téléchargez le binaire depuis https://nifi.apache.org/download.html, puis lancez-le en exécutant ./bin/nifi.sh start
Télécharger le pilote JDBC ClickHouse
- Accédez à la page des versions du pilote JDBC ClickHouse sur GitHub et recherchez la dernière version publiée du pilote JDBC
- Dans cette version, cliquez sur "Show all xx assets" et recherchez le fichier JAR contenant le mot-clé "shaded" ou "all", par exemple
clickhouse-jdbc-0.5.0-all.jar - Placez le fichier JAR dans un dossier accessible à Apache NiFi et notez le chemin absolu
[object Object]
-
Pour configurer un Controller Service dans Apache NiFi, accédez à la page de configuration du flux NiFi en cliquant sur le bouton "gear"

-
Sélectionnez l’onglet Controller Services et ajoutez un nouveau Controller Service en cliquant sur le bouton
+en haut à droite
-
Recherchez
DBCPConnectionPool, puis cliquez sur le bouton "Add"
-
Le
DBCPConnectionPoolnouvellement ajouté sera, par défaut, dans un état invalide. Cliquez sur le bouton "gear" pour commencer la configuration
-
Dans la section "Properties", saisissez les valeurs suivantes
| Property | Value | Remark |
|---|---|---|
| URL de connexion à la base de données | jdbchttps://HOSTNAME:8443/default?ssl=truetrue | Remplacez HOSTNAME dans l’URL de connexion en conséquence |
| Nom de la classe du driver de base de données | com.clickhouse.jdbc.ClickHouseDriver | |
| Emplacements du driver de base de données | /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar | Chemin absolu vers le fichier JAR du ClickHouse JDBC driver |
| Utilisateur de la base de données | default | Nom d’utilisateur ClickHouse |
| Mot de passe | password | Mot de passe ClickHouse |
-
Dans la section Settings, remplacez le nom du Controller Service par "ClickHouse JDBC" pour le retrouver plus facilement

-
Activez le Controller Service
DBCPConnectionPoolen cliquant sur le bouton "lightning", puis sur le bouton "Enable"

-
Vérifiez dans l’onglet Controller Services que le Controller Service est bien activé

[object Object]
-
Ajoutez un processeur
ExecuteSQL, ainsi que les processeurs en amont et en aval appropriés
-
Dans la section "Propriétés" du processeur
ExecuteSQL, saisissez les valeurs suivantesPropriété Valeur Remarque Service de pool de connexions à la base de données ClickHouse JDBC Sélectionnez le service de contrôleur configuré pour ClickHouse Requête SQL SELECT SELECT * FROM system.metrics Saisissez votre requête ici -
Démarrez le processeur
ExecuteSQL
-
Pour confirmer que la requête a bien été traitée, inspectez l’un des
FlowFiledans la file d’attente de sortie
-
Basculez sur la vue "formatted" pour afficher le résultat du
FlowFilede sortie
[object Object]
-
Pour écrire plusieurs lignes en une seule insertion, vous devez d’abord fusionner plusieurs enregistrements en un seul. Pour cela, utilisez le processeur
MergeRecord -
Dans la section "Properties" du processeur
MergeRecord, saisissez les valeurs suivantesPropriété Valeur Remarque Record Reader JSONTreeReaderSélectionnez le lecteur d’enregistrements approprié Record Writer JSONReadSetWriterSélectionnez le writer d’enregistrements approprié Minimum Number of Records 1000 Remplacez cette valeur par un nombre plus élevé afin de fusionner un nombre minimal de lignes en un seul enregistrement. La valeur par défaut est de 1 ligne Maximum Number of Records 10000 Remplacez cette valeur par un nombre supérieur à "Minimum Number of Records". La valeur par défaut est de 1 000 lignes -
Pour vérifier que plusieurs enregistrements sont bien fusionnés en un seul, examinez l’entrée et la sortie du processeur
MergeRecord. Notez que la sortie est un tableau contenant plusieurs enregistrements d’entréeEntrée

Sortie

-
Dans la section "Properties" du processeur
PutDatabaseRecord, saisissez les valeurs suivantesPropriété Valeur Remarque Record Reader JSONTreeReaderSélectionnez le lecteur d’enregistrements approprié Database Type Generic Laissez la valeur par défaut Statement Type INSERT Database Connection Pooling Service ClickHouse JDBC Sélectionnez le service contrôleur ClickHouse Table Name tbl Saisissez ici le nom de votre table Translate Field Names false Définissez cette valeur sur "false" afin que les noms de champs insérés correspondent aux noms des colonnes Maximum Batch Size 1000 Nombre maximal de lignes par insertion. Cette valeur ne doit pas être inférieure à celle de "Minimum Number of Records" dans le processeur MergeRecord -
Pour vérifier que chaque insertion contient plusieurs lignes, assurez-vous que le nombre de lignes de la table augmente d’au moins la valeur de "Minimum Number of Records" définie dans
MergeRecord.
-
Félicitations - vous avez chargé vos données dans ClickHouse avec Apache NiFi !