Skip to content

Cum să creezi teste generice în dbt

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să creezi teste generice în dbt. We cover key concepts, practical examples, and best practices.

Vei învăța cum să creezi teste generice în dbt — șabloane de test reutilizabile care pot fi aplicate pe orice model sau coloană direct din YAML.

Problema

Aceleași verificări (not_null, unique) se repetă pe multe coloane. Testele generice evită duplicarea codului SQL, permițând definirea o singură dată și reutilizarea prin configurare YAML.

Modul Greșit

-- Teste singular duplicate — același SQL în mai multe fișiere
-- tests/assert_users_id_not_null.sql
SELECT * FROM {{ ref('stg_users') }} WHERE id IS NULL;

-- tests/assert_orders_id_not_null.sql — același concept
SELECT * FROM {{ ref('stg_orders') }} WHERE id IS NULL;

Modul Corect

1. Creează testul generic

-- tests/generic/test_not_null.sql
{% test not_null(model, column_name) %}
SELECT *
FROM {{ model }}
WHERE {{ column_name }} IS NULL
{% endtest %}

2. Aplică testul în YAML

# models/schema.yml
version: 2
models:
  - name: stg_users
    columns:
      - name: id
        tests:
          - not_null  # Folosește testul generic definit mai sus
      - name: email
        tests:
          - not_null

  - name: stg_orders
    columns:
      - name: id
        tests:
          - not_null
      - name: user_id
        tests:
          - not_null
dbt test --select stg_users

Output:

17:23:45  1 of 2 PASS not_null_stg_users_id
17:23:45  2 of 2 PASS not_null_stg_users_email

Pas cu Pas

1. Creează directorul tests/generic/

tests/
  generic/
    test_not_null.sql
    test_unique.sql
    test_accepted_values.sql

2. Scrie șablonul testului

{% test accepted_values(model, column_name, values) %}
SELECT *
FROM {{ model }}
WHERE {{ column_name }} NOT IN (
    {% for value in values %}
        '{{ value }}'{% if not loop.last %},{% endif %}
    {% endfor %}
)
{% endtest %}

3. Aplică în YAML

columns:
  - name: status
    tests:
      - accepted_values:
          values: ['active', 'inactive', 'banned']

Sfaturi de Prevenție

  • Plasează testele generice în tests/generic/ cu prefixul test_
  • Testele generice primesc model și parametri adiționali
  • Reutilizează testele built-in înainte de a crea unele noi
  • Documentează parametrii testelor generice

Greșeli Comune

  1. Nume fără prefixul test_ — dbt nu recunoaște fișierul ca test generic
  2. Parametri insuficienți — testul are nevoie de parametri care nu sunt furnizați în YAML
  3. Director greșit — testele generice trebuie să fie în tests/generic/, nu direct în tests/
  4. Test generic prea specific — fă-l parametrizabil, nu hardcodat pentru un model anume

Întrebări Frecvente

### Care e diferența între teste generice și built-in?

Testele built-in (not_null, unique) sunt predefinite de dbt. Testele generice sunt cele pe care le creezi tu în tests/generic/. Ambele se configurează la fel în YAML.

Cum suprascriu un test built-in?

Creează un test generic cu același nume în tests/generic/. dbt preferă testul tău în locul celui built-in.

Pot avea teste generice cu mai mulți parametri?

Da — definește câți parametri ai nevoie. Toți se trec în YAML.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu dbt pentru teste generice reutilizabile.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro