Software observability asks "Is the server up?" Data observability asks "Is the data correct?" In a modern data stack, a pipeline can be 100% "healthy" according to your orchestrator while delivering 100% "garbage" data to your downstream dashboards.
daily_sales table been updated in the last 24 hours?)null_rate for user_email suddenly 50%?)Do not rely on manual audits. Use dbt tests or Great Expectations to enforce quality at the pipeline level.
# schema.yml
version: 2
models:
- name: orders
columns:
- name: order_id
tests:
- unique
- not_null
- name: status
tests:
- accepted_values:
values: ['placed', 'shipped', 'completed', 'returned']
You can implement basic observability using simple SQL checks run by your orchestrator (Airflow/Dagster).
-- Check for Volume Anomaly (Comparing today vs. 7-day average)
WITH stats AS (
SELECT count(*) as row_count
FROM events
WHERE event_date > current_date - interval '7 days'
)
SELECT
count(*) as today_count,
(SELECT row_count / 7 FROM stats) as avg_count
FROM events
WHERE event_date = current_date
HAVING count(*) < (SELECT row_count / 7 FROM stats) * 0.5; -- Alert if < 50% of average
Lineage is a directed acyclic graph (DAG) of your data's journey.
Practitioner Tip: Use OpenLineage to capture this metadata automatically from Spark, Airflow, and Flink jobs.
The most dangerous data bug is the "Distribution Shift." If your ML model expects a value between 0 and 1, but a source system change starts sending values between 0 and 100, your pipeline won't crash, but your model's predictions will be nonsense. Fix: Monitor the Mean and Standard Deviation of critical columns.