# Create a Check

Source: https://userguide.qualytics.io/data-quality-checks/checks/how-tos/managing/create-a-check/

*Requires the Data Observability (DO) module.*

*Requires the Data Quality (DQ) module.*

Create a check of any rule type with the check form. Every rule type uses the same form and the same steps. Only the fields under **Target** and **Properties** change with the rule. For the fields of one rule type, see [Create a Check by Rule Type](https://userguide.qualytics.io/data-quality-checks/checks/how-tos/managing/create-a-check/#create-a-check-by-rule-type).

> **Note: Permission Required**
>
> Creating a check as Draft requires the **Drafter** team permission on its datastore. Creating it as Active requires the **Author** team permission. Either way, your organization needs the module for the rule type. See [Team Permissions](https://userguide.qualytics.io/settings/access/teams/team-permissions/overview/).

> **Tip: Show me how**
>
> The app can walk you through this. Click **Show me how**  in the check creation form's header, or press `H` while it is open, and the **Add a Check** walkthrough highlights each step while you fill in the real form.

> **Tip: Let AgentQ fill in the form**
>
> When [AgentQ](https://userguide.qualytics.io/agentq/getting-started/) is configured and its data-sharing level is **Metadata shared** or higher, the **Check Assistant** panel next to the form can write the check for you: describe the rule in plain language, or pick one of its suggested prompts, and apply the configuration it proposes. Review the fields before you save.

## Field Reference

The form has the same sections for every rule type. A field shows only when the rule type you picked uses it, so a check on a whole table, for example, has no **Field** and no **Coverage**. The values that belong to one rule type live under **Properties**, and each rule type's own page explains them. See [Create a Check by Rule Type](https://userguide.qualytics.io/data-quality-checks/checks/how-tos/managing/create-a-check/#create-a-check-by-rule-type).

### Target

What the check evaluates: the rule, where it runs, and which records it looks at.

| Field | Required | Description |
| --- | --- | --- |
| **Associate with a Check template** | No | A toggle shown when your organization has check templates. Turn it on to pick a **Template** instead of a **Rule Type**: the check takes the template's settings and stays linked to it. A **Locked** template keeps its settings on the check and passes later changes to it. An **Unlocked** template lets you change them, and later changes to the template do not reach the check. See [How Templates Work](https://userguide.qualytics.io/data-quality-checks/templates/deep-dive/how-it-works/). |
| **Rule Type** | Yes | The rule the check applies, picked from groups such as Single Field, Multiple Fields, and Calculated. It decides which of the other fields appear. A deprecated rule type shows a warning when you pick it. |
| **Table / File** | Yes | The table or file the check runs on. The label follows the datastore, so it reads **Table** on a database and **File** on a file storage. Already filled in when you start from a table, file, or field. **Add Computed Table / File**  creates a computed table or file from the form when none is selected yet. |
| **Field** or **Fields** | Yes | The field, or fields, the rule applies to. Rules on one field show **Field**, and rules that take several fields show **Fields**. Already filled in when you start from a field. Rules that evaluate the table as a whole have none. |
| **Fields** (expression rules) | No | On rules that evaluate an expression you write, the fields are worked out from the expression when you leave this empty. Selecting fields replaces that list. |
| **Filter Clause** | No | A Spark SQL `WHERE` condition that limits the records the check evaluates, such as `country = 'US'`. Leave it empty to evaluate every record. |
| **Custom Anomaly Description** | No | A toggle under **Advanced**. Turn it on and pick a field of the table or file: the anomaly then shows that field's value from the failing record as its description, instead of the one Qualytics writes. |

### Properties

The values the rule type needs, such as a minimum, a pattern, a list of expected values, or another table to compare with. They are different for every rule type, and some rule types have none. See [Create a Check by Rule Type](https://userguide.qualytics.io/data-quality-checks/checks/how-tos/managing/create-a-check/#create-a-check-by-rule-type).

### Pass Criteria

| Field | Required | Description |
| --- | --- | --- |
| **Coverage** | Yes | A slider that sets the percentage of evaluated records that must satisfy the rule for the check to pass, shown as "Must be true for 100% of records". Starts at 100%. Lower it to tolerate a share of failing records. Rules that evaluate the table as a whole have no coverage. |

### Impact

| Field | Required | Description |
| --- | --- | --- |
| **Metrics** | No | Impact metrics that turn the failed records into one number each, such as the total amount of the failing orders, to show how big a failure is. Click **Add your first impact metric**  to add the first one, then **Add Impact Metric**  for each one after it, up to 10. Only rule types that flag individual records offer them. See [Impact Metrics](https://userguide.qualytics.io/data-quality-checks/checks/deep-dive/impact-metrics/). |

### Ownership

| Field | Required | Description |
| --- | --- | --- |
| **Owner** | Yes | The user responsible for the check. Already filled in with you. The list shows users with at least the **Drafter** team permission on the datastore. See [Check Ownership](https://userguide.qualytics.io/data-quality-checks/checks/deep-dive/ownership/). |
| **Anomaly assignee** | No | The user who is automatically assigned to every new anomaly the check finds. The list shows users with at least the **Viewer** team permission on the datastore. |

### Metadata

| Field | Required | Description |
| --- | --- | --- |
| **Description** | Yes | What the check verifies and why, written in a Markdown editor. It is the text your team reads on the check and on its anomalies. With an AI integration configured, **Suggest a description**  writes one from the check's definition. |
| **Tags** | No | Labels that group checks for filtering, notifications, and importance. A tag can raise or lower the check's importance. See [Check Importance](https://userguide.qualytics.io/data-quality-checks/checks/deep-dive/importance/). |
| **Additional Metadata** | No | Your own key-value pairs, such as a ticket number or a business owner, added in a dialog with **Add New Meta**. |

## Create a Check by Rule Type

Each rule type has its own **Create a Check** page with the fields under **Properties** and a filled-in example. The rule types are listed in the same order as the rule type picker. Each link opens in a new tab.

| Rule Type | Group | What It Checks |
| --- | --- | --- |
| [After Date Time](https://userguide.qualytics.io/data-quality-checks/after-date-time/how-tos/create-a-check/) | Single Field | Asserts that the field is a timestamp later than a specific date and time. |
| [Before Date Time](https://userguide.qualytics.io/data-quality-checks/before-date-time/how-tos/create-a-check/) | Single Field | Asserts that the field is a timestamp earlier than a specific date and time. |
| [Between](https://userguide.qualytics.io/data-quality-checks/between/how-tos/create-a-check/) | Single Field | Asserts that values are equal to or between two numbers. |
| [Between Times](https://userguide.qualytics.io/data-quality-checks/between-times/how-tos/create-a-check/) | Single Field | Asserts that values are equal to or between two dates or times. |
| [Contains Credit Card](https://userguide.qualytics.io/data-quality-checks/contains-credit-card/how-tos/create-a-check/) | Single Field | Asserts that the values contain a credit card number. |
| [Contains Email](https://userguide.qualytics.io/data-quality-checks/contains-email/how-tos/create-a-check/) | Single Field | Asserts that the values contain email addresses. |
| [Contains Social Security Number](https://userguide.qualytics.io/data-quality-checks/contains-social-security-number/how-tos/create-a-check/) | Single Field | Asserts that the values contain social security numbers. |
| [Contains Url](https://userguide.qualytics.io/data-quality-checks/contains-url/how-tos/create-a-check/) | Single Field | Asserts that the values contain valid URLs. |
| [Distinct Count](https://userguide.qualytics.io/data-quality-checks/distinct-count/how-tos/create-a-check/) | Single Field | Asserts on the approximate count distinct of the given column. |
| [Equal To Field](https://userguide.qualytics.io/data-quality-checks/equal-to-field/how-tos/create-a-check/) | Single Field | Asserts that this field is equal to another field. |
| [Exists In](https://userguide.qualytics.io/data-quality-checks/exists-in/how-tos/create-a-check/) | Single Field | Asserts that values assigned to this field exist as values in another field. |
| [Expected Values](https://userguide.qualytics.io/data-quality-checks/expected-values/how-tos/create-a-check/) | Single Field | Asserts that values are contained within a list of expected values. |
| [Greater Than](https://userguide.qualytics.io/data-quality-checks/greater-than/how-tos/create-a-check/) | Single Field | Asserts that the field is a number greater than (or equal to) a value. |
| [Greater Than Field](https://userguide.qualytics.io/data-quality-checks/greater-than-field/how-tos/create-a-check/) | Single Field | Asserts that this field is greater than another field. |
| [Is Address](https://userguide.qualytics.io/data-quality-checks/is-address/how-tos/create-a-check/) | Single Field | Asserts that the values are addresses of the required format. |
| [Is Credit Card](https://userguide.qualytics.io/data-quality-checks/is-credit-card/how-tos/create-a-check/) | Single Field | Asserts that the values are credit card numbers. |
| [Is Type](https://userguide.qualytics.io/data-quality-checks/is-type/how-tos/create-a-check/) | Single Field | Asserts that the data is of a specific type. |
| [Less Than](https://userguide.qualytics.io/data-quality-checks/less-than/how-tos/create-a-check/) | Single Field | Asserts that the field is a number less than (or equal to) a value. |
| [Less Than Field](https://userguide.qualytics.io/data-quality-checks/less-than-field/how-tos/create-a-check/) | Single Field | Asserts that this field is less than another field. |
| [Matches Pattern](https://userguide.qualytics.io/data-quality-checks/matches-pattern/how-tos/create-a-check/) | Single Field | Asserts that a field must match a pattern. |
| [Max Length](https://userguide.qualytics.io/data-quality-checks/max-length/how-tos/create-a-check/) | Single Field | Asserts that a string has a maximum length. On array fields, checks the array has at most N elements. With element context, checks each string element's length. |
| [Max Value](https://userguide.qualytics.io/data-quality-checks/max-value/how-tos/create-a-check/) | Single Field | Asserts that a field has a maximum value. |
| [Min Length](https://userguide.qualytics.io/data-quality-checks/min-length/how-tos/create-a-check/) | Single Field | Asserts that a string has a minimum length. On array fields, checks the array has at least N elements. With element context, checks each string element's length. |
| [Min Value](https://userguide.qualytics.io/data-quality-checks/min-value/how-tos/create-a-check/) | Single Field | Asserts that a field has a minimum value. |
| [Not Empty](https://userguide.qualytics.io/data-quality-checks/not-empty/how-tos/create-a-check/) | Single Field | Asserts that a text or array field is not empty. A value made only of spaces counts as empty. |
| [Not Exists In](https://userguide.qualytics.io/data-quality-checks/not-exists-in/how-tos/create-a-check/) | Single Field | Asserts that values assigned to this field do not exist as values in another field. |
| [Not Future](https://userguide.qualytics.io/data-quality-checks/not-future/how-tos/create-a-check/) | Single Field | Asserts that the field's value is not in the future. |
| [Not Negative](https://userguide.qualytics.io/data-quality-checks/not-negative/how-tos/create-a-check/) | Single Field | Asserts that this is a non-negative number. |
| [Positive](https://userguide.qualytics.io/data-quality-checks/positive/how-tos/create-a-check/) | Single Field | Asserts that this is a positive number. |
| [Predicted By](https://userguide.qualytics.io/data-quality-checks/predicted-by/how-tos/create-a-check/) | Single Field | Asserts that the actual value of a field falls within an expected predicted range. |
| [Required Values](https://userguide.qualytics.io/data-quality-checks/required-values/how-tos/create-a-check/) | Single Field | Asserts that all of the defined values must be present at least once within a field. |
| [Sum](https://userguide.qualytics.io/data-quality-checks/sum/how-tos/create-a-check/) | Single Field | Asserts that the sum of a field is a specific amount. |
| [Time Distribution Size](https://userguide.qualytics.io/data-quality-checks/time-distribution-size/how-tos/create-a-check/) | Single Field | Asserts that the count of records for each interval of a timestamp is between two numbers. |
| [Any Not Null](https://userguide.qualytics.io/data-quality-checks/any-not-null/how-tos/create-a-check/) | Multiple Fields | Asserts that at least one of the selected fields must hold a value. |
| [Data Diff](https://userguide.qualytics.io/data-quality-checks/data-diff/how-tos/create-a-check/) | Multiple Fields | Asserts that the dataset created by the targeted field(s) has differences compared to the referred field(s). |
| [Equal To](https://userguide.qualytics.io/data-quality-checks/equal-to/how-tos/create-a-check/) | Multiple Fields | Asserts that all of the selected fields equal a value. |
| [Is Replica Of](https://userguide.qualytics.io/data-quality-checks/is-replica-of/how-tos/create-a-check/) | Multiple Fields | Deprecated. Replaced by **Data Diff**, which performs the same row-by-row comparison and adds change-type filtering. |
| [Not Null](https://userguide.qualytics.io/data-quality-checks/not-null/how-tos/create-a-check/) | Multiple Fields | Asserts that the field's values are not null. On array fields with element context, asserts that no elements within the array are null. |
| [Unique](https://userguide.qualytics.io/data-quality-checks/unique/how-tos/create-a-check/) | Multiple Fields | Asserts that each field's value is unique across rows. When multiple fields are selected, asserts that the combination of values across those fields is unique (composite key). |
| [Aggregation Comparison](https://userguide.qualytics.io/data-quality-checks/aggregation-comparison/how-tos/create-a-check/) | Calculated | Verifies that the specified comparison operator evaluates true when applied to the two aggregation expressions. |
| [Entity Resolution](https://userguide.qualytics.io/data-quality-checks/entity-resolution/how-tos/create-a-check/) | Calculated | Asserts that records describing the same entity are clustered together, even when their values vary, and that every record in a cluster shares one value of a chosen distinction field. |
| [Satisfies Expression](https://userguide.qualytics.io/data-quality-checks/satisfies-expression/how-tos/create-a-check/) | Calculated | Evaluates a SQL expression you provide against every record. |
| [Metric](https://userguide.qualytics.io/data-quality-checks/metric/how-tos/create-a-check/) | Aggregated | Records the value of the selected field during each scan operation and asserts limits based upon an expected change or absolute range (inclusive). |
| [Freshness](https://userguide.qualytics.io/data-quality-checks/freshness/how-tos/create-a-check/) | Metadata | Asserts that the data was added or updated within a maximum allowed age. |
| [Volumetric](https://userguide.qualytics.io/data-quality-checks/volumetric/how-tos/create-a-check/) | Metadata | Asserts that the row count of a table or file stays within an expected range, or changes by no more than expected since an earlier day. |
| [Expected Schema](https://userguide.qualytics.io/data-quality-checks/expected-schema/how-tos/create-a-check/) | Schema | Asserts that all selected fields are present and that all declared data types match expectations. |
| [Field Count](https://userguide.qualytics.io/data-quality-checks/field-count/how-tos/create-a-check/) | Schema | Asserts that there must be exactly a specified number of fields. |
| [Max Partition Size](https://userguide.qualytics.io/data-quality-checks/max-partition-size/how-tos/create-a-check/) | Schema | Asserts the maximum number of records that should be loaded from each file or table partition. |
| [Min Partition Size](https://userguide.qualytics.io/data-quality-checks/min-partition-size/how-tos/create-a-check/) | Schema | Asserts the minimum number of records that should be loaded from each file or table partition. |

## Steps

Each field is described in the [Field Reference](https://userguide.qualytics.io/data-quality-checks/checks/how-tos/managing/create-a-check/#field-reference) above.

**Step 1**: Open the datastore, table or file, or field the check is for. Starting from a table or file, or a field, fills it in on the form for you.

**Step 2**: Click **Add**  at the top right. A menu opens.

**Step 3**: Click **Check** . The **Authored Check Details** form opens. You can also press `C` on the datastore's pages to open it.

> **Warning: No tables available**
>
> On a datastore that has no tables yet, for example one that was just added and has not been synced, the form shows a **No tables available** warning (**No files available** on a file-based datastore) that reads **Run a Sync on this datastore before adding checks.** instead of the check fields. When you open the form from the datastore page and you can run operations on the datastore, the warning also offers a **Run Sync**  button, which closes the form and opens the Sync dialog. Add the check once the Sync finishes. The warning does not appear when you add a check from a check template.

**Step 4**: Under **Target**, click the **Rule Type** list and pick the rule. The list groups the rule types into Single Field, Multiple Fields, Calculated, Aggregated, Metadata, and Schema. The rest of the form adapts to the rule you pick.

**Step 5**: Select the **Table / File**, if it is not filled in already.

**Step 6**: Select the **Field** or **Fields**, if the rule asks for them and they are not filled in already.

**Step 7**: Optionally, enter a **Filter Clause** to limit the records the check evaluates.

**Step 8**: Under **Properties**, fill in the values the rule type asks for. Some rule types have none. See [Create a Check by Rule Type](https://userguide.qualytics.io/data-quality-checks/checks/how-tos/managing/create-a-check/#create-a-check-by-rule-type) for the values of each one.

**Step 9**: Under **Pass Criteria**, drag the **Coverage** slider to the percentage of records that must satisfy the rule. It starts at 100%.

**Step 10**: Optionally, under **Impact**, click **Add your first impact metric**  and fill in the metric. See [Impact Metrics](https://userguide.qualytics.io/data-quality-checks/checks/deep-dive/impact-metrics/).

**Step 11**: Under **Ownership**, keep yourself as the **Owner**, or click the list and pick another user.

**Step 12**: Optionally, click the **Anomaly assignee** list and pick the user who gets the check's new anomalies.

**Step 13**: Under **Metadata**, enter the **Description**. With an AI integration configured, click **Suggest a description**  to have one written from the check's definition.

**Step 14**: Optionally, add **Tags** and **Additional Metadata**.

**Step 15**: Click **Validate**. Qualytics tests the check against the selected data without saving it, and a message shows whether validation succeeded.

**Step 16**: Click **Save**. A success message appears, and the check is created as Active.

> **Tip: Save as a Draft or a template**
>
> To save the check another way, click the arrow next to **Save** and pick **Save as Draft**  or **Save as Template** . With only the **Drafter** team permission, the button reads **Save as Draft**, and the check is created as a Draft.

> **Note: A filter that can never run**
>
> **Validate** refuses a filter clause that can never convert a value, such as `amount <> ''` on a number field, or that uses a function Qualytics does not allow, and names the reason. This applies to every rule type that accepts a filter, including checks that compute one value for the whole table, such as **Sum**, and checks with a coverage below 100%. If a check with such a filter reaches a scan, it is reported as **Not Asserted** with that reason, and the other checks on the table still run.

> **Tip: Locked after save**
>
> The **Rule Type** and the **Table / File** cannot change once the check is saved. To use another one, create a new check, or clone this one. See [Clone a Check](https://userguide.qualytics.io/data-quality-checks/checks/how-tos/managing/clone-check/).

To create many checks at once from the same rule, use a check template. See [Add Multiple Checks from a Template](https://userguide.qualytics.io/data-quality-checks/templates/how-tos/add-multiple-checks/).

*Last updated: November 10, 2026.*
