Skip to content

Enrichment Outputs

Every output Qualytics writes into an enrichment destination belongs to one purpose, and the purpose decides its name. This page lists the physical names and columns of Scan outputs, remediation snapshots, source records audit snapshots, and materialized copies. Export outputs are documented on the Export Outputs page.

Purpose Physical name One row is
Scan <prefix>_check_metrics, <prefix>_failed_checks, <prefix>_source_records, <prefix>_scan_operations See each output below
Remediation <prefix>_remediation_<container_id> One anomalous record of the source container, with the anomaly it belongs to
Source Records Audit <prefix>_source_records_audit_<container_id>_<operation_id> One record of the source container that the Scan loaded
Materialize <prefix>_mat_<container_name>, or <prefix>_materialize_<container_id> when the container name cannot be used One record of the source container as of the run
Export _<datastore_name>_export_anomalies, _<datastore_name>_export_anomaly_records, _<datastore_name>_export_checks, _<datastore_name>_export_field_profiles, _export_check_templates See Export Outputs

<prefix> is the enrichment prefix of the source datastore that wrote the output. Exports instead use the normalized datastore name, as explained in Export Outputs. A JDBC destination stores these outputs as database tables. A DFS destination stores them in Delta format in cloud object storage. After Sync, Qualytics represents both as containers.

Display names

In Qualytics these containers appear under a readable name built from their purpose and their source, such as Failed Checks (TPCH) or ORDERS / Remediation (TPCH). The physical name is what you query in the destination itself. See How Enrichment Works.

Scan outputs

A Scan can write four kinds of outputs. Rows are appended as results become available. Failed-check and source-record outputs are only written when there are failed checks or source examples to record, so a first Scan does not necessarily create all four outputs.

_CHECK_METRICS output

Captures and logs detailed metrics for every data quality check performed within the Qualytics Platform, providing insights into asserted and anomalous records across datasets.

Columns

Name Data Type Description
OPERATION_ID NUMBER Identifier of the Scan operation that produced the metric.
CONTAINER_ID NUMBER Identifier for the container associated with the check metric.
SOURCE_DATASTORE STRING Datastore where the source data resides.
SOURCE_CONTAINER STRING Name of the source data container.
SOURCE_PARTITION STRING Partition of the source data.
ASSERTION_RESULT STRING Result of the check assertion: one of passed, failed, or unasserted.
ASSERTION_DETAILS STRING Text description explaining any warnings, errors, or notes from the check.
QUALITY_CHECK_ID NUMBER Unique identifier for the quality check performed.
ASSERTED_RECORDS_COUNT NUMBER Count of records expected or asserted in the source.
ANOMALOUS_RECORDS_COUNT NUMBER Count of records identified as anomalous.

_FAILED_CHECKS output

Acts as an associative entity that consolidates information on failed checks, associating anomalies with their respective quality checks.

Columns

Name Data Type Description
QUALITY_CHECK_ID NUMBER Unique identifier for the quality check.
ANOMALY_UUID STRING UUID for the anomaly detected.
QUALITY_CHECK_MESSAGE STRING Message describing the quality check outcome, in plain text: the same message listed for that check under the anomaly's failed checks. The wording changed in October 2026 (see the schema changelog).
SUGGESTED_REMEDIATION_FIELD STRING Field suggesting remediation.
SUGGESTED_REMEDIATION_VALUE STRING Suggested value for remediation.
SUGGESTED_REMEDIATION_SCORE FLOAT Score indicating confidence in remediation.
QUALITY_CHECK_RULE_TYPE STRING Type of rule applied for quality check.
QUALITY_CHECK_TAGS STRING Tags associated with the quality check.
QUALITY_CHECK_PARAMETERS STRING Parameters used for the quality check.
QUALITY_CHECK_DESCRIPTION STRING Description of the quality check.
QUALITY_CHECK_FIELDS STRING Names of the fields targeted by the quality check.
QUALITY_CHECK_METADATA STRING Optional JSON string containing additional check metadata.
OPERATION_ID NUMBER Identifier for the operation detecting anomaly.
DETECTED_TIME TIMESTAMP Timestamp when the anomaly was detected.
SOURCE_CONTAINER STRING Name of the source data container.
SOURCE_PARTITION STRING Partition of the source data.
SOURCE_DATASTORE STRING Datastore where the source data resides.
FINGERPRINT INTEGER Unique identifier created when Reactivate Recurring Anomalies is enabled.
ANOMALOUS_RECORDS_COUNT NUMBER The total number of records that triggered this anomaly. For row-level checks, this is 1 per anomaly row. For shape-level checks, this is the total count of anomalous records, independent of any source record sampling limit.

