2.5 KiB
2.5 KiB
name, description
| name | description |
|---|---|
| dbt_yaml_testing | Step-by-step instructions for writing dbt schema.yml files with model descriptions, column descriptions, and data tests. Use for any dbt project. |
Write dbt Schema YAML & Data Tests
Every dbt model needs a schema entry with descriptions and tests. This skill covers writing schema.yml files correctly.
Steps
1. Locate or create the schema file
- Naming convention:
schema.yml(one per folder is fine) or<model_name>.yml. - Place it in the same directory as the model.
- Source definitions use
src_<system>.yml.
2. Add the model block
models:
- name: <model_name>
description: "One sentence: what this model represents, grain, and any key filters."
3. Add column definitions
- Every column should have a
description:. - Use
data_tests:(not the deprecatedtests:key).
columns:
- name: <primary_key_column>
description: "Unique identifier for each row."
data_tests:
- unique
- not_null
- name: <foreign_key_column>
description: "Foreign key to <other_model>."
data_tests:
- not_null
- relationships:
to: ref('<other_model>')
field: <field_name>
- name: <status_column>
description: "Status of the record."
data_tests:
- accepted_values:
values: ['active', 'inactive', 'pending']
4. Set test severity (optional override)
- Project default is usually
warn. Override critical tests toerror:
data_tests:
- unique:
severity: error
- not_null:
severity: error
5. Add singular tests for complex assertions
- Place in
tests/directory. - A passing test returns zero rows (the query selects failing records):
-- tests/assert_<model>_<condition>.sql
select <key_column>
from {{ ref('<model_name>') }}
where <failing_condition>
Minimum Required Tests Per Layer
| Layer | Required Tests |
|---|---|
| Staging | unique + not_null on primary key |
| Transform | unique + not_null on unique_key columns |
| Marts (fact) | unique + not_null on PK; relationships on FK |
| Marts (dim) | unique + not_null on natural/surrogate key |
YAML Style Rules
- 2-space indentation (no tabs).
- Use
data_tests:nottests:. - Every model must have a
description:. - Quote descriptions with
"double quotes".
Template
See schema_template.yml in this folder.