Short
dbt Test Types Explained: Schema vs Data Tests
Available on:
⚡ dbt tests in 90 seconds—Schema vs Data tests!
Two Types of Tests in dbt
1. Schema Tests (Built-In)
Define in YAML, dbt generates SQL
models:
- name: users
columns:
- name: user_id
tests:
- unique
- not_null
- name: email
tests:
- unique
- not_null
- name: country_code
tests:
- accepted_values:
values: ['US', 'CA', 'UK', 'DE']
4 built-in tests:
unique- No duplicatesnot_null- No NULL valuesaccepted_values- Value must be in listrelationships- Foreign key check
2. Data Tests (Custom SQL)
Write SQL to test business logic
-- tests/assert_revenue_positive.sql
SELECT
order_id,
total_amount
FROM orders
WHERE total_amount < 0
If query returns rows = test fails!
When to Use Each
Schema Tests → Column-level checks
- Data types correct?
- No unexpected NULLs?
- Values in expected range?
Data Tests → Business logic checks
- Revenue calculations correct?
- Dates make sense? (order_date < ship_date)
- Cross-table consistency?
Common Gotcha 🚨
DON’T DO THIS:
tests:
- unique # ❌ Runs on EVERY column
DO THIS:
columns:
- name: user_id
tests:
- unique # ✅ Runs on specific column
Pro Tips
- Start simple: unique + not_null on primary keys
- Add gradually: Don’t test everything day 1
- Test in CI/CD:
dbt testbefore merging - Use severity:
warnvserrorfor different impact levels
tests:
- unique:
severity: error # Fails build
- custom_check:
severity: warn # Logs warning
Quick Reference
| Need | Use |
|---|---|
| Column uniqueness | Schema test: unique |
| Business rule | Data test: custom SQL |
| Foreign key | Schema test: relationships |
| Complex validation | Data test: custom SQL |
That’s dbt testing! Run dbt test and ship with confidence. ✅
#dbt #DataQuality #DataEngineering #Analytics
🎯 Dot
Daily 60-90 second videos covering a single data concept, tool, or news item. Perfect for social media consumption.
Frequency: Daily
Find this series on: