Library Quality Rules
A type: library rule is a predefined, portable check selected with a metric name. Unlike SQL rules, you don't write a query — the CLI compiles the metric into dialect-specific SQL for the selected server, so the same rule works across all backends.
quality:
- type: library
metric: nullValues
mustBe: 0
Each rule combines a metric, optional arguments, and exactly one comparator (mustBe, mustBeBetween, …).
Supported metrics
| Metric | Level | Measures | Arguments |
|---|---|---|---|
rowCount | schema | Number of rows in the table | — |
duplicateValues | schema or property | Number of duplicate values | schema-level: properties (list of columns to check together) |
nullValues | property | Number of NULL values | — |
missingValues | property | Number of missing values (NULL plus the values you treat as missing) | missingValues (list of values counted as missing, e.g. ['', 'N/A']) |
invalidValues | property | Number of values not in an allow-list | validValues (list of permitted values) |
nullValues, missingValues, and invalidValues are only supported at the property level. rowCount is schema level. duplicateValues works at either level.
Examples
Row count (schema level):
schema:
- name: orders
quality:
- type: library
metric: rowCount
mustBeGreaterThan: 0
No nulls in a property:
quality:
- type: library
metric: nullValues
mustBe: 0
Missing values — treat empty string and N/A as missing, in addition to NULL:
quality:
- type: library
metric: missingValues
arguments:
missingValues: [null, '', 'N/A']
mustBe: 0
Invalid values — the value must be one of an allow-list:
quality:
- type: library
metric: invalidValues
arguments:
validValues: ['CX-263-DU', 'IK-894-MN', 'ER-399-JY']
mustBe: 0
Duplicate values across a set of columns (schema level):
schema:
- name: orders
quality:
- type: library
metric: duplicateValues
arguments:
properties: [order_id, line_number]
mustBe: 0
Comparators
Use exactly one comparator to define the threshold:
| Comparator | Passes when the metric… |
|---|---|
mustBe | equals the value |
mustNotBe | does not equal the value |
mustBeGreaterThan / mustBeGreaterOrEqualTo | is above a lower bound |
mustBeLessThan / mustBeLessOrEqualTo | is below an upper bound |
mustBeBetween / mustNotBeBetween | is inside / outside a [min, max] range |
Percentage thresholds
For the count-of-bad-rows metrics (nullValues, missingValues, invalidValues), set unit: percent to compare against a percentage of rows instead of an absolute count:
quality:
- type: library
metric: nullValues
unit: percent
mustBeLessThan: 1 # fewer than 1% of rows are null
unit: percent is ignored (with a warning) for metrics that are not count-of-bad-rows.