Tooling

Data Quality & Testing

Great Expectations, Soda Core, dbt tests, Pandera — assertions and contracts on your data.

Catch bad data before dashboards lie or ML models drift. This page is about assertions you write; for monitoring data freshness and anomalies in production, see Data Observability. For lineage and discoverability, see Data Catalog & Lineage.

In-warehouse / SQL-native

  • dbt testsnot_null, unique, accepted_values, relationships; plus singular tests as plain SQL files. Free with dbt-core. The default if you already model with dbt.
  • dbt-expectations — Great Expectations–style assertions packaged as dbt tests (expect_column_values_to_be_between, distribution checks, etc.).
  • dbt-utils tests — common parameterized tests on top of dbt-core.
  • SQLMesh audits — built-in AUDIT syntax with row-level expressions; see Data Transformation & Modeling.

Standalone frameworks

  • Great Expectations — Python-first; catalogs of "expectations" against pandas / Spark / SQL data; HTML data docs. Apache 2.0. The classic; v1.x in 2025 simplified the API significantly.
  • Soda Core — YAML-style checks (SodaCL) over SQL warehouses; lightweight CLI runs; Apache 2.0. Hosted Soda Cloud is paid. Often preferred over Great Expectations for "just SQL" teams.
  • Elementary Data — runs over dbt artifacts; see Data Observability (overlaps both categories).
  • Datafold's data-diff — diff two tables / two warehouses; MIT; great for migrations.

Python-frame validation

  • Pandera — schema validation for pandas, Polars, PySpark, Modin, Dask. MIT. The default "Zod for DataFrames."
  • pandas_dq, pyjanitor — pandas-specific QC helpers.
  • Cerberus — generic Python validation library; works on dicts/JSON.
  • Pydantic v2 — for typed Python objects, including post-load validation; see Validation.

Profiling / EDA-as-quality

  • ydata-profiling (formerly pandas-profiling) — one-line HTML report with summary stats, correlations, missing-value heatmaps. MIT. Excellent first-look quality check.
  • Sweetviz — comparative profiling (train vs. test); BSD-3.
  • AutoViz — auto-generates EDA charts; Apache 2.0.
  • See Data Exploration & EDA for more.

File / schema-level

  • Frictionless — Table Schema / Data Package validation for CSV / JSON / Parquet datasets. MIT. Great for open-data / public datasets.
  • JSON Schema + AJV — for API payload validation; see Validation.
  • Apache Avro / Protobuf schemas — enforced at the broker level via schema registry; see Message Brokers.

JVM / Spark

  • Apache Griffin — Spark-based data-quality framework; Apache 2.0; less active in 2026.
  • Deequ (Amazon) — Spark-based; Apache 2.0; mature for Spark-heavy teams.

Patterns to adopt

  • Tests live with the model. Schema YAML next to the SQL file; review them in the same PR.
  • Three test classes.
    1. Schema: types, nullability, primary keys.
    2. Business: invariants ("never a negative order amount").
    3. Freshness: max(updated_at) within SLA.
  • Fail loud on critical, warn on soft. dbt's severity: warn vs error model.
  • Test sources, not just marts. Bad data ingested is bad data downstream. Apply contracts at the boundary.
  • Test before transform on critical paths. Consider dbt's --store-failures to keep a row-level audit of who failed.
  • Don't test what's already typed. If the warehouse enforces it, don't re-test it.

Pick this if…

  • You already use dbt: dbt tests + dbt-expectations + Elementary.
  • You want SQL YAML with no framework lock-in: Soda Core.
  • Heavy pandas / Polars pipelines: Pandera.
  • Open data / file-level packaging: Frictionless.
  • One-shot data exploration / new dataset triage: ydata-profiling.
  • You need both quality and observability in one: Soda Cloud or Elementary's hosted edition.

On this page