Skip to main content

Configuration-driven data ingestion framework with quality checks, metadata, and orchestration

Project description

OpenIngest — Usability and Observability

This document covers the monitoring, metadata, and notification capabilities of OpenIngest.


Metadata tables

Every pipeline execution writes to four PostgreSQL tables automatically created on first run.

pipeline_runs

One row per full pipeline execution.

Column Type Description
run_id TEXT Unique ID — format OI-YYYYMMDD-XXXXXX
status TEXT SUCCESS or FAILED
total_datasets INTEGER Datasets processed
total_rows BIGINT Total rows loaded
total_duration FLOAT Seconds
started_at TIMESTAMP Run start time
finished_at TIMESTAMP Run finish time

pipeline_dataset_runs

One row per dataset per execution.

Column Type Description
run_id TEXT Foreign key to pipeline_runs
dataset_name TEXT Dataset name from datasets.yaml
status TEXT SUCCESS or FAILED
rows_loaded BIGINT Rows loaded this run
duration_seconds FLOAT Seconds
target_table TEXT Staging table name
load_strategy TEXT replace, append, or incremental
load_mode TEXT FULL, APPEND, or INCREMENTAL
watermark_value TEXT Latest watermark (incremental only)
loaded_at TIMESTAMP Completion timestamp

pipeline_quality_runs

One row per dataset per execution with quality metrics.

Column Type Description
run_id TEXT Foreign key to pipeline_runs
dataset_name TEXT Dataset name
status TEXT PASS or FAIL
score FLOAT Quality score 0.0–100.0
checks_total INTEGER Total checks run
checks_passed INTEGER Checks that passed
checks_failed INTEGER Checks that failed

pipeline_incremental_state

Persists watermark state between runs for incremental datasets.

Column Type Description
dataset_name TEXT Primary key
target_table TEXT Staging table
incremental_column TEXT Watermark column name
last_watermark_value TEXT Last processed watermark
last_rows_loaded BIGINT Rows loaded on last run
last_source_rows BIGINT Total source rows on last run
last_loaded_at TIMESTAMP Timestamp of last successful run

CLI monitoring commands

# Latest execution report — one-line summary per dataset
openingest report

# Full run history
openingest history
openingest history --limit 10

# Full monitoring dashboard — KPIs, dataset health, quality trends
openingest dashboard

The dashboard shows:

  • Pipeline KPIs (latest run status, total rows, quality score, duration)
  • Dataset health snapshot (per-dataset rows, quality, watermark)
  • Dataset-level trends across the last 20 runs
  • Incremental loading statistics (new records, skipped, latest watermark)
  • Quality distribution (PASS / FAIL counts)
  • Slowest datasets by average duration

Notifications (v2.5)

Configure in configs/pipeline.yaml:

notifications:
  slack:
    webhook: ${SLACK_WEBHOOK_URL}
    on: [success, failure]      # which events trigger a notification

  email:
    smtp_host: smtp.gmail.com
    smtp_port: 587
    username: ${EMAIL_USERNAME}
    password: ${EMAIL_PASSWORD}
    from: openingest@company.com
    to:
      - data-team@company.com
      - oncall@company.com
    on: [failure]               # only alert on failure

Both channels support on: [success], on: [failure], or on: [success, failure] independently.

Slack message format

Uses Slack Block Kit. Example success notification:

✅ OpenIngest — Pipeline SUCCESS

Run ID   : OI-20260703-3BB09C
Status   : SUCCESS
Datasets : 8
Rows     : 174,777
Duration : 4.21s

Email format

Plain-text email via SMTP. Subject line:

✅ OpenIngest Pipeline: SUCCESS — OI-20260703-3BB09C

Data lineage (v3.0)

The lineage engine builds a directed graph of how data flows through the pipeline per dataset.

from core.lineage import LineageGraph

graph = LineageGraph()

# Build lineage for all datasets after a run
for dataset in datasets:
    graph.add_dataset_lineage(dataset)

