Skip to content

Cum să creezi teste personalizate în dbt

DodaTech Updated 2025-01-15 2 min read

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

Vei învăța cum să creezi teste personalizate în dbt, combinând teste generice proprii cu teste singular, pentru a acoperi orice regulă de business.

Problema

Testele built-in acoperă cazuri comune. Pentru reguli specifice — "totalul comenzii trebuie să fie pozitiv", "emailul trebuie să aibă format valid" — ai nevoie de teste personalizate.

Modul Greșit

# schema.yml — teste insuficiente
models:
  - name: stg_orders
    columns:
      - name: total
        tests:
          - not_null  # Nu verifică dacă total > 0
-- Verificare manuală — uitată
SELECT * FROM stg_orders WHERE total < 0;

Modul Corect

Test generic personalizat

-- tests/generic/test_positive_value.sql
{% test positive_value(model, column_name) %}
SELECT *
FROM {{ model }}
WHERE {{ column_name }} <= 0
{% endtest %}

Test singular

-- tests/assert_valid_email_format.sql
SELECT *
FROM {{ ref('stg_users') }}
WHERE email NOT LIKE '%@%.%'
  AND email IS NOT NULL

Aplică testele

# models/schema.yml
models:
  - name: stg_orders
    columns:
      - name: total
        tests:
          - not_null
          - positive_value  # Testul tău custom

  - name: stg_users
    tests:
      - assert_valid_email_format  # Test singular
dbt test

Output:

17:23:45  1 of 3 PASS not_null_stg_orders_total
17:23:45  2 of 3 PASS positive_value_stg_orders_total
17:23:46  3 of 3 PASS assert_valid_email_format

Pas cu Pas

1. Creează un test generic custom

-- tests/generic/test_date_is_past.sql
{% test date_is_past(model, column_name) %}
SELECT *
FROM {{ model }}
WHERE {{ column_name }} > CURRENT_DATE
{% endtest %}
columns:
  - name: order_date
    tests:
      - date_is_past

2. Creează un test singular

-- tests/assert_no_orphan_orders.sql
SELECT o.*
FROM {{ ref('stg_orders') }} o
LEFT JOIN {{ ref('stg_users') }} u ON o.user_id = u.id
WHERE u.id IS NULL

3. Rulează toate testele

dbt test --select test_type:generic  # Doar teste generice (inclusiv custom)
dbt test --select test_type:singular  # Doar teste singular

Sfaturi de Prevenție

  • Preferă testele generice custom când aceeași logică se aplică pe mai multe coloane
  • Folosește teste singular pentru reguli unice, specifice unui model
  • Testează testul personalizat manual înainte de a-l include în pipeline
  • Documentează ce verifică fiecare test custom

Greșeli Comune

  1. Test generic fără parametrul model — dbt nu poate pasa modelul; testul eșuează
  2. Nume de test conflictual — testul tău custom are același nume ca un test built-in
  3. Test singular prea complex — verifică prea multe reguli; separă în teste multiple
  4. Test care nu returnează rânduri — testul e întotdeauna PASS, indiferent de date

Întrebări Frecvente

### Cum testez un test personalizat?

Rulează SQL-ul manual în baza de date. Pentru teste generice, poți crea un model temporar cu date care să eșueze testul.

Pot combina mai multe condiții într-un singur test custom?

Da — pentru teste singular. Pentru teste generice, păstrează-le simple și focusate pe o singură regulă.

Unde plasez testele personalizate?

Testele generice custom: tests/generic/test_*.sql. Testele singular: tests/assert_*.sql.

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

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro