How Not Empty Checks Work
Definition
Asserts that a text or array field is not empty.
Overview
The Not Empty rule reports values that are present but hold nothing usable. On a text field, a value passes when it contains at least one character that is not a space, so an empty string and a value made only of spaces both fail.
It is the natural companion to Not Null rather than a replacement for it. Not Null asks whether a value exists; Not Empty asks whether the value that exists says anything. A column can pass one and fail the other, which is why systems that write '' instead of leaving a column unset look complete in every count and still break every join and report downstream.
Typical use cases:
- Confirm a required text field carries real content, not an empty string.
- Catch values that a form or an import filled in with spaces.
- Verify that a list field arrived with at least one entry.
Field Scope
Single: The rule evaluates one field per check. It accepts String fields and Array fields, and behaves differently on each (see Text Fields and Array Fields Are Judged Differently).
Accepted Types
| Type | Supported |
|---|---|
String |
|
Array |
Anomaly Types
| Type | Supported |
|---|---|
| Record Flag inconsistencies at the row level |
|
| Shape Flag inconsistencies in the overall patterns and distributions of a field |
Evaluation Flow
Every Not Empty check follows the same four-step evaluation flow:
- Apply the filter clause. If the check has a
filterset, only rows matching the filter expression continue to the next step. Rows outside the filter are ignored and cannot contribute to the violation count. - Read the field on the row. The platform reads the value being evaluated.
- Decide whether it holds anything. On a text field, the value passes when it contains at least one character that is not a space. On an array field, it passes when the array holds at least one element. A NULL value passes in both cases.
- Apply coverage. At 100% coverage, any failing row causes the check to fail. Below 100% coverage, the check fails only when the passing fraction drops below the threshold (see Coverage and Tolerance).
Spaces Do Not Count as Content
Spaces are stripped before the value is judged, so "" and " " fail alike. That is usually what people mean by empty, and it is the part a plain <> '' comparison in SQL misses.
Only the space character is stripped. A tab, a newline, or a non-breaking space survives the trim and counts as content, so a value made only of tabs passes the check.
A value that is genuinely a single space and means something, which is rare but happens in fixed-width feeds, will therefore be reported. Exclude those rows with a Filter Clause if that is the case.
NULL Handling
The check passes NULL values: a row where the field is unset is not counted as a violation. Not Empty only judges values that are present.
That surprises people, because "not empty" sounds like it should cover "not missing" too. It does not, deliberately: the two conditions are separate, and each has its own rule. Pair Not Empty with Not Null on the same field when the column must be both present and meaningful, which is the usual requirement.
Text Fields and Array Fields Are Judged Differently
On a text field the rule looks inside the value: it must contain a non-space character. Violations are reported per row, so each offending record gets its own anomaly at 100% coverage.
On an array field the rule looks at the list itself: it must hold at least one element. It does not inspect what those elements contain, so an array holding a single empty string passes. Violations are reported for the field as a whole rather than row by row.
When the elements themselves must carry content, add a Min Length check on the same array field with Array Element Context enabled, which is what makes it measure each element's length. Without that option, Min Length on an array measures how many elements the array holds, so an array of blank strings passes it too.
Empty Is Not the Same as Zero or False
The rule applies to text and lists only; the field picker offers no numeric or boolean columns. A 0 and a false are complete values, not empty ones, and treating them as missing is a data-modelling question rather than a quality rule. For a numeric column that must not be a placeholder, Positive or Between states the real constraint.
The Filter Clause
The filter clause is a SQL WHERE expression applied before the evaluation. Filtered-out rows are ignored entirely (they cannot trigger a violation and are not counted in the totals).
When a filter is set, both the Record Anomaly and the Shape Anomaly messages end with [filter: <expression>] so the evaluated scope is visible in the alert.
Coverage and Tolerance
Coverage is a fractional value between 0 and 1 that defines the minimum fraction of evaluated rows that must pass:
1.0(100%, default): every row in the filtered set must pass. Any failing row causes the check to fail. This is the strictest setting.< 1.0: the check tolerates a fraction of rows failing. The check fails only when the fraction of passing rows drops below the threshold.
Lower coverage values are useful when a small, known fraction of failures is expected. Use coverage carefully: a 0.5% tolerance can mask a real regression that happens to fall just under the threshold.
See Also
-
Anomaly Reporting
The anomalies the check produces on text and on array fields, and how the offending value appears in Source Records.
-
Examples
Three production scenarios with sample data, anomaly messages, and the SQL equivalent of what the check evaluates.
-
Best Practices
Guidelines for pairing it with Not Null, choosing between text and array behavior, and fixing blankness at the source.
-
Permissions
The team permission each action needs: view, create, edit, archive, restore, and delete.