Jaco van der Laan

Quality Metadata Exchange: Trust Through Transparency

02/03/2026  ·  Data Engineering  ·  Metadata

metadata quality
‹ ›

How sidecar schemas and quality attestations enable data consumers to make informed trust decisions


Quality Metadata Exchange: Trust Through Transparency

How sidecar schemas and quality attestations enable data consumers to make informed trust decisions


The Trust Gap in Data Pipelines

Every data pipeline has a dirty secret: quality checks happen, but the results disappear into logs. When data arrives at a downstream system, consumers face a fundamental question: “Can I trust this data?”

Today, most data platforms answer this question with silence. The source system ran quality checks — maybe. They passed — probably. The data is accurate — hopefully.

This trust gap creates real problems:

  1. Redundant validation : Consumers re-run the same quality checks the producer already performed
  2. Blind consumption : Teams use data without knowing its quality status
  3. Broken accountability : When quality issues surface, no one knows where the problem originated
  4. Version mismatches : Producers and consumers operate on different quality expectations

What if quality metadata traveled with the data itself?


Introducing Quality Metadata Exchange

Quality Metadata Exchange (QMEF) is a pattern for sharing quality check results between data producers and consumers. Instead of discarding quality results after pipeline execution, QMEF captures them in a standardized format that:

  • Travels with data via sidecar tables
  • Proves quality through formal attestations
  • Enables trust decisions based on evidence, not assumptions
  • Reduces duplication by sharing upstream check results

The Core Concept: Sidecar Schema

A sidecar schema is a companion table that stores quality metadata alongside your data table. Rather than polluting your data with quality columns or losing quality context entirely, the sidecar provides a clean separation:

The sidecar links to data via batch_id, enabling queries like:


Quality Attestations: Formal Proof of Quality

A Quality Attestation is a formal statement from a data producer certifying that quality checks were performed on a data batch. Think of it as a “certificate of quality” that accompanies your data.

Anatomy of an Attestation

{  
  "qualityAttestation": {  
    "version": "1.0",  
    "attestationId": "QA_20260228_143022_abc123",  
    "entityId": "fct_transactions",  
    "batchId": "BATCH_2026022814",

    "producer": {  
      "system": "finance-data-platform",  
      "version": "3.2.1",  
      "environment": "PROD"  
    },

    "scope": {  
      "type": "incremental",  
      "rowCount": 145230  
    },

    "summary": {  
      "status": "PASSED",  
      "overallScore": 0.9847,  
      "dimensions": {  
        "completeness": 0.9912,  
        "uniqueness": 1.0000,  
        "validity": 0.9756  
      },  
      "checkCounts": {  
        "total": 12,  
        "passed": 11,  
        "warning": 1,  
        "failed": 0  
      }  
    },

    "reconciliation": {  
      "status": "PASSED",  
      "sourceRowCount": 145230,  
      "targetRowCount": 145230,  
      "withinTolerance": true  
    }  
  }  
}

What Attestations Contain


The Eight Quality Dimensions

Quality attestations score data across ISO 8000-aligned dimensions:

Each dimension receives a score (0.0–1.0), enabling nuanced trust decisions:

# Consumer can define their own thresholds  
if attestation.dimension_scores["completeness"] < 0.99:  
    logger.warning("Low completeness - some records may have missing values")

if attestation.dimension_scores["validity"] < 0.95:  
    raise QualityException("Validity too low for production use")

Reconciliation: Proving Data Matches

When data flows between systems, how do you prove the source and target match? Reconciliation attestations provide that proof:

{  
  "reconciliation": {  
    "reconciliationId": "RECON_20260228_143030",  
    "sourceSystem": "core-banking",  
    "targetSystem": "data-warehouse",  
    "status": "PASSED",

    "sourceRowCount": 145230,  
    "targetRowCount": 145230,  
    "withinTolerance": true,

    "valueChecks": [  
      {  
        "metric": "total_amount",  
        "aggregation": "SUM",  
        "sourceValue": 45678901.23,  
        "targetValue": 45678901.23,  
        "differencePercent": 0.0,  
        "status": "passed"  
      }  
    ]  
  }  
}

Common Reconciliation Checks


Contract-Based Quality Exchange

Quality attestations become truly powerful when integrated with data contracts. A contract can specify what attestations a producer must provide:

contract:  
  entity: fct_transactions  
  version: "2.1.0"  
  owner: finance-data-team

  quality_exchange:  
    # What attestations producer must provide  
    required_attestations:  
      - dimension: completeness  
        scope: full  
        min_score: 0.99  
      - dimension: validity  
        scope: full  
        min_score: 0.98

    # Reconciliation requirements  
    reconciliation:  
      required: true  
      checks:  
        - type: row_count_match  
          tolerance_percent: 0.1  
        - type: sum_match  
          column: amount  
          tolerance_percent: 0.01

    # How quality metadata is delivered  
    delivery:  
      format: sidecar  
      sidecar_table: "{entity}_quality_sidecar"

  consumers:  
    - team: risk-analytics  
      criticality: critical  
      quality_requirements:  
        min_overall_score: 0.95  
        required_dimensions: [completeness, validity]

