Elite data quality doesn’t happen by accidentβ€”it’s the result of intentional testing, smart monitoring, and ruthless automation. Thankfully, with dbt, you can build an airtight data quality framework. And with Elementary, you can take that framework to a whole new level of visibility and trust.

Here’s how to level-up your pipelines with dbt + Elementary: built-in tests, custom tests, real-world examples, and advanced observability.

🧱 Built-in dbt Tests – Your First Line of Defense

These are your foundational guards against dirty data.

1. not_null

columns:
  - name: user_id
    tests:
      - not_null

2. unique

columns:
  - name: order_id
    tests:
      - unique

3. accepted_values

columns:
  - name: status
    tests:
      - accepted_values:
          values: ['active', 'inactive', 'pending']

4. relationships

columns:
  - name: customer_id
    tests:
      - relationships:
          to: ref('dim_customers')
          field: id

πŸ› οΈ Custom Tests for Business Logic

When the built-ins don’t cut it, you roll your own.

βœ… Positive Values Test

{% test positive_values(model, column_name) %}
SELECT *
FROM {{ model }}
WHERE {{ column_name }} <= 0
{% endtest %}
columns:
  - name: price
    tests:
      - positive_values

πŸ—“ Dates Must Be in the Past

{% test past_date(model, column_name) %}
SELECT *
FROM {{ model }}
WHERE {{ column_name }} > current_date
{% endtest %}

πŸ” Status-Churn Logic

{% test churned_users_have_churn_date(model) %}
SELECT *
FROM {{ model }}
WHERE status = 'churned' AND churn_date IS NULL
{% endtest %}

πŸ” Using Elementary to Monitor & Visualize Tests

Elementary is a powerful open-source tool that analyzes dbt artifacts (run_results.json, manifest.json) and generates a full data observability report.

πŸ”₯ What it does:

  • Tracks test failures over time

  • Groups failures by model/test/type

  • Highlights freshness issues, row count anomalies, and schema changes

  • Lets you drill into failed rows

  • Sends Slack/Email alerts on failures

  • Automatically publishes a sleek web UI or pushes to dbt Cloud/S3

πŸš€ Tips for Going Pro

  • Use severity: warn for soft failures:

tests:
  - unique:
      severity: warn
  • Run in CI/CD pipelines (GitHub Actions, GitLab, dbt Cloud).

  • Track test coverage using manifest.json and visualize it in Elementary.

  • Integrate with Airflow or orchestrators to auto-monitor tests daily.

🎯 Final Thoughts

Combining dbt’s test framework with Elementary’s observability layer creates a best-in-class data quality system:

βœ… Built-in tests
βœ… Custom macros
βœ… Alerts and dashboards
βœ… Stakeholder visibility

Whether you're just getting started or scaling out a mature data platform, this duo will help you deliver clean, reliable, and trusted dataβ€”consistently.

Keep Reading