L’adaptateur dbt-clickhouse
Fonctionnalités prises en charge
- Matérialisation de table
- Matérialisation de vue
- Matérialisation incrémentielle
- Matérialisation incrémentielle Microbatch
- Matérialisations vue matérialisée (utilise la forme
TOde MATERIALIZED VIEW, expérimentale) - Seeds
- Sources
- Génération de la documentation
- Tests
- Snapshots
- La plupart des macros dbt-utils (désormais incluses dans dbt-core)
- Matérialisation éphémère
- Matérialisation de table distribuée (expérimentale)
- Matérialisation incrémentielle distribuée (expérimentale)
- Contrats
- Configurations de colonnes spécifiques à ClickHouse (codec, TTL…)
- Paramètres de table spécifiques à ClickHouse (indexes, projections…)
--sample, et tous les avertissements de dépréciation ont été corrigés pour les versions ultérieures. Les intégrations de catalogue (par exemple, Iceberg) introduites dans dbt 1.10 ne sont pas encore prises en charge nativement par l’adaptateur, mais des solutions de contournement sont disponibles. Voir la section Prise en charge du catalogue pour plus de détails.
Cet adaptateur n’est pas encore disponible dans dbt Cloud, mais nous prévoyons de le proposer prochainement. Veuillez contacter le support pour obtenir plus d’informations à ce sujet.
Concepts dbt et matérialisations prises en charge
dbt-clickhouse :
- view (par défaut) : Le modèle est créé sous forme de vue dans la base de données. Dans ClickHouse, cela correspond à une vue.
- table : Le modèle est créé sous forme de table dans la base de données. Dans ClickHouse, cela correspond à une table.
- ephemeral : Le modèle n’est pas créé directement dans la base de données, mais est intégré aux modèles dépendants sous forme de CTE (Common Table Expressions).
- incrémentiel : Le modèle est d’abord matérialisé sous forme de table et, lors des exécutions suivantes, dbt insère de nouvelles lignes et met à jour les lignes modifiées dans la table.
- materialized view : Le modèle est créé sous forme de vue matérialisée dans la base de données. Dans ClickHouse, cela correspond à une vue matérialisée.
dbt-clickhouse :
Configuration de dbt et de l’adaptateur ClickHouse
Installer dbt-core et dbt-clickhouse
pip pour installer dbt et dbt-clickhouse.
Fournissez à dbt les paramètres de connexion de notre instance ClickHouse.
clickhouse-service dans le fichier ~/.dbt/profiles.yml et renseignez les propriétés schema, host, port, user et password. La liste complète des options de configuration de la connexion est disponible sur la page Fonctionnalités et configurations :
Créer un projet dbt
project_name, mettez à jour votre fichier dbt_project.yml afin d’y indiquer un nom de profil pour vous connecter au serveur ClickHouse.
Tester la connexion
dbt debug avec l’outil CLI afin de vérifier si dbt parvient à se connecter à ClickHouse. Vérifiez que la réponse contient Connection test: [OK connection ok], ce qui indique que la connexion a réussi.
Consultez la page des guides pour en savoir plus sur l’utilisation de dbt avec ClickHouse.
Tester et déployer vos modèles (CI/CD)
CI/CD avec des tests de données simples et des tests unitaires
dbt build sur votre cluster ClickHouse de production.
Étape CI/CD plus complète : utiliser des données récentes, ne tester que les modèles concernés
- Si vous n’avez pas besoin de données fraîches pour vos tests, vous pouvez restaurer une sauvegarde de vos données de production dans l’environnement de préproduction.
- Si vous avez besoin de données fraîches pour vos tests, vous pouvez utiliser une combinaison de la table function
remoteSecure()et de vues matérialisées actualisables pour insérer des données à la fréquence souhaitée. Une autre option consiste à utiliser le stockage objet comme intermédiaire, à y écrire périodiquement des données depuis votre service de production, puis à les importer dans l’environnement de préproduction à l’aide des table functions de stockage objet ou de ClickPipes (pour l’ingestion continue).
dbt build --select state:modified+ --state path/to/last/deploy/state.json afin de reconstruire de manière sélective le nombre minimal de modèles nécessaires en fonction de ce qui a changé depuis la dernière exécution en production.
Dépannage des problèmes courants
Connexions
- Le moteur doit faire partie des moteurs pris en charge.
- Vous devez disposer des permissions nécessaires pour accéder à la base de données.
- Si vous n’utilisez pas le moteur de table par défaut de la base de données, vous devez spécifier un moteur de table dans la configuration de votre modèle.
Comprendre les opérations de longue durée
debug — cela affichera le temps d’exécution de chaque requête. Par exemple, vous pouvez le faire en ajoutant --log-level debug aux commandes dbt.
Limitations
- Le plugin utilise une syntaxe qui nécessite ClickHouse version 25.3 ou ultérieure. Nous ne testons pas les versions plus anciennes de ClickHouse. Nous ne testons pas non plus actuellement les tables Replicated.
- Différentes exécutions de
dbt-adapterpeuvent entrer en conflit si elles sont lancées en même temps, car elles peuvent utiliser en interne les mêmes noms de table pour les mêmes opérations. Pour plus d’informations, consultez l’issue #420. - L’adaptateur matérialise actuellement les modèles sous forme de tables à l’aide d’un INSERT INTO SELECT. Cela entraîne effectivement une duplication des données si l’exécution est relancée. Des jeux de données très volumineux (PB) peuvent provoquer des temps d’exécution extrêmement longs, au point de rendre certains modèles peu viables. Pour améliorer les performances, utilisez des vues matérialisées ClickHouse en implémentant la vue comme
materialized: materialization_view. En outre, efforcez-vous de réduire au minimum le nombre de lignes renvoyées par chaque requête en utilisantGROUP BYlorsque c’est possible. Préférez les modèles qui résument les données à ceux qui se contentent de les transformer tout en conservant le même nombre de lignes que la source. - Pour utiliser des tables distribuées pour représenter un modèle, vous devez créer manuellement les tables replicated sous-jacentes sur chaque nœud. La table Distributed peut ensuite être créée au-dessus de celles-ci. L’adaptateur ne gère pas la création du cluster.
- Lorsque dbt crée une relation (table/view) dans une base de données, il la crée généralement comme suit :
{{ database }}.{{ schema }}.{{ table/view id }}. ClickHouse n’a pas de notion de schéma. L’adaptateur utilise donc{{schema}}.{{ table/view id }}, oùschemacorrespond à la base de données ClickHouse. - Les modèles/CTE éphémères ne fonctionnent pas s’ils sont placés avant le
INSERT INTOdans une instruction insert ClickHouse, voir https://github.com/ClickHouse/ClickHouse/issues/30323. Cela ne devrait pas affecter la plupart des modèles, mais il faut faire attention à l’emplacement d’un modèle éphémère dans les définitions de modèles et les autres instructions SQL.
Fivetran
dbt-clickhouse peut également être utilisé dans les transformations Fivetran, ce qui permet une intégration fluide et des capacités de transformation directement au sein de la plateforme Fivetran à l’aide de dbt.