Configurations de profiles.yml
profiles.yml. Un profil ClickHouse suit la syntaxe suivante :
Schéma vs base de données
database.schema.table n’est pas compatible avec ClickHouse, car ClickHouse ne
prend pas en charge les schema.
Nous utilisons donc une approche simplifiée, schema.table, où schema correspond à la base de données ClickHouse. Il est déconseillé d’utiliser la base de données default.
Avertissement concernant l’instruction SET
Définir quote_columns
quote_columns dans votre dbt_project.yml. Consultez la documentation sur quote_columns pour plus d’informations.
À propos du cluster ClickHouse
- Configurer le paramètre
cluster. - Garantir la cohérence de lecture après écriture, en particulier si vous utilisez plusieurs
threads.
Paramètre cluster
cluster du profil permet à dbt-clickhouse de s’exécuter sur un cluster ClickHouse. Si cluster est défini dans le profil, tous les modèles seront créés avec la clause ON CLUSTER par défaut, à l’exception de ceux qui utilisent un moteur Replicated. Cela inclut :
- La création de bases de données
- Les matérialisations de vues
- Les matérialisations de tables et incrémentielles
- Les matérialisations Distributed
ON CLUSTER, car ils sont conçus pour gérer la réplication en interne.
Pour désactiver la création via le cluster pour un modèle spécifique, ajoutez la configuration disable_on_cluster :
cluster (le modèle
sera créé uniquement sur le nœud auquel vous êtes connecté).
Compatibilité
Si un modèle a été créé sans paramètre cluster, dbt-clickhouse détectera cette situation et exécutera toutes les opérations DDL/DML
sans clause on cluster pour ce modèle.
Cohérence de lecture après écriture
- Si vous utilisez un cluster ClickHouse Cloud, il vous suffit de définir
select_sequential_consistency: 1dans la propriétécustom_settingsde votre profil. Vous trouverez plus d’informations sur ce paramètre ici. - Si vous utilisez un cluster auto-hébergé, assurez-vous que toutes les requêtes dbt sont envoyées vers la même réplique ClickHouse. Si vous avez un load balancer devant celle-ci, essayez d’utiliser un mécanisme de
replica aware routing/sticky sessionsafin de toujours atteindre la même réplique. L’ajout du paramètreselect_sequential_consistency = 1sur des clusters hors ClickHouse Cloud n’est pas recommandé.
Macros supplémentaires pour ClickHouse
Macros utilitaires de matérialisation des modèles
engine_clause— Utilise la propriété de configuration du modèleenginepour attribuer un moteur de table ClickHouse. dbt-clickhouse utilise le moteurMergeTreepar défaut.partition_cols— Utilise la propriété de configuration du modèlepartition_bypour attribuer une clé de partition ClickHouse. Aucune clé de partition n’est attribuée par défaut.order_cols— Utilise la configuration du modèleorder_bypour attribuer une clé ORDER BY/de tri ClickHouse. Si elle n’est pas spécifiée, ClickHouse utilisera un tuple() vide et la table ne sera pas triéeprimary_key_clause— Utilise la propriété de configuration du modèleprimary_keypour attribuer une clé primaire ClickHouse. Par défaut, une clé primaire est définie et ClickHouse utilisera la clause ORDER BY comme clé primaire.on_cluster_clause— Utilise la propriété de profilclusterpour ajouter une clauseON CLUSTERà certaines opérations dbt : matérialisations distribuées, création de vues, création de bases de données.ttl_config— Utilise la propriété de configuration du modèlettlpour attribuer une expression de table TTL ClickHouse. Aucun TTL n’est attribué par défaut.
Macro auxiliaire s3Source
s3source simplifie la sélection directe de données ClickHouse depuis S3 à l’aide de la fonction de table S3 de ClickHouse. Elle fonctionne en
renseignant les paramètres de la fonction de table S3 à partir d’un dictionnaire de configuration nommé (le nom du dictionnaire doit se terminer
par s3). La macro
recherche d’abord le dictionnaire dans les vars du profil, puis dans la configuration du modèle. Le dictionnaire peut contenir
l’une des
clés suivantes, utilisées pour renseigner les paramètres de la fonction de table S3 :
Consultez
le fichier de test S3
pour voir des exemples d’utilisation de cette macro.
Prise en charge des macros inter-bases de données
dbt Core, à l’exception des suivantes :
- La fonction SQL
split_partest implémentée dans ClickHouse à l’aide de la fonction splitByChar. Cette fonction nécessite l’utilisation d’une chaîne constante comme délimiteur de fractionnement ; le paramètredelimeterutilisé pour cette macro sera donc interprété comme une chaîne, et non comme un nom de colonne. - De même, la fonction SQL
replacedans ClickHouse nécessite des chaînes constantes pour les paramètresold_charsetnew_chars; ces paramètres seront donc interprétés comme des chaînes plutôt que comme des noms de colonne lors de l’appel de cette macro.
Prise en charge du catalogue
Statut de l’intégration aux catalogues dans dbt
Prise en charge des catalogues ClickHouse
experimental, mais vous pouvez déjà les utiliser si vous disposez d’une version récente de ClickHouse.
- Vous pouvez utiliser ClickHouse pour interroger des tables Iceberg stockées dans du stockage objet (S3, Azure Blob Storage, Google Cloud Storage) à l’aide du moteur de table Iceberg et de la fonction de table Iceberg.
- En outre, ClickHouse propose le moteur de base de données DataLakeCatalog, qui permet de se connecter à des catalogues de données externes, notamment AWS Glue Catalog, Databricks Unity Catalog, Hive Metastore et les catalogues REST. Cela vous permet d’interroger directement, depuis des catalogues externes, des données dans des formats de table ouverts (Iceberg, Delta Lake), sans duplication des données.
Solutions de contournement pour utiliser Iceberg et les catalogues
source de dbt pour référencer ces tables dans vos projets dbt. Par exemple, si vous souhaitez accéder à vos tables dans un REST Catalog, vous pouvez :
- Créer une base de données pointant vers un catalogue externe :
- Déclarez la base de données du catalogue et ses tables comme sources dans dbt : gardez à l’esprit que les tables doivent déjà être disponibles dans ClickHouse
- Utilisez les tables du catalogue dans vos modèles dbt :
Remarques sur les solutions de contournement
- Vous aurez immédiatement accès à différents types de tables externes et de catalogues externes, sans attendre l’intégration native des catalogues dans dbt.
- Vous bénéficierez d’un parcours de migration fluide lorsque la prise en charge native des catalogues sera disponible.
- Configuration manuelle : les tables Iceberg et les bases de données de catalogue doivent être créées manuellement dans ClickHouse avant de pouvoir être référencées dans dbt.
- Pas de DDL au niveau du catalogue : dbt ne peut pas gérer les opérations au niveau du catalogue, comme la création ou la suppression de tables Iceberg dans des catalogues externes. Vous ne pourrez donc pas les créer pour le moment depuis le connecteur dbt. La création de tables avec les engines Iceberg() pourrait être ajoutée à l’avenir.
- Opérations d’écriture : actuellement, l’écriture dans les tables Iceberg/Data Catalog est limitée. Consultez la documentation ClickHouse pour connaître les options disponibles.