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
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 attacher vos propres étiquettes personnalisées (équipe, centre de coûts, environnement, etc.) à chaque requête générée par votre pipeline. Les étiquettes 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 tous les détails dans la documentation).
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'adaptateur dbt-databricks (version 1.11+) prend en charge les étiquettes de requête en natif. Il existe trois niveaux auxquels les balises peuvent être appliquées, chacune s'appuyant sur la précédente :
Outre vos balises personnalisées, dbt-databricks injecte automatiquement des métadonnées relatives à chaque exécution de modèle :
Tag | Valeur d' | |||
exemple | Description@@@dbt_model_name | efct_daily_usage_by_sk | u | Modèle dbt en cours d' |
exécution@@dbt_materialized | tableStratégie de matérialisation (table, vue, incrémentielle, vue_métrique) | |||
@@dbt_core_ | version1.11.6 | |||
version@@dbt_databricks_ | version1.12.0a1 | dbt-databricks ada |
pter Adapter
Ces étiquettes automatiques vous permettent d'obtenir une visibilité par modèle sans aucune configuration : l'adaptateur le fait à votre place.Étiquettes au niveau du
Par exemple, cette ligne unique étiquette chaque requête avec quatre dimensions : qui en est propriétaire (équipe), où sont affectés les coûts (centre de coûts), à quel pipeline elle appartient (nom_projet) et dans quel environnement elle s'exécute (env).
Pour une attribution plus détaillée, vous pouvez fournir des balises 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'un fichier MAP. Vous pouvez l'interroger en utilisant la syntaxe standard d'accès à la carte :
Cette option renvoie toutes les requêtes étiquetées des 7 derniers jours, avec les balises personnalisées et injectées automatiquement extraites dans des colonnes individuelles et prêtes à être regroupées.
Vous pouvez également trouver les balises 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.

Sur la Dans la partie inférieure droite du profil de requête, vous verrez les étiquettes de requête que vous avez définies, vous donnant ainsi 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 une exploration ad hoc ou écrivez vous-même le SQL pour obtenir un résultat reproductible et prêt à être reproduit 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 vos efforts d'optimisation.

Notre projet de référence comprend un tableau de bord IA/BI qui interroge system.query.history filtré par les étiquettes de requête propres au projet. Résultat : le pipeline qui analyse les données de facturation suit également ses propres coûts – alimentant 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 balises 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 de métriques Databricks (disponibles avec dbt-databricks 1.12+) 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 (suivis 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 créant le projet de référence et en discutant avec des utilisateurs expérimentés de dbt :
Le projet de référence complet est disponible sur GitHub : github.com/databricks-solutions/dbt-query-tags
Pour commencer :
Changez les valeurs de votre propre équipe et de votre centre de coûts. Le modèle fonctionne pour n'importe quel 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.