# Terminal view
graph.print_ascii()

# Mermaid diagram (paste into any Mermaid renderer)
print(graph.to_mermaid())

# JSON for web UI or API
data = graph.to_dict()

ASCII output

  customers
  ├─ customers.csv                   [source]
  │
  ├─ Dataset Discovery
  │
  ├─ Schema Validation               [PASS]
  │
  ├─ Quality Engine                  [PASS]  100.0%
  │
  ├─ Ingest (replace)                174,777 rows
  │
  └─ stg_customers                   [staging]

Mermaid output

flowchart TD
    customers_source[("customers.csv")]
    customers_discovery[["Dataset Discovery"]]
    customers_schema_validation[["Schema Validation"]]
    customers_quality_check{{"Quality Engine"}}
    customers_ingest[["Ingest (replace)"]]
    customers_staging[("stg_customers")]

    customers_source --> customers_discovery
    customers_discovery --> customers_schema_validation
    customers_schema_validation --> customers_quality_check
    customers_quality_check --> customers_ingest
    customers_ingest --> customers_staging

Observability queries

Direct SQL examples against the metadata tables:

-- Latest run summary
SELECT run_id, status, total_datasets, total_rows, total_duration, started_at
FROM pipeline_runs
ORDER BY started_at DESC
LIMIT 1;

-- Quality score trend for orders
SELECT r.started_at, q.score, q.status
FROM pipeline_quality_runs q
JOIN pipeline_runs r USING (run_id)
WHERE q.dataset_name = 'orders'
ORDER BY r.started_at DESC
LIMIT 30;

-- Rows loaded per dataset on the latest run
WITH latest AS (SELECT run_id FROM pipeline_runs ORDER BY started_at DESC LIMIT 1)
SELECT dataset_name, rows_loaded, load_strategy, load_mode, watermark_value
FROM pipeline_dataset_runs
WHERE run_id = (SELECT run_id FROM latest)
ORDER BY dataset_name;

-- Datasets that failed quality checks in the last 7 days
SELECT r.started_at, q.dataset_name, q.score, q.checks_failed
FROM pipeline_quality_runs q
JOIN pipeline_runs r USING (run_id)
WHERE q.status = 'FAIL'
  AND r.started_at >= NOW() - INTERVAL '7 days'
ORDER BY r.started_at DESC;

-- Current watermark state for incremental datasets
SELECT dataset_name, incremental_column, last_watermark_value,
       last_rows_loaded, last_loaded_at
FROM pipeline_incremental_state
ORDER BY dataset_name;

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openingest-2.5.2.tar.gz (65.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openingest-2.5.2-py3-none-any.whl (81.1 kB view details)

Uploaded Python 3

File details

Details for the file openingest-2.5.2.tar.gz.

File metadata

  • Download URL: openingest-2.5.2.tar.gz
  • Upload date:
  • Size: 65.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openingest-2.5.2.tar.gz
Algorithm Hash digest
SHA256 fa12b199c8cf3167ea26349f2fe3f936085e44ee447682e01d69cdffdec1e3e0
MD5 bfe8ef1d881e008d007365c592c4aaa5
BLAKE2b-256 6639c33df3c6f440a720c984b31144c2ec1a065f1ca881bfbd221b3cbfc2951d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openingest-2.5.2.tar.gz:

Publisher: publish.yml on ManishKudtarkar/OpenIngest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file openingest-2.5.2-py3-none-any.whl.

File metadata

  • Download URL: openingest-2.5.2-py3-none-any.whl
  • Upload date:
  • Size: 81.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openingest-2.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 947f17c4c2251e9451c2312936d232b221b42d6dd68adb3ee4cf823cd11974ca
MD5 237616d35537e3a6cadaf07f8cd8d467
BLAKE2b-256 093e399ead8bc5481990ea742ac379b0bd38369f60977f2f98f1aef4757bd5d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for openingest-2.5.2-py3-none-any.whl:

Publisher: publish.yml on ManishKudtarkar/OpenIngest

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page