Info

This output is not characterized by unique ANOMALY_UUID or QUALITY_CHECK_ID values alone. Instead, the combination of ANOMALY_UUID and QUALITY_CHECK_ID serves as a composite key that uniquely identifies each record.

_SOURCE_RECORDS output

Stores source records in JSON format, primarily to enable the preview source record feature in the Qualytics App.

Columns

Name Data Type Description
SOURCE_CONTAINER STRING Name of the source data container.
SOURCE_PARTITION STRING Partition of the source data.
ANOMALY_UUID STRING UUID for the associated anomaly.
CONTEXT STRING Contextual information for the anomaly.
RECORD STRING JSON representation of the source record.

_SCAN_OPERATIONS output

Captures and stores the results of every scan operation conducted on the Qualytics Platform.

Schema Change (December 2024)

The CONTAINER_SCAN_ID column was removed from this output. Outputs created after this change do not contain this column. The container and datastore can be identified using the CONTAINER_ID and DATASTORE_ID columns respectively.

Columns

Name Data Type Description
OPERATION_ID NUMBER Unique identifier for the scan operation.
DATASTORE_ID NUMBER Identifier for the source datastore associated with the operation.
CONTAINER_ID NUMBER Identifier for the container associated with the operation.
PARTITION_NAME STRING Name of the source partition on which the scan operation is performed.
INCREMENTAL BOOLEAN Boolean flag indicating whether the scan operation is incremental.
RECORDS_PROCESSED NUMBER Total number of records processed during the scan operation.
ENRICHMENT_SOURCE_RECORD_LIMIT NUMBER Maximum number of source records written to the destination for each anomaly detected.
MAX_RECORDS_ANALYZED NUMBER Maximum number of records analyzed in the scan operation.
ANOMALY_COUNT NUMBER Total number of anomalies identified in the scan operation.
START_TIME TIMESTAMP Timestamp marking the start of the scan operation.
END_TIME TIMESTAMP Timestamp marking the end of the scan operation.
RESULT STRING Textual representation of the scan operation's status.
MESSAGE STRING Detailed message regarding the process of the scan operation.

Remediation outputs

When anomalies are detected in a container, a Scan can also write a remediation output: a snapshot of the anomalous records of that container, with two extra columns for the anomaly. Whether it does depends on the source datastore's remediation strategy, which is a datastore setting rather than a per-Scan choice:

  • None: no remediation outputs are written, regardless of anomaly detection.
  • Append: anomalous records are added after every Scan, building a history.
  • Overwrite: the output is replaced with the anomalous records of the latest Scan.

Note

Remediation outputs are named <enrichment_prefix>_remediation_<container_id>, where <enrichment_prefix> is the source datastore's prefix and <container_id> is the identifier of the source container the records came from.

Illustrative output

<enrichment_prefix>_remediation_<container_id>

This remediation output is an illustrative snapshot of the "Orders" container for reference purposes.

Name Data Type Description
_QUALYTICS_SOURCE_PARTITION STRING The partition from the source data container.
ANOMALY_UUID STRING Unique identifier of the anomaly.
ORDERKEY NUMBER Unique identifier of the order.
CUSTKEY NUMBER The customer key related to the order.
ORDERSTATUS CHAR The status of the order (e.g., 'F' for 'finished').
TOTALPRICE FLOAT The total price of the order.
ORDERDATE DATE The date when the order was placed.
ORDERPRIORITY STRING Priority of the order (e.g., 'urgent').
CLERK STRING The clerk who took the order.
SHIPPRIORITY INTEGER The priority given to the order for shipping.
COMMENT STRING Comments related to the order.

Note

In addition to capturing the original container fields, the platform includes two metadata columns designed to assist in the analysis and remediation process.

  • _QUALYTICS_SOURCE_PARTITION
  • ANOMALY_UUID

Remediation outputs vs. source record outputs

Both hold anomalous source data, in different shapes for different jobs.

Remediation outputs capture the affected records with one column per source field, plus the two metadata columns above. They exist only when the remediation strategy is Append or Overwrite. Their structure makes them suitable for corrective work and data workflows.

Source record outputs (<prefix>_source_records) store each record as JSON in a single RECORD column, next to SOURCE_CONTAINER, SOURCE_PARTITION, ANOMALY_UUID, and CONTEXT. Qualytics reads them to show source records next to an anomaly in the app. A Scan writes available examples up to the effective Maximum Source Examples per Anomaly, which can be overridden for the operation.

For querying and audit snapshots, use the remediation outputs. For reviewing individual anomalies inside Qualytics, the app uses the source record outputs.

Source records audit outputs

