Etiquetez, suivez et optimisez chaque modèle dbt, de l'attribution des coûts et du débogage des performances à la surveillance de l'environnement, avec une seule ligne de configuration ou Genie.
par Heeren Sharma, Lennart Reschke et JooHo Yeo
Archived. This article has not been updated since the publish date above. The dynamic nature of information means that previously accurate content can become outdated or even obsolete over time. Readers are advised to exercise due diligence and cross-check any information found in this blog post before making decisions or adopting any practices based on said information.
Votre projet dbt exécute 80 modèles chaque nuit. La facture d'entrepôt a doublé le trimestre dernier. Les performances des modèles varient considérablement et les effets des optimisations les plus récentes ne sont pas clairs. Finance demande quelle équipe est responsable. Ouvrez l'historique des requêtes et voyez... 80 lignes identiques étiquetées 'Databricks Dbt'. Bonne chance.
Grâce aux étiquettes de requête (désormais disponibles en version préliminaire publique), les équipes chargées des données peuvent désormais bénéficier de étiquettes prédéfinies et injectées automatiquement, telles que dbt_model_name, qui enrichissent chaque exécution. Vous pouvez également associer vos propres étiquettes personnalisées (équipe, centre de coûts, environnement, etc.) à chaque requête générée par votre pipeline.
Les balises sont enregistrées dans system.query.history, ce qui permet d'attribuer les coûts, de déboguer les performances et de surveiller la charge de travail en une simple requête SQL (voir la documentation pour plus de détails).
Ce blog présente un projet dbt complet et open source qui présente Query Tags de bout en bout : de la configuration aux tableaux de bord d'attribution des coûts. Tout ce qui est décrit ici est disponible sous forme de référentiel GitHub que vous pouvez cloner et déployer sur votre propre espace de travail, ou simplement demander à Génie.
L'dbt-databricksadaptateur (version 1.11+) prend en charge les étiquettes de requête en natif. Il existe trois niveaux auxquels les étiquettes peuvent être appliquées, chacune s'appuyant sur la précédente :
Outre vos balises personnalisées, dbt-databricksle module injecte automatiquement des métadonnées relatives à chaque exécution de modèle :
Jour | Exemple de valeur | Dénomination |
@@dbt_model_name | fct_daily_usage_by_sku | Le modèle dbt en cours d'exécution |
@@dbt_materialized | tableau | Stratégie de matérialisation (table, vue, incrémentielle, vue_métrique) |
@@version_centrale de dbt_ | 1.11.6 | Version de dbt-core |
@@dbt_databricks_version | 1.12.0a1 | dbt-databricks version adaptateur |
Ces étiquettes automatiques vous permettent d'obtenir une visibilité par modèle sans aucune configuration : l'adaptateur le fait à votre place.
L'approche la plus simple consiste à ajouter un champ query_tags à une cible spécifique dans votre profil dbt. Chaque requête du projet hérite automatiquement de ces étiquettes.
Par exemple, cette ligne unique étiquette chaque requête avec quatre dimensions : à qui appartient la requête (équipe), où vont les coûts (cost_center), à quel pipeline elle appartient (project_name) et dans quel environnement elle s'exécute (env).
Pour une attribution plus détaillée, vous pouvez fournir des étiquettes sur des modèles spécifiques dans dbt_project.yml ou sur la configuration du modèle dans sa définition SQL.
Les étiquettes de niveau modèle fusionnent avec les étiquettes de niveau profil. Si les deux définissent la même clé, la valeur au niveau du modèle est prioritaire.
Après avoir exécuté dbt run, chaque instruction SQL apparaît dans system.query.history avec la colonne query_tags remplie sous la forme d'une MAP<STRING, STRING>. Vous pouvez l'interroger en utilisant la syntaxe standard d'accès aux cartes :
Cette option renvoie toutes les requêtes étiquetées des sept derniers jours, les étiquettes personnalisées et injectées automatiquement étant extraites dans des colonnes individuelles et prêtes à être regroupées.
Vous pouvez également trouver les étiquettes de requête de la requête que vous avez exécutée dans l'interface utilisateur Historique des requêtes ou dans l'interface utilisateur SQL Warehouse Monitoring.

