# Check data quality

Shape / inspect

data-quality rule, assertion, test, constraint or schema check

Page: <https://meridian.online/operations/check-data-quality>

## Status

Runs as a SQL step.

arcform carries it as a `sql:` step today.

## The DuckDB step

rows failing each rule, counted

It reads the `orders` and `customers` tables the proofs share. Create them first:

```sql
CREATE TABLE orders AS SELECT * FROM (VALUES
  (1,  'Alice Ng',      'north', DATE '2026-01-03', 120.00, 'widget', 'a|b',   '{"channel":"web","items":[1,2]}'),
  (2,  'alice ng',      'north', DATE '2026-01-05',  80.50, 'gadget', 'b',     '{"channel":"shop","items":[3]}'),
  (3,  'Bob  Okafor',   'south', DATE '2026-01-05', 300.00, 'widget', 'a|c',   '{"channel":"web","items":[4,5,6]}'),
  (4,  'Carla Díaz',    'east',  DATE '2026-01-09',  NULL,  'gizmo',  NULL,    '{"channel":"web","items":[]}'),
  (5,  'Bob Okafor',    'south', DATE '2026-01-12',  45.25, 'gadget', 'c',     '{"channel":"phone","items":[7]}'),
  (6,  'Dev Patel',     'west',  DATE '2026-01-12', 510.00, 'widget', 'a',     '{"channel":"web","items":[8,9]}'),
  (7,  'Carla Diaz',    'east',  DATE '2026-01-20',  99.99, 'gizmo',  'b|c',   '{"channel":"shop","items":[10]}'),
  (8,  'Dev Patel',     'west',  DATE '2026-02-02', 510.00, 'widget', 'a',     '{"channel":"web","items":[8,9]}'),
  (9,  'Eve Larsen',    NULL,    DATE '2026-02-03',  15.00, 'gadget', NULL,    '{"channel":"web","items":[11]}'),
  (10, 'Alice Ng',      'north', DATE '2026-02-10', 220.00, 'gizmo',  'a|b|c', '{"channel":"phone","items":[12,13]}')
) t(order_id, customer, region, order_date, amount, product, tags, meta);

CREATE TABLE customers AS SELECT * FROM (VALUES
  ('Alice Ng',    'retail',    DATE '2025-06-01', 52.52, 13.40),
  ('Bob Okafor',  'wholesale', DATE '2025-09-15', 48.85,  2.35),
  ('Carla Diaz',  'retail',    DATE '2025-11-30', 40.42, -3.70),
  ('Frank Moore', 'retail',    DATE '2026-01-01', 51.51, -0.13)
) t(customer, segment, joined, lat, lon);
```

Then run the statement:

```sql
CREATE TEMP TABLE result AS
SELECT 'amount is present' AS rule, count(*) FILTER (WHERE amount IS NULL) AS failing, count(*) AS checked FROM orders
UNION ALL
SELECT 'order_id is unique', count(*) - count(DISTINCT order_id), count(*) FROM orders
UNION ALL
SELECT 'customer is known', count(*) FILTER (WHERE c.customer IS NULL), count(*) FROM orders o LEFT JOIN customers c USING (customer);
SELECT * FROM result;
SELECT CASE WHEN ((SELECT map_from_entries(list((rule, failing) ORDER BY rule)) = MAP {'amount is present': 1, 'customer is known': 6, 'order_id is unique': 0} FROM result)) THEN 'as expected' ELSE error('the rules did not count 1 missing amount, 6 unknown customers and 0 repeated ids') END AS verdict;
```

It needs nothing installed beyond DuckDB itself.

## Variants

