> ## Documentation Index
> Fetch the complete documentation index at: https://openmetadata-docs-release-watchers.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Column Tests - UI Config | OpenMetadata Quality Config Guide

> Configure column-level data quality tests in the OpenMetadata UI, covering uniqueness, nullness, regex, and range checks.

# Column Tests - UI Config

For table-level tests, see the [Tests UI Overview](/v2.1.x-SNAPSHOT/how-to-guides/data-quality-observability/quality/tests-ui).

Column tests validate the values inside a specific column, rather than the table as a whole. Use them to catch problems like duplicate or missing values, values that fall outside an expected range or pattern, or statistical properties (such as the mean, median, or standard deviation) drifting outside what's expected.

### Column Values to Be Unique

This test checks that every value in a column is distinct, with no duplicates anywhere. It's typically used on primary keys or other identifier columns, where duplicate values would indicate a data integrity problem.

* **Dimension**: `Uniqueness`
* **When to Use**
  * Primary keys or natural identifiers.
  * Fields like email, username, or ID.
* **Behavior**

  | Condition                 | Status |
  | ------------------------- | ------ |
  | All values are unique     | ✅      |
  | Any duplicate value found | ❌      |

<video autoPlay muted loop playsInline className="w-full aspect-video rounded-xl" src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/unique.mp4?fit=max&auto=format&n=syFItHMlJvv5crVx&q=85&s=18383fcf32860e6f76f2ca482d2b1f11" data-path="public/images/how-to-guides/quality/column-test/unique.mp4" />

### Column Values to Be Not Null

This test checks that a column never contains missing (NULL) values. It's useful for required fields where a missing value would break downstream reports or logic. It does not catch empty strings, which are not NULL — use [Column Values to Match Regex](#column-values-to-match-regex) for that.

* **Dimension**: `Completeness`
* **When to Use**
  * Mandatory fields such as `email`, `amount`, `created_at`.
  * Required keys or business-critical columns.
* **Behavior**

  | Condition              | Status |
  | ---------------------- | ------ |
  | No NULLs present       | ✅      |
  | Any NULL value present | ❌      |

<video autoPlay muted loop playsInline className="w-full aspect-video rounded-xl" src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/not-null.mp4?fit=max&auto=format&n=syFItHMlJvv5crVx&q=85&s=9a0f6d91e84e8d71404bae111c74ad31" data-path="public/images/how-to-guides/quality/column-test/not-null.mp4" />

### Column Values to Match Regex

This test checks that every value in a column matches a pattern you define using a regular expression, for example to confirm that a column only contains validly formatted email addresses or postal codes. OpenMetadata uses native database regex support where available, and falls back to SQL `LIKE` semantics on dialects that don't support it.

* **Dimension**: `Validity`
* **When to Use**
  * Emails, zip codes, IDs, structured formats.
* **Behavior**

  | Condition                | Status |
  | ------------------------ | ------ |
  | All values match regex   | ✅      |
  | Any value does not match | ❌      |

<video autoPlay muted loop playsInline className="w-full aspect-video rounded-xl" src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/match-regex.mp4?fit=max&auto=format&n=syFItHMlJvv5crVx&q=85&s=77532c5447e226b0c04e8be4ecc0920f" data-path="public/images/how-to-guides/quality/column-test/match-regex.mp4" />

### Column Values to not Match Regex

This test checks that no value in a column matches a pattern you want to block, defined using a regular expression (`forbiddenRegex`). If even one value matches that forbidden pattern, the test fails, which makes it useful for catching placeholder values, test data, or other known-bad formats that shouldn't reach production. OpenMetadata uses native database regex support where available, and falls back to SQL `NOT LIKE` semantics on dialects that don't support it.

* **Dimension**: `Validity`
* **When to Use**
  * Prevent forbidden values, test strings, or patterns.
* **Behavior**

  | Condition                          | Status |
  | ---------------------------------- | ------ |
  | No value matches forbidden pattern | ✅      |
  | Any value matches the pattern      | ❌      |

<video autoPlay muted loop playsInline className="w-full aspect-video rounded-xl" src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/not-match-regex.mp4?fit=max&auto=format&n=syFItHMlJvv5crVx&q=85&s=284a97efbc665f3998a5091f80f3a91a" data-path="public/images/how-to-guides/quality/column-test/not-match-regex.mp4" />

### Column Values to Be in Set

This test checks that every value in a column comes from a predefined allowlist of acceptable values. It's a good fit for columns that represent a fixed set of categories, such as a status or country code field, where any unexpected value likely points to bad data.