Dans l'angle inférieur droit du profil de requête, vous verrez les étiquettes de requête que vous avez définies, vous fournissant toutes les informations nécessaires en un coup d'œil.

Les étiquettes de requête permettent de déterminer l'attribution granulaire de l'utilisation directement via des requêtes SQL, éliminant ainsi le besoin d'analyser manuellement les journaux ou de diviser les ressources de l'entrepôt.
Vous pouvez répondre à cette question de deux façons : demandez à Genie en langage clair de procéder à une exploration ad hoc ou écrivez vous-même le code SQL pour obtenir un résultat reproductible et prêt à être utilisé dans un tableau de bord. Les deux lisent à partir des mêmes données system.query.history.

Genie écrit et exécute la requête équivalente, et vous continuez à analyser les questions de suivi sans toucher à SQL.
Les deux chemins renvoient la même image. Dans notre projet de référence, les quatre tables mart (matérialisées sous forme de tableau) dominent le temps de calcul, tandis que les vues de mise en scène et les vues de métriques sont quasi instantanées. Cela vous indique immédiatement où concentrer les efforts d'optimisation.

Notre projet de référence inclut un tableau de bord IA/BI qui interroge system.query.history filtré par les balises de requête propres au projet. Résultat : le pipeline qui analyse les données de facturation suit également ses propres coûts – il nourrit lui-même les balises de requête.
Le tableau de bord comprend :
Dans notre projet de référence, les quatre modèles Mart représentaient 92 % du temps de calcul. Sans les étiquettes de requête, cette information était invisible.

Créer vous-même ce tableau de bord prend quelques minutes avec Genie Code : demandez-lui le temps de calcul par modèle dbt à partir de system.query.history filtré par vos balises de requête, et il écrit le code SQL et assemble les visuels. Si vous préférez passer directement au résultat fini, le tableau de bord est également fourni dans le projet de référence et est déployé avec un ensemble de blocs de données déployé parallèlement à la tâche dbt (consultez le référentiel Github pour obtenir le guide détaillé).
Les vues métriques Databricks (disponibles avec dbt-databricks1.12 et versions ultérieures) sont un nouveau type de matérialisation qui définit une sémantique métier réutilisable sous forme de dimensions et de mesures directement dans le catalogue Unity (voir la documentation complète). Ils peuvent contenir des balises de requête comme n'importe quel autre modèle, à l'aide du paramètre de configuration query_tags :
Notez la distinction : les tags de requête sont attachés aux requêtes SQL qui créent ou actualisent la vue de métrique (suivies dans system.query.history), tandis que les tags databricks sont des tags de catalogue Unity sur l'objet lui-même (pour la gouvernance et la découverte). Le premier est destiné au suivi au niveau de la requête, tandis que le second est au niveau de l'objet Unity Catalog pour la découverte globale des données.
Dans cet article, nous avons couvert le processus holistique permettant de créer une pratique FinOps solide dans laquelle les étiquettes de requête sont fondamentales pour l'attribution des coûts. Voici ce que nous avons appris en élaborant le projet de référence et en discutant avec les utilisateurs expérimentés de dbt :
Le projet de référence complet est disponible sur GitHub à l'adresse : github.com/databricks-solutions/dbt-query-tags
Pour commencer :
Échangez les valeurs de votre équipe et de votre centre de coûts. Le modèle fonctionne pour tout projet dbt sur Databricks.
Clonez le référentiel dès aujourd'hui ! Une ligne de votre profil suffit pour déverrouiller la visibilité de l'attribution d'utilisation au niveau du modèle dans l'ensemble de votre entrepôt.
(Cet article de blog a été traduit à l'aide d'outils basés sur l'intelligence artificielle) Article original
Abonnez-vous à notre blog et recevez les derniers articles directement dans votre boîte mail.