Installer dlt avec ClickHouse
Pour installer la bibliothèque dlt avec les dépendances de ClickHouse :
Guide de configuration
1
Initialiser le projet dlt
Commencez par initialiser un nouveau projet La commande ci-dessus génère plusieurs fichiers et répertoires, notamment ou avec
dlt comme suit :Cette commande initialisera votre pipeline avec chess comme source et ClickHouse comme destination.
.dlt/secrets.toml et un fichier requirements pour ClickHouse. Vous pouvez installer les dépendances nécessaires spécifiées dans ce fichier requirements en l’exécutant comme suit :pip install dlt[clickhouse], qui installe la bibliothèque dlt ainsi que les dépendances nécessaires pour utiliser ClickHouse comme destination.2
Configurer la base de données ClickHouse
Pour charger des données dans ClickHouse, vous devez créer une base de données ClickHouse. Voici, dans les grandes lignes, ce que vous devez faire :
- Vous pouvez utiliser une base de données ClickHouse existante ou en créer une nouvelle.
-
Pour créer une nouvelle base de données, connectez-vous à votre serveur ClickHouse à l’aide de l’outil en ligne de commande
clickhouse-clientou d’un client SQL de votre choix. - Exécutez les commandes SQL suivantes pour créer une nouvelle base de données, un utilisateur et accorder les permissions nécessaires :
3
Ajouter les identifiants
Ensuite, configurez les identifiants ClickHouse dans le fichier Vous pouvez fournir une chaîne de connexion à la base de données semblable à celle utilisée par la bibliothèque
.dlt/secrets.toml comme indiqué ci-dessous :HTTP_PORTLe paramètre
http_port spécifie le numéro de port à utiliser lors de la connexion à l’interface HTTP du serveur ClickHouse. Il est différent du port par défaut 9000, qui est utilisé pour le protocole TCP natif.Vous devez définir http_port si vous n’utilisez pas de staging externe (c’est-à-dire si vous ne définissez pas le paramètre staging dans votre pipeline). En effet, le staging intégré du stockage local ClickHouse utilise la bibliothèque clickhouse content, qui communique avec ClickHouse via HTTP.Assurez-vous que votre serveur ClickHouse est configuré pour accepter les connexions HTTP sur le port spécifié par http_port. Par exemple, si vous définissez http_port = 8443, ClickHouse doit alors écouter les requêtes HTTP sur le port 8443. Si vous utilisez un staging externe, vous pouvez omettre le paramètre http_port, puisque clickhouse-connect ne sera pas utilisé dans ce cas.clickhouse-driver. Les identifiants ci-dessus se présenteront comme suit :Mode d’écriture
merge, vous devez spécifier une primary_key pour la ressource. Vous pouvez en savoir plus à ce sujet ici.
Append : Il s’agit du mode par défaut. Il ajoute les données aux données existantes dans la destination, en ignorant le champ primary_key.
Chargement des données
- Pour les fichiers locaux, la bibliothèque
clickhouse-connectest utilisée pour charger directement les fichiers dans des tables ClickHouse à l’aide de la commandeINSERT. - Pour les fichiers stockés dans un stockage distant comme
S3,Google Cloud StorageouAzure Blob Storage, des fonctions de table ClickHouse comme s3, gcs et azureBlobStorage sont utilisées pour lire les fichiers et insérer les données dans des tables.
Jeux de données
Clickhouse ne prend pas en charge plusieurs jeux de données dans une même base de données, alors que dlt s’appuie sur les jeux de données pour plusieurs raisons. Pour faire fonctionner Clickhouse avec dlt, les noms des tables générées par dlt dans votre base de données Clickhouse seront préfixés par le nom du jeu de données, séparé par le dataset_table_separator configurable. De plus, une table sentinelle spéciale, ne contenant aucune donnée, sera créée afin de permettre à dlt d’identifier quels jeux de données virtuels existent déjà dans une destination Clickhouse.
Formats de fichier pris en charge
- jsonl est le format privilégié, aussi bien pour le chargement direct que pour le staging.
- parquet est pris en charge aussi bien pour le chargement direct que pour le staging.
clickhouse présente quelques différences spécifiques par rapport aux destinations SQL par défaut :
Clickhousedispose d’un type de donnéesobjectexpérimental, mais nous avons constaté qu’il est quelque peu imprévisible. La destination ClickHouse de dlt chargera donc ce type de données complexe dans une colonne de texte. Si vous avez besoin de cette fonctionnalité, contactez notre communauté Slack et nous envisagerons de l’ajouter.Clickhousene prend pas en charge le type de donnéestime.timesera chargé dans une colonnetext.Clickhousene prend pas en charge le type de donnéesbinary. À la place, les données binaires seront chargées dans une colonnetext. Lors d’un chargement depuisjsonl, les données binaires seront stockées sous forme de chaîne base64, et lors d’un chargement depuis parquet, l’objetbinarysera converti entext.Clickhouseaccepte l’ajout de colonnes non nulles à une table déjà remplie.Clickhousepeut produire des erreurs d’arrondi dans certaines conditions lors de l’utilisation du type de données float ou double. Si vous ne pouvez pas tolérer d’erreurs d’arrondi, veillez à utiliser le type de données decimal. Par exemple, charger la valeur 12.7001 dans une colonne double avec le format de fichier du chargeur défini surjsonlproduira systématiquement une erreur d’arrondi.
Indications de colonnes prises en charge
primary_key- indique que la colonne fait partie de la clé primaire. Plusieurs colonnes peuvent avoir cette indication afin de créer une clé primaire composite.
Moteur de table
ReplicatedMergeTree. Vous pouvez spécifier un autre moteur de table à l’aide de table_engine_type avec l’adapter ClickHouse :
merge_tree- crée des tables avec le moteurMergeTreereplicated_merge_tree(par défaut) - crée des tables avec le moteurReplicatedMergeTree
Prise en charge du staging
dlt chargera des fichiers Parquet ou jsonl vers l’emplacement de staging et utilisera les fonctions de table de ClickHouse pour charger directement les données depuis les fichiers placés dans la zone de staging.
Veuillez consulter la documentation du système de fichiers pour savoir comment configurer les identifiants d’accès pour les destinations de staging :
Pour exécuter un pipeline avec le staging activé :
Utilisation de Google Cloud Storage comme zone de staging
- Créez des clés HMAC pour votre compte de service GCS en suivant le guide Google Cloud.
-
Configurez les clés HMAC, ainsi que
client_email,project_idetprivate_keyde votre compte de service, dans les paramètres de la destination ClickHouse de votre projet dlt dansconfig.toml:
bashgcp_access_key_id et gcp_secret_access_key), vous devez désormais fournir client_email, project_id et private_key pour votre compte de service sous [destination.filesystem.credentials]. Cela s’explique par le fait que la prise en charge du staging GCS repose actuellement sur une solution de contournement temporaire et n’est pas encore optimisée.
dlt transmettra ces identifiants à ClickHouse, qui se chargera de l’authentification et de l’accès à GCS.
Des travaux sont en cours pour simplifier et améliorer à l’avenir la configuration du staging GCS pour la destination ClickHouse de dlt. La prise en charge complète du staging GCS fait l’objet d’un suivi dans ces issues GitHub :
- Faire fonctionner la destination filesystem avec GCS en mode de compatibilité S3
- Prise en charge de la zone de staging Google Cloud Storage