tableCustomSQLQuery is the one definition that keeps its operator — a user-authored query can legitimately assert in either direction ("must return at least 1 row"). It gains only a unit.
Scope
ABSOLUTE (default, and today's meaning): evaluate_threshold(threshold, operator, len_rows) — unchanged.
PERCENTAGE: apply the same operator to len_rows / rowCount * 100 instead of the raw count.
- Denominator must be computed when
PERCENTAGE is set, regardless of computePassedFailedRowCount.
threshold and operator keep their stored values and meanings — no rename, no migration of existing test cases.
Acceptance
Depends on the row-tolerance sub-task.
Design spec: docs/plans/2026-09-11-dq-failure-thresholds.md. Parent epic: #16301.
tableCustomSQLQueryis the one definition that keeps itsoperator— a user-authored query can legitimately assert in either direction ("must return at least 1 row"). It gains only a unit.Scope
ABSOLUTE(default, and today's meaning):evaluate_threshold(threshold, operator, len_rows)— unchanged.PERCENTAGE: apply the same operator tolen_rows / rowCount * 100instead of the raw count.PERCENTAGEis set, regardless ofcomputePassedFailedRowCount.thresholdandoperatorkeep their stored values and meanings — no rename, no migration of existing test cases.Acceptance
thresholdUnit) behave identicallyoperator: <=+PERCENTAGE+1fails when the query returns more than 1% of table rowsDepends on the row-tolerance sub-task.
Design spec:
docs/plans/2026-09-11-dq-failure-thresholds.md. Parent epic: #16301.