Data quality
Catch bad data before anyone uses it
Attach checks to assets. A blocking check stops bad data from reaching the published layer. A warning check tells you and lets the data through. Records that fail are quarantined, not lost.
Checks on assets
Declared next to the data they protect
Checks are part of the asset definition, so they are versioned, reviewed and deployed together with the code. Built-in checks cover the common cases, and custom checks are plain Python functions.
- Schema: required fields, types and allowed values.
- Freshness: the asset must be updated within a time window.
- Uniqueness: keys must not repeat.
- Custom: any rule you can express in code, such as totals matching.
pipelines/checks.py
@sy.asset( layer="staged", checks=[ sy.checks.schema(required=["org_id", "name"]), sy.checks.unique("org_id", severity="error"), sy.checks.fresh(within="26h", severity="warn"), ], ) def company_profiles(ctx, raw): # ... @sy.check(asset=company_profiles, severity="warn") def address_not_empty(ctx, rows): bad = [r for r in rows if not r["address"]] return sy.CheckResult(passed=not bad, detail=f"{len(bad)} rows without address")
Blocking or warning
You choose how strict to be
| Blocking check | Warning check | |
|---|---|---|
| On failure | Run stops before the published layer | Run continues |
| Failed records | Quarantined in staged | Flagged and kept |
| Alert | Sent to the on-call channel | Sent to the team channel |
| Best for | Keys, required fields, types | Freshness, soft ranges, completeness |
Quarantine
Bad records wait for a decision
When a check fails, only the failing records are moved to a quarantine area in the staged layer. Good records continue. You can inspect the quarantined rows, see which check rejected them and the original raw payload, then fix the rule or the source and release them.
- Quarantined records keep their provenance, so you know where they came from.
- Releasing records is a replay-safe operation.
- Counts of quarantined records are shown on the asset page.
Overview
Runs
Assets
Sources
Lineage
Alerts
Settings
Checks for company_profiles
schemaBlockingPassed
unique(org_id)Blocking14 quarantined
fresh(26h)WarningLast 27h
address_not_emptyWarningPassed
Tip. Start with warnings on a new asset. After a week you know which rules are realistic, and you can promote the stable ones to blocking.
Ready to stop babysitting pipelines?
Synchronoid is in private beta. Tell us about your data and we will get you a workspace.