Créer des tests réutilisables personnalisés

dbt intermédiaire

Mike Metzger

Data Engineer

Qu'est-ce qu'un test réutilisable ?

  • Un test réutilisable dans plusieurs contextes
  • Comme un test dbt intégré, mais peut vérifier n'importe quelle condition
  • Utilise les gabarits Jinja
  • Enregistré comme fichier .sql dans le dossier de projet tests/generic
  • Ajouter le test à model_properties.yml pour chaque modèle qui l'utilise

Réutilisable

1 Photo par Sigmund sur Unsplash
dbt intermédiaire

Créer un test réutilisable

{% test check_gt_0(model, column_name) %}

select * 
from {{ model }}
where {{ column_name }} > 0

{% endtest %}
  1. Première ligne (au minimum) : {% test testname(model, column_name) %}
  2. Ajouter la requête SQL, avec substitutions {{ object }}
  3. Terminer le fichier par {% endtest %}
dbt intermédiaire

Appliquer un test réutilisable à un modèle

  • Ajouter à model_properties.yml
  • Définir les objets nécessaires
  • models : la valeur name est l'argument model
  • columns : l'argument name est l'argument column_name
version: 2

models:
  - name: taxi_rides_raw
    columns:
      - name: tpep_pickup_datetime
        tests:
          - not_null

- name: total_fare tests: - check_gt_0
dbt intermédiaire

Paramètres supplémentaires

  • On peut ajouter des paramètres supplémentaires au test
  • Similaire à accepted_values et relationships
  • Les ajouter comme arguments dans l'en‑tête Jinja
{% test check_columns_unequal(model, column_name, column_name2) %}

select * from {{ model }}
where {{ column_name }} = {{ column_name2 }}

{% endtest %}
dbt intermédiaire

Appliquer des tests avec paramètres supplémentaires

  • Définir comme les autres tests
  • Ajouter les arguments supplémentaires sous les détails du test
models:
  - name: order
    columns:
      - name: order_time
        tests:
          - check_columns_unequal:
              column_name2: shipped_time
dbt intermédiaire

Passons à la pratique !

dbt intermédiaire

Preparing Video For Download...