Validating Attestations Against Contracts

from mdde.quality.exchange import QualityExchangeManager

manager = QualityExchangeManager(conn)

# Validate that attestation meets contract requirements  
validation = manager.validate_attestation(attestation, contract)

if not validation.valid:  
    print(f"Missing checks: {validation.missing_checks}")  
    print(f"Insufficient scores: {validation.insufficient_scores}")  
    for issue in validation.issues:  
        print(f"- {issue.message}")

Implementation Patterns

Pattern 1: Producer Creates Attestation

After running quality checks, the producer creates an attestation:

from mdde.quality.exchange import QualityExchangeManager, AttestationScope

manager = QualityExchangeManager(conn)

# Create attestation from quality report  
attestation = manager.create_attestation(  
    entity_id="fct_transactions",  
    batch_id="BATCH_20260228",  
    quality_report=quality_report,  
    reconciliation=reconciliation_result,  
    producer_version="2.1.0",  
    environment="PROD",  
    scope=AttestationScope.INCREMENTAL,  
    row_count=145230,  
)

# Write to sidecar table  
manager.write_sidecar(attestation, schema="warehouse")

# Export for external consumers  
json_export = manager.export_attestation(attestation, format="json")

Pattern 2: Consumer Reads Attestation

Before using data, the consumer checks the attestation:

# Read latest attestation  
attestations = manager.read_sidecar(  
    entity_id="fct_transactions",  
    schema="warehouse",  
    since=datetime(2026, 2, 1),  
)

latest = attestations[0]  
# Make trust decision  
if latest.overall_status == AttestationStatus.FAILED:  
    raise DataQualityError("Cannot proceed - quality checks failed")  
if latest.overall_score < 0.95:  
    logger.warning(f"Quality score {latest.overall_score:.2%} below threshold")

Pattern 3: Quality-Filtered Queries

Build quality awareness into your SQL:

-- View: Only high-quality transactions  
CREATE VIEW v_trusted_transactions AS  
SELECT t.*  
FROM fct_transactions t  
INNER JOIN fct_transactions_quality_sidecar q  
    ON t.batch_id = q.batch_id  
WHERE q.overall_status = 'PASSED'  
  AND q.completeness_score >= 0.99  
  AND q.reconciled_with_source = TRUE;

Exchange Formats

Quality attestations can be exchanged in multiple formats:

JSON (Machine-Readable)

Best for API integrations and programmatic access:

{  
  "qualityAttestation": {  
    "attestationId": "QA_20260228_143022_abc123",  
    "summary": {  
      "status": "PASSED",  
      "overallScore": 0.9847  
    }  
  }  
}

YAML (Human-Readable)

Best for configuration and documentation:

qualityAttestation:  
  attestationId: QA_20260228_143022_abc123  
  summary:  
    status: PASSED  
    overallScore: 0.9847

Sidecar Tables (Database-Native)

Best for SQL-based consumers and dashboard integration:

SELECT  
    batch_id,  
    overall_status,  
    overall_score,  
    completeness_score,  
    validity_score  
FROM fct_transactions_quality_sidecar  
WHERE load_timestamp >= CURRENT_DATE - INTERVAL '7 days'  
ORDER BY load_timestamp DESC;

Benefits of Quality Metadata Exchange

For Producers

  • Accountability : Prove that quality checks were performed
  • Transparency : Share quality status with consumers
  • Reduced support : Consumers can self-diagnose quality issues

For Consumers

  • Informed decisions : Trust data based on evidence
  • Reduced duplication : Skip redundant quality checks
  • Quality filtering : Only use data that meets your standards

For the Organization

  • Data lineage : Track quality across the pipeline
  • Audit trail : Demonstrate compliance and governance
  • Cost savings : Eliminate redundant validation work

Getting Started

Step 1: Generate Sidecar Schema

from mdde.quality.exchange import QualityExchangeManager

manager = QualityExchangeManager(conn)  
# Generate DDL for your entity  
ddl = manager.generate_sidecar_ddl(  
    schema="warehouse",  
    entity_name="fct_transactions",  
    dialect="snowflake",  
)  
# Execute the DDL  
conn.execute(ddl)

Step 2: Create Attestations in Your Pipeline

# After your quality checks complete  
attestation = manager.create_attestation(  
    entity_id="fct_transactions",  
    batch_id=current_batch_id,  
    quality_report=quality_engine.execute("fct_transactions"),  
)

manager.write_sidecar(attestation, schema="warehouse")

Step 3: Validate Against Contracts

# Ensure attestations meet contract requirements  
validation = manager.validate_attestation(attestation, contract)  
if not validation.valid:  
    raise ContractViolation(validation.issues)

Conclusion

Quality Metadata Exchange transforms quality from an invisible pipeline step into a shareable, verifiable asset. By adopting sidecar schemas and quality attestations, organizations can:

  • Build trust between data producers and consumers
  • Eliminate redundant quality checks
  • Enable evidence-based data consumption decisions
  • Create accountability across the data supply chain

The question is no longer “Can I trust this data?” but rather “What does the attestation tell me about this data?”


Quality Metadata Exchange — Because trust should be proven, not assumed.