Skip to content
Back to skills

Implementing Data Quality Checks

ASecurity

Add data quality checks to pipelines — freshness, volume/row-count anomalies, schema drift, null/uniqueness/referential integrity, and value distributions — using dbt tests, Great Expectations, or Soda, and deciding warn vs block. Use when adding data quality validation, catching bad data before it reaches consumers, setting up freshness/volume checks, or defining expectations.

  • 15 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 1, 2026
ai-agentspythontesting

Security analysis

A100/100

Scanned September 1, 2026

npx -y skills add Unknown-333/awesome-data-engineering-skills --skill implementing-data-quality-checks --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Implementing Data Quality Checks?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Implementing Data Quality Checks
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/unknown-333-implementing-data-quality-checks/badge)](https://www.skillsdirectory.com/skills/unknown-333-implementing-data-quality-checks)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: implementing-data-quality-checks
description: Add data quality checks to pipelines — freshness, volume/row-count anomalies, schema drift, null/uniqueness/referential integrity, and value distributions — using dbt tests, Great Expectations, or Soda, and deciding warn vs block. Use when adding data quality validation, catching bad data before it reaches consumers, setting up freshness/volume checks, or defining expectations.
---

# Implementing Data Quality Checks

## When to use

- Adding validation so bad data is caught before consumers see it.
- Setting up freshness, volume, schema-drift, or integrity checks.
- Choosing a tool (dbt tests, Great Expectations, Soda) and where to place checks.
- Do NOT use for dbt-specific test syntax only (use `testing-dbt-projects` for
  the dbt details).

## The six dimensions to cover

1. **Freshness** — did the data arrive on time? (max load timestamp vs SLA)
2. **Volume** — is the row count in the expected range? (catches partial loads and
   duplication)
3. **Schema** — did columns/types change unexpectedly? (drift)
4. **Completeness** — required fields not null.
5. **Uniqueness / integrity** — keys unique, foreign keys valid.
6. **Validity / distribution** — values in allowed ranges/sets; no sudden
   distribution shifts.

## Workflow

```
- [ ] Put blocking checks at the entry point (raw/staging) so bad data stops early
- [ ] Cover the six dimensions on critical tables
- [ ] Decide warn vs block per check by business impact
- [ ] Route failures to alerts + a quarantine/failure store
- [ ] Add reconciliation between source and target for critical flows
```

1. **Check early.** Validate at ingestion/staging so bad data fails fast rather
   than propagating into marts and dashboards.
2. **Cover the six dimensions** on tables that feed decisions/SLAs.
3. **Warn vs block.** Block (fail the run) on integrity-critical checks; warn on
   soft signals. Blocking everything causes alert fatigue and pipeline gridlock.
4. **Act on failures** — alert an owner and store failing rows for triage;
   optionally quarantine and continue.

## Patterns

**Great Expectations** — declarative expectations on a batch:

```python
validator.expect_column_values_to_not_be_null("order_id")
validator.expect_column_values_to_be_unique("order_id")
validator.expect_column_values_to_be_between("amount", min_value=0)
validator.expect_table_row_count_to_be_between(min_value=1000)
```

**Soda (SodaCL)** — freshness, volume, and integrity in YAML:

```yaml
checks for fct_orders:
  - freshness(ordered_at) < 24h
  - row_count between 1000 and 1000000
  - missing_count(order_id) = 0
  - duplicate_count(order_id) = 0
```

**Volume anomaly** — compare today's count to the trailing average and alert on a
large deviation, catching partial loads and accidental duplication.

## Common pitfalls

- **Checking only at the end** — bad data has already reached consumers; validate
  at entry.
- **Blocking on every soft check** — alert fatigue; reserve blocking for
  integrity-critical rules.
- **No owner/routing** — failures no one sees are worthless; route to a person and
  a failure store.
- **Freshness ignored** — stale data looks "correct" but is wrong; it is the most
  commonly missed dimension.
- **No reconciliation** — row-level checks pass while totals drift from source;
  add source-vs-target count/sum reconciliation for critical flows.
- **Static thresholds on seasonal data** — use trailing baselines, not fixed
  numbers, where volume varies.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…