When a Scan runs with Persist Source Records for Audit turned on, it writes a snapshot of the source data it read: for each container it loads, every record it loaded, as it existed when the Scan ran. Use these outputs when an audit requires evidence of the exact data a Scan evaluated, not only the records that failed.

Note

Source records audit outputs are named <enrichment_prefix>_source_records_audit_<container_id>_<operation_id>, where <enrichment_prefix> is the source datastore's prefix, <container_id> is the identifier of the source container, and <operation_id> is the identifier of the Scan operation that wrote it.

Each output carries the source container's own columns, one row per record loaded, plus a _qualytics_source_partition column naming the partition the record was read from. What it holds follows what the Scan loaded, not the anomaly settings:

  • It is not limited by Maximum Source Examples per Anomaly, Maximum Record Anomalies per Check, or any other anomaly limit.
  • An Incremental Scan writes only the incremental slice it read. A check's own filter does not narrow the output: it limits what that check evaluates, not what the Scan loads, so rows that no check looked at are written too.
  • The Record Limit (max_records_analyzed_per_partition in the API) still bounds what is loaded, and therefore what is written.
  • A container the Scan does not load, for example one with no checks that need to read its records, gets no audit output.

Every new Scan with the option turned on creates a new output for each container it loads, without touching the outputs of other scans. Resume keeps the same operation and retries only the containers that did not finish, replacing each retried container's earlier partial output with the data read on that attempt. Copy an earlier partial snapshot before resuming if you need it. These outputs accumulate and can be large, since each one is a copy of the data read. Qualytics does not delete them: manage their retention directly in the enrichment datastore.

The snapshot is written while the container is scanned, one partition at a time. If writing one partition fails, that container's scan fails, the rest of its snapshot is not written, and the output is not reported as written, so an incomplete snapshot never passes for a complete one. Run the Scan again once the destination accepts writes.

In Qualytics, these outputs carry the Source Records Audit purpose.

Masked fields

Audit outputs store the values as the Scan read them, unmasked, in the enrichment datastore. On a container with Infer Data Type turned on, those are the values after the conversion to the latest profiled types, so a text value such as 00123 read as a number is written as 123. When you preview one in Qualytics, fields that are masked on the source container stay masked, and revealing them needs reveal permission on both the source container and the enrichment datastore. Anyone who can query the enrichment datastore directly sees the actual values, so restrict access to it accordingly.

Materialized outputs

A Materialize operation copies a container into the destination. A normal Materialize snapshot carries the source container's columns, with no metadata columns added, and holds the selected records as of the run. Masked fields remain masked unless Reveal Masked Values is enabled for the operation. Its name is <enrichment_prefix>_mat_<container_name>, or <enrichment_prefix>_materialize_<container_id> when the source container name cannot be used. See the Materialize Operation page for when each form is used.

Materialized and remediation outputs are also linked back to the source container they came from, at container and field level. See How Enrichment Works.

How the outputs join

The outputs a Scan and an Export write are designed to be joined: failed checks to source records by anomaly, check metrics to scan operations by operation, and so on. The Relationship Diagram draws those joins, colored by key, so you can trace how to get from one output to another. It opens from the How-tos on an enrichment datastore as Join Enrichment Tables. See View the Relationship Diagram.

Joining scan outputs

_check_metrics records every check evaluation, passes included, but it carries no timestamp of its own. Join it to _scan_operations on the operation, the container, and the partition to get the scan's start and end times. The result is one row per check, per partition, per scan: an audit dataset of every execution.

SELECT m.QUALITY_CHECK_ID,
       m.ASSERTION_RESULT,
       m.ASSERTED_RECORDS_COUNT,
       m.ANOMALOUS_RECORDS_COUNT,
       m.ASSERTION_DETAILS,
       s.START_TIME,
       s.END_TIME,
       s.RESULT,
       s.INCREMENTAL,
       m.OPERATION_ID,
       m.SOURCE_CONTAINER,
       m.SOURCE_PARTITION
FROM   <prefix>_check_metrics m
JOIN   <prefix>_scan_operations s
       ON  s.OPERATION_ID   = m.OPERATION_ID
       AND s.CONTAINER_ID   = m.CONTAINER_ID
       AND s.PARTITION_NAME = m.SOURCE_PARTITION;

Anomalies join the same way: _failed_checks carries OPERATION_ID and DETECTED_TIME, so it links to _scan_operations through the operation and to _source_records through ANOMALY_UUID. START_TIME, END_TIME, and DETECTED_TIME are written as UTC instants; a timezone-naive column in the destination shows the UTC wall-clock time.

To confirm which definition a check had when a scan ran, pass the scan's START_TIME to GET /api/quality-checks/{id}/version.