- [Compare two tables](https://meridian.online/operations/check-data-quality/compare-two-tables): Check that a table matches another or an expected result, row for row, by row count or by a summary figure.
- [Validate files against a schema](https://meridian.online/operations/check-data-quality/validate-files-against-a-schema): Check that XML, JSON or CSV content or files are well-formed and conform to a schema such as XSD, DTD or JSON Schema.
- [Flag invalid values](https://meridian.online/operations/check-data-quality/flag-invalid-values): Keep every row and add a column marking whether its value is valid, such as an error, a malformed geometry or a bad email address.
- Other checks: Checks on things other than data, such as a learner's settings.
- [Find outliers](https://meridian.online/operations/check-data-quality/find-outliers): Find values far from the rest of their column by interquartile range or z-score, and flag, remove or reject them.
- Check every row against a rule: Test each row against a rule, such as not null, unique, in a list, in a range or matching a pattern, and fail when any row breaks it.
- [Report a quality scorecard](https://meridian.online/operations/check-data-quality/report-a-quality-scorecard): Run a set of rules and return one row per rule with its outcome, instead of stopping the run.
- [Split valid from invalid rows](https://meridian.online/operations/check-data-quality/split-valid-from-invalid-rows): Send the rows that pass the rules to one output and the rows that fail to another, instead of stopping the run.
- [Check a table's structure](https://meridian.online/operations/check-data-quality/check-a-tables-structure): Check that a table has the expected columns, names and types, failing or conforming it when it does not.
- [Check a table-wide measure](https://meridian.online/operations/check-data-quality/check-a-table-wide-measure): Compute one measure over the whole table, such as the row count, share of nulls, mean or age of the newest row, and check it against a threshold.

## What other tools call it

Meridian's classification; an independent blind rating agreed on 86.2% of 312 rows (exact class, version 2).

- Azure Data Factory: [`Assert`](https://learn.microsoft.com/en-us/azure/data-factory/data-flow-assert) (read 2026-09-27)
- Alteryx Designer: [`Expect Equal`](https://help.alteryx.com/current/en/designer/tools/developer/expect-equal-tool.html) (read 2026-09-27)
- Alteryx Designer: [`Test`](https://help.alteryx.com/current/en/designer/tools/developer/test-tool.html) (read 2026-09-27)
- Bruin: [`Accepted values`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Custom Checks`](https://getbruin.com/docs/bruin/quality/custom.html) (read 2026-09-27)
- Bruin: [`Max`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Min`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Negative`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Non-Negative`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Not-Null`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Pattern`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Positive`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Relationships`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Unique`](https://getbruin.com/docs/bruin/quality/available_checks.html) (read 2026-09-27)
- Bruin: [`Unit Tests`](https://getbruin.com/docs/bruin/quality/unit-tests.html) (read 2026-09-27)
- dbt-utils: [`Singular data tests`](https://docs.getdbt.com/docs/build/data-tests) (read 2026-09-27)
- dbt-utils: [`accepted_range`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`accepted_values`](https://docs.getdbt.com/reference/resource-properties/data-tests) (read 2026-09-27)
- dbt-utils: [`at_least_one`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`cardinality_equality`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`equal_rowcount`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`equality`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`expression_is_true`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`fewer_rows_than`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`mutually_exclusive_ranges`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`not_accepted_values`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`not_constant`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`not_empty_string`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`not_null`](https://docs.getdbt.com/reference/resource-properties/data-tests) (read 2026-09-27)
- dbt-utils: [`not_null_proportion`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`recency`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`relationships`](https://docs.getdbt.com/reference/resource-properties/data-tests) (read 2026-09-27)
- dbt-utils: [`relationships_where`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`sequential_values`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`unique`](https://docs.getdbt.com/reference/resource-properties/data-tests) (read 2026-09-27)
- dbt-utils: [`unique_combination_of_columns`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- Duckle: [`Assert`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- Duckle: [`Check Empty Geometry`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Data Contract`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Expectations`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Freshness Check (SLA Gate)`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Not-Null Check`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- Duckle: [`Outlier Detection`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Range Check`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- Duckle: [`Referential Integrity`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Regex Match`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- Duckle: [`Run Baseline`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Schema Validate`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- Duckle: [`Uniqueness Check`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- Duckle: [`Validate Geometry`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- EasyMorph: [`Halt on data type mismatch`](https://help.easymorph.com/doku.php?id=transformations:haltontypemismatch) (read 2026-09-27)
- EasyMorph: [`Verify data in another table`](https://help.easymorph.com/doku.php?id=transformations:verify) (read 2026-09-27)
- AWS Glue: [`AggregateMatch`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`ColumnCount`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`ColumnDataType`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`ColumnExists`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`ColumnLength`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`ColumnNamesMatchPattern`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`ColumnValues`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`Completeness`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`CustomSql`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`DataFreshness`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`DistinctValuesCount`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`Evaluate Data Quality`](https://docs.aws.amazon.com/glue/latest/dg/data-quality-gs-studio.html) (read 2026-09-27)
- AWS Glue: [`EvaluateDataQuality`](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-transforms-EvaluateDataQuality.html) (read 2026-09-27)
- AWS Glue: [`FileFreshness`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`FileMatch`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`FileSize`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`FileUniqueness`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`IsComplete`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`IsPrimaryKey`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`IsUnique`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`Mean`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`ReferentialIntegrity`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`RowCount`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`RowCountMatch`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`SchemaMatch`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`StandardDeviation`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`Sum`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`UniqueValueRatio`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- AWS Glue: [`Uniqueness`](https://docs.aws.amazon.com/glue/latest/dg/dqdl-rule-types.html) (read 2026-09-27)
- Apache Hop: [`Check if XML file is well-formed`](https://hop.apache.org/manual/latest/workflow/actions/xmlwellformed.html) (read 2026-09-27)
- Apache Hop: [`Credit card validator`](https://hop.apache.org/manual/latest/pipeline/transforms/creditcardvalidator.html) (read 2026-09-27)
- Apache Hop: [`DTD validator`](https://hop.apache.org/manual/latest/workflow/actions/dtdvalidator.html) (read 2026-09-27)
- Apache Hop: [`Data Validator`](https://hop.apache.org/manual/latest/pipeline/transforms/validator.html) (read 2026-09-27)
- Apache Hop: [`Database value validation`](https://hop.apache.org/manual/next/pipeline/transforms/databasevaluevalidation.html) (read 2026-09-27)
- Apache Hop: [`Evaluate rows number in a table`](https://hop.apache.org/manual/latest/workflow/actions/evaluatetablecontent.html) (read 2026-09-27)
- Apache Hop: [`Mail validator`](https://hop.apache.org/manual/latest/workflow/actions/mailvalidator.html) (read 2026-09-27)
- Apache Hop: [`XSD Validator`](https://hop.apache.org/manual/latest/pipeline/transforms/xsdvalidator.html) (read 2026-09-27)
- Apache Hop: [`XSD validator`](https://hop.apache.org/manual/latest/workflow/actions/xsdvalidator.html) (read 2026-09-27)
- KNIME Analytics Platform: [`JSON Schema Validator`](https://api.hub.knime.com/nodes/*0kEahkdYSSXawvOu?details=full) (read 2026-09-27)
- KNIME Analytics Platform: [`KNIME Testing Framework UI (extension)`](https://api.hub.knime.com/extensions/org.knime.features.testing.application) (read 2026-09-27)
- KNIME Analytics Platform: [`Numeric Outliers`](https://api.hub.knime.com/nodes/*KJTmGCLiAl3tpEcj?details=full) (read 2026-09-27)
- KNIME Analytics Platform: [`Numeric Outliers (Apply)`](https://api.hub.knime.com/nodes/*Nx_LJNtSi3lhr1Ok?details=full) (read 2026-09-27)
- KNIME Analytics Platform: [`Reference Table Validator`](https://api.hub.knime.com/nodes/*Y4pjF_CT2oL_sTHE?details=full) (read 2026-09-27)
- KNIME Analytics Platform: [`Table Structure Validator`](https://api.hub.knime.com/nodes/*PYO9539EU9baYWtO?details=full) (read 2026-09-27)
- KNIME Analytics Platform: [`Table Validator`](https://api.hub.knime.com/nodes/*klw7X6aAyIqQvpF8?details=full) (read 2026-09-27)
- Apache NiFi: [`ScriptedValidateRecord`](https://nifi.apache.org/components/org.apache.nifi.processors.script.ScriptedValidateRecord/) (read 2026-09-27)
- Apache NiFi: [`ValidateCsv`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.ValidateCsv/) (read 2026-09-27)
- Apache NiFi: [`ValidateJson`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.ValidateJson/) (read 2026-09-27)
- Apache NiFi: [`ValidateRecord`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.ValidateRecord/) (read 2026-09-27)
- Apache NiFi: [`ValidateXml`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.ValidateXml/) (read 2026-09-27)
- OpenRefine: [`Duplicates facet`](https://openrefine.org/docs/manual/facets#duplicates-facet) (read 2026-09-27)
- OpenRefine: [`Facet by error`](https://openrefine.org/docs/manual/facets#facet-by-error) (read 2026-09-27)
- OpenRefine: [`Issue detection`](https://openrefine.org/docs/manual/wikibase/overview#issue-detection) (read 2026-09-27)
- Pentaho Data Integration: [`Credit card validator`](https://docs.pentaho.com/pdia-data-integration/9.3-data-integration/pdi-transformation-steps-reference-overview) (read 2026-09-27)
- Pentaho Data Integration: [`Data Validator`](https://docs.pentaho.com/pdia-data-integration/9.3-data-integration/pdi-transformation-steps-reference-overview) (read 2026-09-27)
- Pentaho Data Integration: [`Mail Validator`](https://docs.pentaho.com/pdia-data-integration/9.3-data-integration/pdi-transformation-steps-reference-overview) (read 2026-09-27)
- Pentaho Data Integration: [`XSD Validator`](https://docs.pentaho.com/pdia-data-integration/9.3-data-integration/pdi-transformation-steps-reference-overview) (read 2026-09-27)
- Polars: [`DataFrame.is_sorted`](https://docs.pola.rs/api/python/stable/reference/dataframe/descriptive.html) (read 2026-09-27)
- Polars: [`DataFrame.match_to_schema`](https://docs.pola.rs/api/python/stable/reference/dataframe/modify_select.html) (read 2026-09-27)
- Polars: [`polars.testing asserts (family)`](https://docs.pola.rs/api/python/stable/reference/testing.html) (read 2026-09-27)
- Power Query M: [`Table.Contains`](https://learn.microsoft.com/en-us/powerquery-m/table-functions#membership) (read 2026-09-27)
- Power Query M: [`Table.ContainsAll`](https://learn.microsoft.com/en-us/powerquery-m/table-functions#membership) (read 2026-09-27)
- Power Query M: [`Table.ContainsAny`](https://learn.microsoft.com/en-us/powerquery-m/table-functions#membership) (read 2026-09-27)
- Power Query M: [`Table.HasColumns`](https://learn.microsoft.com/en-us/powerquery-m/table-functions#column-operations) (read 2026-09-27)
- Power Query M: [`Table.IsDistinct`](https://learn.microsoft.com/en-us/powerquery-m/table-functions#membership) (read 2026-09-27)
- Power Query M: [`Table.MatchesAllRows`](https://learn.microsoft.com/en-us/powerquery-m/table-functions#row-operations) (read 2026-09-27)
- Power Query M: [`Table.MatchesAnyRows`](https://learn.microsoft.com/en-us/powerquery-m/table-functions#row-operations) (read 2026-09-27)
- RapidMiner Studio: [`Check Model Conformance`](https://docs.rapidminer.com/latest/studio/operators/extensions/Operator%20Toolbox/models/check_model_conformance.html) (read 2026-09-27)
- RapidMiner Studio: [`Tukey Test`](https://docs.rapidminer.com/latest/studio/operators/extensions/Operator%20Toolbox/outliers/tukey_test.html) (read 2026-09-27)
- Apache SeaTunnel: [`DataValidator`](https://seatunnel.apache.org/docs/2.3.13/transforms/data-validator) (read 2026-09-27)
- SQLMesh: [`Generic audits`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`Unit tests`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/tests.md) (read 2026-09-27)
- SQLMesh: [`User-defined audits (AUDIT)`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`accepted_range`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`accepted_values`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`at_least_one`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`chi_square`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`forall`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`kl_divergence`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`match_like_pattern_list`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`match_regex_pattern_list`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`mean_in_range`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`mutually_exclusive_ranges`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`not_accepted_values`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`not_constant`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`not_empty_string`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`not_match_like_pattern_list`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`not_match_regex_pattern_list`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`not_null`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`not_null_proportion`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`number_of_rows`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`sequential_values`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`stddev_in_range`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`string_length_between`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`string_length_equal`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`unique_combination_of_columns`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`unique_values`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`valid_email`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`valid_http_method`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`valid_url`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`valid_uuid`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- SQLMesh: [`z_score`](https://github.com/SQLMesh/sqlmesh/blob/23b237cea7218cc8f338b89c14f0957394a0003b/docs/concepts/audits.md) (read 2026-09-27)
- subtoken: [`subtoken_is_truncated`](https://github.com/meridian-online/subtoken/blob/ceb61bd796b15b4d54ca3bb2db8a74792d67026e/README.md) (read 2026-09-27)
- Tableau Prep: [`Assign data role`](https://help.tableau.com/current/prep/en-us/prep_validate_data.htm) (read 2026-09-27)
- Tableau Prep: [`Publish as Data Role`](https://help.tableau.com/current/prep/en-us/prep_validate_data.htm) (read 2026-09-27)
- Talend: [`Database valid and invalid rows components (family)`](https://help.qlik.com/talend/en-US/components/8.0/About) (read 2026-09-27)
- Talend: [`tDQRules/tDataQualityRules`](https://help.qlik.com/talend/en-US/components/8.0/validation/validation-component) (read 2026-09-27)
- Talend: [`tDTDValidator`](https://help.qlik.com/talend/en-US/components/8.0/xml-validation/xml-validation-component) (read 2026-09-27)
- Talend: [`tJSONValidator`](https://help.qlik.com/talend/en-US/components/8.0/json-validation/json-validation-component) (read 2026-09-27)
- Talend: [`tMultiPatternCheck`](https://help.qlik.com/talend/en-US/components/8.0/pattern-validation/pattern-validation-component) (read 2026-09-27)
- Talend: [`tPatternCheck`](https://help.qlik.com/talend/en-US/components/8.0/pattern-validation/pattern-validation-component) (read 2026-09-27)
- Talend: [`tSchemaComplianceCheck`](https://help.qlik.com/talend/en-US/components/8.0/validation/validation-component) (read 2026-09-27)
- Talend: [`tThresholdViolationAlert`](https://help.qlik.com/talend/en-US/components/8.0/reporting/reporting-component) (read 2026-09-27)
- Talend: [`tVerifyEmail`](https://help.qlik.com/talend/en-US/components/8.0/email-validation/email-validation-component) (read 2026-09-27)
- Talend: [`tXSDValidator`](https://help.qlik.com/talend/en-US/components/8.0/xml-validation/xml-validation-component) (read 2026-09-27)
- Trifacta: [`Extract mismatched`](https://help.alteryx.com/aac/en/trifacta-classic/reference/transformation-reference.html) (read 2026-09-27)
- VisiData: [`assert-cell`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/pyobj.py#L308) (read 2026-09-23)
- VisiData: [`assert-expr`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/pyobj.py#L306) (read 2026-09-23)
- VisiData: [`assert-expr-row`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/pyobj.py#L307) (read 2026-09-23)
- Yggdrasil Decision Forests: [`validate_hyperparameters`](https://github.com/google/yggdrasil-decision-forests/blob/0a54b57c95ff0cf42ecf0310ace0513a4f32cb65/yggdrasil_decision_forests/port/python/ydf/learner/generic_learner.py) (read 2026-09-27)
