Skip to content

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_percent
  • unique — duplicate percentage ≤ threshold_percent; optional max_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.