Maison  >  Article  >  développement back-end  >  Un guide des macros dbt – Objectif, avantages et utilisation

Un guide des macros dbt – Objectif, avantages et utilisation

Susan Sarandon
Susan Sarandonoriginal
2024-10-19 06:11:02129parcourir

A Guide to dbt Macros - Purpose, Benefits, and Usage

  • Apache Iceberg 101
  • Introduction pratique avec Apache iceberg
  • Cours intensif gratuit sur Apache Iceberg
  • Copie gratuite d'Apache Iceberg : le guide définitif

Lorsque vous travaillez avec dbt, l'une des fonctionnalités les plus puissantes à votre disposition sont les macros. Les macros vous permettent d'écrire du code réutilisable qui peut être utilisé tout au long de votre projet dbt, vous aidant ainsi à optimiser le développement, à réduire la redondance et à normaliser les modèles courants. Dans cet article, nous explorerons l'objectif des macros dbt, comment elles peuvent vous aider à rationaliser vos flux de travail de transformation de données et comment les utiliser efficacement.

Que sont les macros de dette ?

À un niveau élevé, les macros dbt sont des extraits de code réutilisables écrits en Jinja, un langage de modélisation intégré à dbt. Les macros agissent comme des fonctions que vous pouvez appeler à divers endroits de votre projet dbt (comme des modèles, des tests et même d'autres macros). Ils vous permettent de simplifier les tâches répétitives et d'ajouter de la logique à vos transformations SQL.

Vous pouvez considérer les macros comme un moyen de SÉCHER (Ne vous répétez pas) votre code dbt, ce qui est particulièrement utile dans les projets plus importants où des modèles SQL similaires sont répétés sur de nombreux modèles.

Comment les macros dbt vous aident

Voici quelques-uns des principaux avantages de l'utilisation des macros dbt dans votre projet :

1. Réduire la redondance

Dans de nombreux workflows de transformation de données, vous pourriez vous retrouver à écrire la même logique SQL sur plusieurs modèles. Par exemple, filtrer les enregistrements invalides ou appliquer des transformations spécifiques. Avec les macros, vous pouvez résumer cette logique en fonctions réutilisables et les appeler chaque fois que nécessaire, réduisant ainsi la duplication de code.

2. Standardiser la logique SQL

Les macros permettent de garantir que la logique commune (telle que la validation des données ou les jointures personnalisées) est appliquée de manière cohérente tout au long de votre projet. Cette standardisation réduit le risque d'erreurs et garantit que vos transformations suivent les mêmes règles sur différents modèles.

3. Simplifier la logique complexe

En utilisant des macros, vous pouvez décomposer une logique complexe en composants gérables et réutilisables. Cela simplifie vos modèles SQL, les rendant plus faciles à lire, à maintenir et à déboguer.

4. Générer dynamiquement du SQL

Les macros vous permettent d'écrire du SQL qui s'adapte à différents cas d'utilisation en fonction de variables, de paramètres de configuration ou d'entrées. Cette génération dynamique de SQL peut vous aider à gérer une variété de cas extrêmes et d'environnements sans modifier manuellement le code.

5. Réutiliser tous les modèles

Une fois qu'une macro est définie, elle peut être utilisée dans plusieurs modèles, garantissant que toutes les mises à jour de la macro sont reflétées dans l'ensemble du projet. Cela favorise une maintenance plus facile et des mises à jour plus rapides.

Comment écrire et utiliser des macros dbt

Définir une macro

Les macros sont généralement définies dans un fichier .sql dans le répertoire macros/ de votre projet dbt. Voici un exemple de macro simple qui calcule la moyenne d'une colonne :

-- macros/calculate_average.sql

{% macro calculate_average(column_name) %}
    AVG({{ column_name }})
{% endmacro %}

Dans cet exemple, la macro calculate_average accepte un nom de colonne comme paramètre et renvoie la fonction SQL AVG() appliquée à cette colonne.

Utiliser une macro dans un modèle

Une fois que vous avez défini la macro, vous pouvez l'appeler dans n'importe quel modèle en utilisant la syntaxe suivante :

-- models/my_model.sql

SELECT
    {{ calculate_average('price') }} AS avg_price,
    category
FROM
    {{ ref('products') }}
GROUP BY
    category

Ici, nous utilisons la macro calculate_average dans l'instruction SELECT pour calculer le prix moyen dans le tableau des produits, sans avoir besoin de répéter manuellement la logique.

Utiliser des macros avec des variables

Les macros peuvent également être combinées avec des variables pour ajouter plus de flexibilité. Par exemple, définissons une macro qui construit dynamiquement une clause WHERE basée sur une variable :

-- macros/filter_by_status.sql

{% macro filter_by_status(status) %}
    WHERE status = '{{ status }}'
{% endmacro %}

Vous pouvez désormais utiliser cette macro pour filtrer les données en fonction d'une variable comme ceci :

-- models/orders.sql

SELECT *
FROM {{ ref('orders') }}
{{ filter_by_status(var('order_status', 'completed')) }}

Dans ce cas, filter_by_status ajoute dynamiquement une clause WHERE qui filtre les résultats par order_status, qui est par défaut terminé s'il n'est pas fourni.

Macros complexes : Jointures de tables dynamiques
Voici un exemple de macro plus avancée qui crée une jointure dynamique basée sur les paramètres qui lui sont transmis :

-- macros/join_tables.sql

{% macro join_tables(left_table, right_table, join_key) %}
    SELECT
        left.*,
        right.*
    FROM
        {{ ref(left_table) }} AS left
    INNER JOIN
        {{ ref(right_table) }} AS right
    ON
        left.{{ join_key }} = right.{{ join_key }}
{% endmacro %}

Cette macro prend deux noms de table et une clé de jointure, puis crée dynamiquement un INNER JOIN entre les tables :

-- models/joined_data.sql

{{ join_tables('customers', 'orders', 'customer_id') }}

Lorsque vous appelez cette macro, elle génère le SQL complet pour joindre les tables clients et commandes sur la clé customer_id.

Meilleures pratiques d'utilisation des macros dbt

  • Gardez les macros ciblées : Chaque macro doit effectuer une tâche unique et bien définie. Évitez de regrouper trop de logique dans une seule macro ; au lieu de cela, divisez-le en composants plus petits et réutilisables.

  • Utilisez des conventions de dénomination claires : Assurez-vous que les noms de macros sont descriptifs afin que leur objectif soit clair lorsqu'ils sont utilisés dans des modèles. Cela rend le code plus facile à comprendre et à maintenir.

  • Gérer les cas extrêmes : Tenez toujours compte des cas extrêmes possibles (par exemple, des valeurs nulles ou des entrées inattendues) dans vos macros pour garantir qu'elles fonctionnent de manière fiable dans différents scénarios.

  • Exploitez les macros dans les tests : Vous pouvez également utiliser des macros dans vos tests dbt pour créer une logique de test réutilisable, garantissant ainsi la cohérence entre les étapes de validation de votre projet.

  • Documentez vos macros : Ajoutez des commentaires et de la documentation à vos macros pour expliquer leur objectif, leurs paramètres et leur utilisation. Ceci est particulièrement utile lorsque plusieurs membres de l'équipe contribuent au même projet.

Conclusion

Les macros dbt sont un outil puissant qui peut vous aider à écrire du code plus propre, plus maintenable et réutilisable dans vos projets de transformation de données. En faisant abstraction de la logique complexe, en standardisant les modèles répétitifs et en générant dynamiquement du SQL, les macros réduisent considérablement la complexité et améliorent la fiabilité de vos flux de travail dbt.

Que vous soyez nouveau dans dbt ou un utilisateur expérimenté, apprendre à écrire et à utiliser efficacement des macros peut faire passer vos capacités d'ingénierie de données au niveau supérieur. Commencez petit avec de simples extraits de code réutilisables et, au fil du temps, intégrez une logique plus avancée pour libérer pleinement le potentiel des macros dans vos projets dbt.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn