Check reference¶
Per-check pages are coming
This page lists every check type in one place. A later revision splits
each into its own generated page — parameters, defaults, and a YAML
example, kept in sync with the code automatically — see
docs/docs-site-plan.md Phase 2 in the repository.
A check is either table-level (validates the table as a whole — row
counts, column existence) or column-level (validates a specific
column). Every check returns a status of pass, fail, error, or
warning, along with an optional metric value, threshold, and details.
Core checks — start here¶
CatalystData ships 50+ check types (the full list is below), but most data quality coverage comes from this core set. Start here, and reach for the rest — geospatial, JSON/XML, binary, money, UUID, boolean — only when your schema actually has those column types.
check_type |
Level | What it catches |
|---|---|---|
null |
Column | Unexpected nulls beyond a tolerance |
unique |
Column | Duplicate values where uniqueness is expected |
allowed_values |
Column | Values outside a fixed set (categorical drift) |
foreign_key |
Column | Broken referential integrity against a parent table |
row_count |
Table | Table volume outside expected bounds or the day-over-day average |
date_freshness |
Column | Data going stale — no recent rows by a datetime column |
date_no_future |
Column | Dates that should not be in the future but are |
date_range |
Column | Dates outside an expected min/max range |
numeric_range |
Column | Numeric values outside an expected min/max range |
numeric_non_negative |
Column | Negative values where only non-negative makes sense |
numeric_outlier_zscore |
Column | Statistical outliers, z-score based |
string_not_empty |
Column | Empty or whitespace-only strings |
string_length |
Column | Strings outside expected length bounds |
string_regex |
Column | Values that do not match an expected pattern |
custom |
Table or column | Escape hatch — arbitrary SQL for anything not covered above |
Table-level checks¶
row_count — Row count (30-day average or min/max)¶
Validates that the table row count is within expected bounds. Two modes: a 30-day average with a tolerance (needs a datetime column to group by), or simple min/max bounds.
| Parameter | Type | Description |
|---|---|---|
min_count |
int | Minimum expected row count (optional) |
max_count |
int | Maximum expected row count (optional) |
tolerance_percent |
float | With split_by_column, pass if the current day's count is within ± this percent of the 30-day average |
split_by_column |
string | Datetime column to group by day — required for the 30-day average mode |
For an exact row-count expectation, set min_count and max_count to the
same value.
table_column_count — Column count between (min/max columns)¶
Validates that the number of columns in the table falls within a range,
using schema introspection. Set at least one of min_count or max_count.
| Parameter | Type | Description |
|---|---|---|
min_count |
int | Minimum number of columns (optional) |
max_count |
int | Maximum number of columns (optional) |
table_column_name_to_exist — Column name exists (schema validation)¶
Validates that a column with a given name exists in the table — useful for catching accidental schema changes or missed migrations.
| Field | Type | Description |
|---|---|---|
column_name |
string | Required. The column name that must exist |
foreign_key — Referential integrity (FK exists in parent)¶
Validates that values in a column exist in a reference table's column.
| Parameter | Type | Description |
|---|---|---|
reference_table |
string | Parent table name |
reference_column |
string | Parent column name |
The check's own column_name field is the foreign-key column in the
current table.
cross_table_reconciliation — Cross-table reconciliation (totals match)¶
Validates that an aggregate of a column matches a reference table's aggregate within a tolerance.
| Parameter | Type | Description |
|---|---|---|
reference_table |
string | Table to compare against |
reference_column |
string | Column in the reference table to aggregate |
aggregate |
string | sum or count |
tolerance |
float | Absolute tolerance |
tolerance_percent |
float | Percent tolerance |
metric |
string | row_count or sum — when sum, the check's own column_name is the column summed |
spike_drop — Anomaly: spike/drop in row count or column sum¶
Detects anomalies by comparing the current metric to recent history.
| Parameter | Type | Description |
|---|---|---|
metric |
string | row_count or sum |
history_days |
int | Days of history to compare against (default 30) |
change_threshold_percent |
float | Percent change that triggers a fail |
change_threshold_zscore |
float | Z-score threshold |
min_history |
int | Minimum history points required before the check can fire |
Column-level checks (summary)¶
null— null percentage ≤threshold_percentunique— duplicate percentage ≤threshold_percent; optionalmax_duplicate_examples- Numeric:
numeric_range,numeric_non_negative,numeric_no_nan_inf,numeric_precision_scale,numeric_outlier_iqr,numeric_outlier_zscore,numeric_default_value,numeric_sign_consistency,numeric_skewness - String:
string_regex,string_length,string_not_empty,string_not_placeholder,string_case,string_reference_table,string_truncation - Date/time:
date_valid,date_range,date_freshness,date_no_future,date_order - Boolean:
boolean_valid,boolean_consistency - Binary:
binary_format,binary_checksum,binary_size,binary_not_empty - JSON/XML:
json_xml_well_formed,json_xml_schema,json_xml_required_keys,json_xml_not_empty - UUID:
uuid_valid_format,uuid_no_placeholder - Geospatial:
geo_valid_coords,geo_well_formed,geo_within_bounds,geo_not_null - Money:
money_range,money_currency_consistency - Other:
allowed_values,composite_unique,cross_field_math,custom
Parameter names follow common conventions across checks: min_count /
max_count for bounds, threshold_percent for percentage-based
thresholds.
Data profiler¶
The profiler is not a check but a discovery step: run a scan on a
connection (see Your first connection and check)
and CatalystData computes per-column statistics — row count, null count,
distinct count, min/max/mean/standard deviation for numeric columns,
min/max length for strings. Use these to decide which checks to add: a
null check where the null count is greater than zero, a unique check
where the distinct count is close to the row count, and so on.
Conventions¶
- Schedules group checks so they run together, acting as test suites. The Results screen shows pass/fail/error/warning and the metric/threshold for each run.
- Reach for
custom(arbitrary SQL) only when nothing above fits — it is the escape hatch, not the starting point.