Skip to main content
While dbt comes with built-in tests, custom tests allow you to implement specific data quality checks tailored to your business logic. This guide will help you understand how to create and use custom tests to ensure the quality and reliability of your data transformations.

Types of Custom Tests

dbt supports two main types of custom tests:

Singular Tests

Singular tests are SQL queries that should return zero rows when the test passes:
This test identifies orders where the payment amount doesn’t match the order amount within a small tolerance. To run singular tests:
Organizing Singular Tests For larger projects, you might want to organize singular tests by domain or purpose:

Creating Generic Custom Tests

Generic tests are more powerful because they can be applied to different models throughout your project. They are defined as macros with a special syntax:
Example: Positive Values Test Here’s a simple custom test that checks if values in a column are positive:
Using Custom Tests in YAML Files Once defined, you can reference these custom tests in your schema YAML files just like built-in tests:
Parameterizing Custom Tests You can make your custom tests more flexible by adding parameters:
In your YAML file:

Combining Macros and Tests

You can use macros within your custom tests to create powerful, reusable testing frameworks:
This approach lets you centralize business rules (like valid status values) and reuse them across tests.

Advanced Test Configurations

You can configure how tests behave using additional properties:

Testing Data Quality with Packages

Popular packages like dbt-expectations extend dbt’s testing capabilities with advanced data validation:
Example: Advanced Data Validation Using dbt-expectations to implement sophisticated data quality checks:
Popular Testing Packages

Real-World Custom Test Examples

Date Range Validation
Numeric Distribution Test
Referential Integrity with Exceptions

Best Practices for Custom Tests

Pro Tip: Troubleshooting Failed TestsWhen tests fail, use these strategies to diagnose issues:
  1. Check error messages in the dbt logs
  2. Examine a sample of failing records with store_failures: true
  3. Verify test logic by inspecting the compiled SQL in target/compiled/
  4. Use --vars to test with different parameters
By implementing custom tests, you can ensure your transformations meet business requirements and maintain high data quality standards throughout your dbt project.