* **Dimension**: `Validity`
* **When to Use**
  * Enum values: `status`, `currency`, `country_code`.
* **Behavior**

  | Condition                                          | Status |
  | -------------------------------------------------- | ------ |
  | All values in set (if `matchEnum = true`)          | ✅      |
  | Any value not in set (if `matchEnum = true`)       | ❌      |
  | Any value from set exists (if `matchEnum = false`) | ✅      |
  | No values from set found (if `matchEnum = false`)  | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/column-values-in-set.gif?s=3bd059b7086831775a22bc416904a0da" alt="Column Values In Set" width="1502" height="720" data-path="public/images/how-to-guides/quality/column-test/column-values-in-set.gif" />

### Column Values to Be Not In Set

This test checks that no value in a column matches an entry in a blocklist of values you want to exclude. It's useful for catching known placeholder or invalid entries, such as `"NA"` or `-1`, that shouldn't appear in clean data.

* **Dimension**: `Validity`
* **When to Use**
  * Block invalid values like `"NA"`, `"Unknown"`, `-1`.
* **Behavior**

  | Condition                          | Status |
  | ---------------------------------- | ------ |
  | No values from forbidden set       | ✅      |
  | Any value from forbidden set found | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/column-values-not-in-set.gif?s=5c11179dcc605843e479d59fa3b70cfa" alt="Column Values Not In Set" width="1502" height="720" data-path="public/images/how-to-guides/quality/column-test/column-values-not-in-set.gif" />

### Column Values to Be Between

This test checks that every value in a column falls within a minimum and maximum range you define. It's commonly used for numeric thresholds such as age, price, score, or percentage, and for date or timestamp ranges when supported by the connector.

* **Dimension**: `Accuracy`
* **When to Use**
  * Numeric thresholds such as age, price, score, or percentage.
  * Date or timestamp ranges when supported by the connector.
* **Behavior**

  | Condition                 | Status |
  | ------------------------- | ------ |
  | Value within `[min, max]` | ✅      |
  | Value \< min or > max     | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/to-be-between.gif?s=d18fd6328407bc0d09aea6f7e8a4a9af" alt="To Be Between" width="1502" height="720" data-path="public/images/how-to-guides/quality/column-test/to-be-between.gif" />

### Column Values Missing Count to Be Equal

This test counts how many values in a column are missing, counting both true NULLs and any strings you've defined as representing a missing value (such as `"NA"` or `"N/A"`), and checks that this count matches a target you expect. It's useful when a small, known number of missing values is acceptable, but you still want to be alerted if that number changes.

* **Dimension**: `Completeness`
* **When to Use**
  * Auditing known missing values.
  * Accounting for `"NA"`, `"N/A"`, `"null"`.
* **Behavior**

  | Condition                      | Status |
  | ------------------------------ | ------ |
  | Missing count = expected value | ✅      |
  | Missing count ≠ expected value | ❌      |

<video autoPlay muted loop playsInline className="w-full aspect-video rounded-xl" src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/missing-count.mp4?fit=max&auto=format&n=syFItHMlJvv5crVx&q=85&s=42c1f5dcdcf819009c86a4ac0b7b552d" data-path="public/images/how-to-guides/quality/column-test/missing-count.mp4" />

### Column Values Lengths to Be Between

This test checks that every string value in a column has a character length within a minimum and maximum range you define. It helps catch values that are unexpectedly too short or too long, which can otherwise break UI display limits or downstream processing.

* **Dimension**: `Accuracy`
* **When to Use**
  * To validate field length constraints like `name`, `address`, or `description`.
  * To catch too-short or too-long values that may break UI or downstream logic.
* **Behavior**

  | Condition                                  | Status |
  | ------------------------------------------ | ------ |
  | All values have length within `[min, max]` | ✅      |
  | Any value length \< min or > max           | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/lengths-to-be-between.gif?s=b29e2afe0d0a927b3ae51320911b5283" alt="Lengths To Be Between" width="800" height="383" data-path="public/images/how-to-guides/quality/column-test/lengths-to-be-between.gif" />

### Column Value Max to Be Between

This test looks at the single highest value in a column and checks that it falls within a range you define. It's a useful cap check for columns like `score`, `amount`, or `age`, where an unusually high maximum often signals bad or unvalidated input.

* **Dimension**: `Accuracy`
* **When to Use**
  * Cap validation for `score`, `amount`, `age`.
* **Behavior**

  | Condition                       | Status |
  | ------------------------------- | ------ |
  | Max value in range `[min, max]` | ✅      |
  | Max \< min or Max > max         | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/max.gif?s=cab093c84f7fd07e7818c912f9b183bf" alt="Max" width="2850" height="1366" data-path="public/images/how-to-guides/quality/column-test/max.gif" />

