Skip to content

Shape Anomalies

A Shape anomaly describes a problem that belongs to many rows or to the dataset as a whole, rather than to a single row. The simplest Shape anomaly is a table that no longer has a field it is expected to have: no row is wrong on its own, the structure is. Shape anomalies also cover problems that only show up when rows are compared with each other, such as duplicate keys, and failures too widespread to report one row at a time.

This page explains what creates a Shape anomaly, what one contains, and how to read it. For failures tied to one row, see Record Anomalies.

What Creates a Shape Anomaly

A Scan reports a Shape anomaly in three situations.

A Rule That Looks at the Dataset

Some rules can only be answered by looking at the data as a whole: whether a field exists, whether values repeat, whether the row count or the latest update is within its limits, whether two tables agree. These rules always produce Shape anomalies.

See Rule Types for every rule type that produces only Shape anomalies.

A Coverage Below 100%

A rule that evaluates each row, such as Not Null or Min Value, can be set to a coverage below 100%. The check then tolerates some failing rows and asks a different question: does the share of passing rows reach the coverage? When it does not, the Scan reports one Shape anomaly for the dataset, with the number of failing rows, instead of one Record anomaly per row.

More Failing Rows Than the Limit

When a check at 100% coverage fails more rows than the Scan's Maximum Record Anomalies per Check (10 by default), all of that check's failures are reported as one Shape anomaly, which keeps the total count. No Record anomaly is created for that check, so a widespread failure does not flood the anomaly list. The other checks on the same rows still report their own anomalies. See Maximum Record Anomalies per Check.

What a Shape Anomaly Shows

Part What it shows
Anomalous Records The number of rows that failed, when the rule can count them, as in a coverage or rolled-up failure. A structural failure, such as a missing field, has no count.
Failed Checks The check that failed, with a message that carries the numbers, such as email has no value in 14 of 200 asserted records.
Source Records A sample of the failing rows, up to the Scan's Maximum Source Examples per Anomaly, when the source datastore has an enrichment datastore. A Unique check shows every row of each duplicate group. A rule that does not read rows, such as Expected Schema, Volumetric, or Freshness, has no source records. See Source Records.
Description A summary of the failure whose opening line gives the share of records that failed, such as 2 of 4 records (50%) in ACCOUNTS failed 1 check. See Anomaly Description.

Every Shape anomaly holds exactly one failed check. When several checks fail at the shape level in the same Scan, even on the same fields, each one produces its own Shape anomaly.

The Custom Anomaly Description option of a check does not change Shape anomaly messages. It applies to Record anomalies only.

Impact and Fingerprints

Shape anomalies differ from Record anomalies in two ways that affect triage:

  • Impact follows the scale of the failure. A coverage or rolled-up failure is rated by the share of checked records that failed: less than 1% is Low, 1% to less than 10% is Medium, and 10% or more is High. A check that tests the table as a whole, such as Expected Schema, Freshness, or Volumetric, is rated High when it fails. The check's Importance then raises or lowers that level. See Anomaly Impact.
  • A fingerprint needs a scanned range. The fingerprint of a Shape anomaly is built from its check, the full text of its failure message, and the range of data the Scan read. That range comes from the table's or file's incremental field or last-modified date. Without one, the Shape anomaly has no fingerprint and is never marked Duplicate. Volumetric and Freshness anomalies never have one, so every failing Scan opens a new anomaly.

Because the message is part of the fingerprint, a Shape anomaly whose counts change between Scans, such as 14 of 200 becoming 15 of 210, is a new anomaly, not a duplicate.

Rule Types

These rule types look at the data as a whole, so they produce only Shape anomalies. The rule types that evaluate each row produce Shape anomalies too, when the check's coverage is below 100% or when it fails more rows than the limit. See Record Anomalies for those.

Examples

The Sample Data tables below follow the Source Records view: one row per record, with the failing cells highlighted. A structural failure has no failing cell, so nothing is highlighted.

The situation: Your orders table is loaded by an upstream pipeline. An Expected Schema check declares the four fields the reports depend on: order_id, customer_id, order_date, and total_amount. After a pipeline change, total_amount stops arriving.

Sample Data

order_id customer_id order_date
101 C001 2026-10-10
102 C002 2026-10-11
103 C003 2026-10-12

What gets flagged

Every row is complete for the fields it has, so no cell is wrong. The table itself is: a declared field is missing. The Scan reports one Shape anomaly for the table, with no anomalous record count and no source records. The evidence is the table's field list.

Shape Anomaly

The required field [total_amount] is not present

The situation: Your customers table must hold one row per customer. A Unique check on customer_id guards that rule.

Sample Data

customer_id name email
1001 Alice Cohen alice@example.com
1002 Ben Dias ben@example.com
1001 Alice C. alice.c@example.com
1003 Cara Mota cara@example.com

What gets flagged

Neither row with customer_id = 1001 is wrong on its own. The problem only exists when the two are compared, so the Scan reports one Shape anomaly. Its source records show both rows of the duplicate group, and every row in the group counts toward the total, so the message counts 2 rows, not 1.

Shape Anomaly

customer_id values are repeated across 2 of 4 asserted records

The situation: Your contacts table has an optional email field that marketing expects to be filled in for at least 95% of contacts. A Not Null check on email with a coverage of 95% guards that target. The Scan reads 200 contacts, and 14 have no email, so 93% pass.

Sample Data (a sample of the failing rows)

contact_id name email country
7004 Leo Park NULL KR
7019 Mia Rossi NULL IT
7023 Omar Haddad NULL AE

What gets flagged

A missing email is allowed on some rows, so none of them is an anomaly on its own. The failure is the share: 93% is below the 95% coverage. The Scan reports one Shape anomaly with an anomalous record count of 14, and its source records hold a sample of the rows with no email.

Shape Anomaly

email has no value in 14 of 200 asserted records

The situation: The employees table from the Record Anomalies examples has a Min Value check on salary with a minimum of 40000 and 100% coverage. After a bad import, 25 of the 400 rows the Scan reads have a salary under the minimum. The Scan keeps the default Maximum Record Anomalies per Check of 10.

Sample Data (a sample of the failing rows)

emp_id name department salary
102 Bob Johnson Support 30000
104 Ana Lima Support 28500
117 Raj Patel Sales 31200

What gets flagged

The check failed 25 rows, more than the limit of 10, so instead of 25 Record anomalies the Scan reports one Shape anomaly with an anomalous record count of 25. Its source records hold a sample of the failing rows, with the salary cell highlighted as it would be on a Record anomaly.

Shape Anomaly

salary values are under the minimum of 40000, affecting 25 of 400 asserted records

See Also