Skip to content

Testoppsett i dbt

Testing er en av de viktigste styrkene i dbt: tester bor tett på modellene og kjøres som en naturlig del av dbt build.

Grunnleggende testsyntaks

Fra dbt 1.8 brukes data_tests: i stedet for det gamle tests:.

models:
  - name: dim_person
    columns:
      - name: pk_dim_person
        data_tests:
          - unique
          - not_null

Bruk data_tests, ikke tests

tests: er deprecated fra dbt 1.8. Bruk data_tests: i alle nye og oppdaterte filer.

Standard tester per lag

Lag Minimum Anbefalt i tillegg
Staging not_null og unique på primærnøkkel accepted_values på statuskoder
Intermediate not_null på primærnøkkel relationships mot staging-modeller
Marts not_null og unique på primærnøkkel relationships, accepted_values, egendefinerte tester

Innebygde testtyper

not_null

Sjekker at kolonnen ikke inneholder NULL-verdier.

- name: pk_dim_person
  data_tests:
    - not_null

unique

Sjekker at alle verdier i kolonnen er unike.

- name: pk_dim_person
  data_tests:
    - unique

accepted_values

Sjekker at kolonnen kun inneholder verdier fra en gitt liste.

- name: status
  data_tests:
    - accepted_values:
        values: ['aktiv', 'inaktiv', 'slettet']

relationships

Sjekker referanseintegritet mot en annen modell – tilsvarer en fremmednøkkel-sjekk.

- name: fk_dim_person
  data_tests:
    - relationships:
        to: ref('dim_person')
        field: pk_dim_person

Eksempel: komplett modell-YAML

models:
  - name: fak_hendelser
    description: Faktatabell over hendelser per person.
    columns:
      - name: pk_fak_hendelser
        description: Primærnøkkel.
        data_tests:
          - unique
          - not_null

      - name: fk_dim_person
        description: Referanse til dim_person.
        data_tests:
          - not_null
          - relationships:
              to: ref('dim_person')
              field: pk_dim_person

      - name: hendelse_type
        description: Type hendelse.
        data_tests:
          - not_null
          - accepted_values:
              values: ['A', 'B', 'C']

      - name: hendelse_ts
        description: Tidspunkt for hendelsen i UTC.
        data_tests:
          - not_null

Egendefinerte tester

Egendefinerte tester legges i tests/-mappen som SQL-filer. En test består av en spørring som returnerer rader ved feil – ingen rader betyr bestått.

-- tests/assert_positive_amount.sql
select *
from {{ ref('fak_hendelser') }}
where belop_nok < 0

Kjøre tester

dbt test                          # Alle tester
dbt test --select modellnavn      # Tester for én modell
dbt build --select modellnavn     # Bygg og test i ett steg

Tester og dbt-utils

dbt-utils-pakken gir tilgang til flere nyttige tester, blant annet:

  • dbt_utils.unique_combination_of_columns – unik kombinasjon av flere kolonner (sammensatt primærnøkkel)
  • dbt_utils.expression_is_true – sjekk at et SQL-uttrykk er sant for alle rader
  • dbt_utils.not_constant – sjekk at en kolonne ikke har samme verdi i alle rader

Eksempel:

- name: fak_hendelser
  data_tests:
    - dbt_utils.unique_combination_of_columns:
        combination_of_columns:
          - fk_dim_person
          - hendelse_ts

For å bruke dbt-utils, legg det til i packages.yml:

packages:
  - package: dbt-labs/dbt_utils
    version: [">=1.0.0", "<2.0.0"]

Og kjør dbt deps for å installere.