📖 Scenario: You work as a data analyst who builds data transformation models using dbt. To ensure your models are correct and reliable, you want to write unit tests that check your data logic before deploying to production.
🎯 Goal: Build a simple dbt model and write a unit test to verify that the model produces the expected results.
📋 What You'll Learn
Create a dbt model SQL file with a simple SELECT statement
Create a YAML test configuration file for the model
Write a dbt test that checks for expected data values
Run the test and display the test result
💡 Why This Matters
🌍 Real World
Data analysts and engineers use dbt to build reliable data pipelines. Unit testing models helps catch errors early and ensures data quality.
💼 Career
Knowing how to write and run dbt tests is a key skill for data engineers and analytics engineers working with modern data stacks.
Progress0 / 4 steps
1
Create a simple dbt model
Create a dbt model SQL file named models/simple_model.sql with the exact query: select 1 as id, 'test' as name
dbt
Hint
This model returns a single row with id 1 and name 'test'.
2
Add a YAML test configuration
Create a YAML file named models/simple_model.yml with a test that checks the id column is unique in the simple_model model. Use the exact syntax: tests: - unique
dbt
Hint
The YAML file defines tests for the model columns. Here we test that 'id' is unique.
3
Run the dbt test command
Run the command dbt test --select simple_model in your terminal to execute the unit test on the simple_model model.
dbt
Hint
This command runs the tests defined for the simple_model only.
4
Display the test result
Print the expected output line PASS 1 test, 0 failures to show the test passed successfully.
dbt
Hint
This output means your unit test passed with no errors.
Practice
(1/5)
1. What is the main purpose of unit testing in dbt models?
easy
A. To check data models for correctness and quality
B. To create new data models from scratch
C. To deploy dbt projects to production
D. To write SQL queries faster
Solution
Step 1: Understand unit testing in dbt
Unit testing in dbt is designed to verify that data models behave as expected and contain correct data.
Step 2: Identify the main goal
The main goal is to check correctness and quality of data models, not to create or deploy them.
Final Answer:
To check data models for correctness and quality -> Option A
Quick Check:
Unit testing = correctness and quality check [OK]
Hint: Unit tests check data correctness, not creation or deployment [OK]
Common Mistakes:
Confusing testing with model creation
Thinking tests deploy models
Assuming tests speed up SQL writing
2. Which of the following is the correct syntax to define a unique test on a column in a dbt YAML file?
easy
A. tests:
- unique: column_name
B. tests: unique: column_name
C. tests: - unique: column_name
D. tests:
unique: - column_name
Solution
Step 1: Recall YAML test syntax in dbt
Tests are listed as a YAML list under the 'tests' key, each with a dash and test name.
Step 2: Match correct indentation and list format
tests:
- unique: column_name shows 'tests:' followed by a list item '- unique: column_name', which is correct YAML syntax for dbt tests.
Final Answer:
tests:
- unique: column_name -> Option A
Quick Check:
YAML lists use dash (-) before items [OK]
Hint: YAML lists need dash (-) before each test [OK]
A. It checks that user_id values are duplicated and null
B. It checks that user_id values are unique and not null
C. It only checks if user_id is unique
D. It only checks if user_id is not null
Solution
Step 1: Read the tests listed for user_id
The YAML shows two tests: 'unique' and 'not_null' for the user_id column.
Step 2: Understand what each test does
'unique' ensures no duplicate values; 'not_null' ensures no missing values.
Final Answer:
It checks that user_id values are unique and not null -> Option B
Quick Check:
unique + not_null = no duplicates, no nulls [OK]
Hint: Multiple tests run together on the same column [OK]
Common Mistakes:
Thinking tests check opposite conditions
Assuming only one test runs
Confusing unique with not_null
4. You wrote this test in your YAML file:
columns:
- name: order_id
tests:
unique
not_null
But when you run dbt test, it fails with a syntax error. What is the likely cause?
medium
A. Using 'tests' instead of 'test' key
B. Incorrect indentation of 'name' key
C. Missing quotes around test names
D. Missing dash (-) before 'unique' and 'not_null' tests
Solution
Step 1: Check YAML list syntax for tests
Each test under 'tests' must be a list item starting with a dash (-).
Step 2: Identify missing dashes
The snippet shows 'unique' and 'not_null' without dashes, causing YAML syntax error.
Final Answer:
Missing dash (-) before 'unique' and 'not_null' tests -> Option D
Quick Check:
YAML lists need dash (-) before each item [OK]
Hint: Always put dash (-) before each test in YAML list [OK]
Common Mistakes:
Omitting dash (-) before tests
Wrong indentation levels
Confusing 'tests' with 'test' key
5. You want to ensure that the email column in your users model is always unique and never empty. Which YAML test configuration correctly applies these tests and how would you run them?
hard
A. Define in YAML:
columns:
- email:
tests:
- unique
- not_null
Then run dbt test
B. Define in YAML:
columns:
- name: email
tests:
unique
not_null
Then run dbt run
C. Define in YAML:
columns:
- name: email
tests:
- unique
- not_null
Then run dbt test
D. Define in YAML:
columns:
- name: email
tests:
- unique
- not_null
Then run dbt run
Solution
Step 1: Write correct YAML test syntax
The tests must be listed as a YAML list with dashes under 'tests' for the 'email' column, as shown in Define in YAML:
columns:
- name: email
tests:
- unique
- not_null
Then run dbt test.
Step 2: Choose the correct dbt command to run tests
To execute tests, you must run dbt test, not dbt run. So this configuration with dbt test is correct.
Final Answer:
Define tests with dashes and run dbt test -> Option C
Quick Check:
YAML list + dbt test command = correct testing [OK]
Hint: Use dashes for tests and run 'dbt test' to execute [OK]
Common Mistakes:
Running 'dbt run' instead of 'dbt test'
Incorrect YAML list syntax
Misnaming column key
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.