### Column Value Min to Be Between

This test looks at the single lowest value in a column and checks that it falls within a range you define. It's useful for catching unexpected negative or unusually low values in fields like `discount` or `price`.

* **Dimension**: `Accuracy`
* **When to Use**
  * Threshold validation for `discount`, `price`, and so on.
* **Behavior**

  | Condition                       | Status |
  | ------------------------------- | ------ |
  | Min value in range `[min, max]` | ✅      |
  | Min \< min or Min > max         | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/min.gif?s=e04e2a22b09a17e3421393bfdfa77529" alt="Min" width="2850" height="1366" data-path="public/images/how-to-guides/quality/column-test/min.gif" />

### Column Value Mean to Be Between

This test calculates the average (mean) of all values in a column and checks that it falls within an expected range. It's a good way to spot gradual shifts in your data, such as dataset drift or a pipeline that starts producing systematically different values.

* **Dimension**: `Accuracy`
* **When to Use**
  * Check dataset drift or pipeline behavior.
* **Behavior**

  | Condition                  | Status |
  | -------------------------- | ------ |
  | Mean value in `[min, max]` | ✅      |
  | Mean \< min or Mean > max  | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/mean.gif?s=e13f636f4820c55d5e883a5501b2922c" alt="Mean" width="800" height="383" data-path="public/images/how-to-guides/quality/column-test/mean.gif" />

### Column Value Median to Be Between

This test calculates the median, the middle value when all values are sorted, of a column and checks that it falls within an expected range. Because the median isn't skewed by extreme outliers the way an average can be, it's a good complement to a mean check for fields like income, score, or latency.

* **Dimension**: `Accuracy`
* **When to Use**
  * Median income, score, latency checks.
* **Behavior**

  | Condition                     | Status |
  | ----------------------------- | ------ |
  | Median in range `[min, max]`  | ✅      |
  | Median \< min or Median > max | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/median.gif?s=201d9a1f7cc6e07aff83d24f226ae056" alt="Median" width="2850" height="1366" data-path="public/images/how-to-guides/quality/column-test/median.gif" />

### Column Values Sum to Be Between

This test adds up every value in a column and checks that the total falls within a range you define. It's commonly used for financial or volume metrics, such as total revenue or units sold, where an unexpected total often points to missing or duplicated records.

* **Dimension**: `Accuracy`
* **When to Use**
  * Revenue, units sold, total scores, and so on.
* **Behavior**

  | Condition                 | Status |
  | ------------------------- | ------ |
  | Sum in range `[min, max]` | ✅      |
  | Sum \< min or Sum > max   | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/sum.gif?s=288e5bdfbf047a6c1a387e810e42928f" alt="Sum" width="1502" height="720" data-path="public/images/how-to-guides/quality/column-test/sum.gif" />

### Column Values Standard Deviation to Be Between

This test measures how spread out the values in a column are, using standard deviation, and checks that this spread falls within an acceptable range. It's useful for catching data that has suddenly become far more variable or far more uniform than expected.

* **Dimension**: `Accuracy`
* **When to Use**
  * Monitoring variance in numeric datasets.
* **Behavior**

  | Condition               | Status |
  | ----------------------- | ------ |
  | Std Dev in `[min, max]` | ✅      |
  | Std Dev \< min or > max | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/standard-deviation.gif?s=284414bf4596c89efe3e1c31a7232d3d" alt="Standard Deviation" width="1502" height="720" data-path="public/images/how-to-guides/quality/column-test/standard-deviation.gif" />

### Column Values To Be At Expected Location

This test checks that latitude and longitude values in a column fall within a defined geographic area, such as a radius around an expected location. It's useful for validating address or location data, for example confirming that store or delivery coordinates fall within the region they're supposed to.

* **Dimension**: `Accuracy`
* **When to Use**
  * Verifying address coordinates.
  * Mapping regional data.
* **Behavior**

  | Condition                                      | Status |
  | ---------------------------------------------- | ------ |
  | Coordinates within buffer of expected location | ✅      |
  | Any record outside allowed radius              | ❌      |

<img src="https://mintcdn.com/openmetadata-docs-release-watchers/syFItHMlJvv5crVx/public/images/how-to-guides/quality/column-test/expected-location.gif?s=fc7f56080d58f144f48ebdc7bee657fa" alt="Expected Location" width="1502" height="720" data-path="public/images/how-to-guides/quality/column-test/expected-location.gif" />
