Data Governance
Ein Framework aus Richtlinien, Prozessen und Standards zur Verwaltung von Daten – stellt Qualität, Sicherheit, Compliance und Nutzbarkeit von Daten sicher.
Die Dokumentation des Datenflusses von der Quelle bis zum Endprodukt – woher kommen Daten, wie werden sie transformiert, wo werden sie verwendet.
Data Lineage dokumentiert den Weg deiner Daten: Woher kommen sie, was passiert mit ihnen, und wo landen sie am Ende. Wie ein GPS-Tracker für Daten.
Beispiel:
Quelle Transformation Ziel
───────────────────────────────────────────────────────────
CRM-System ──┐
├──→ ETL-Job ──→ Data Warehouse ──→ ML-Modell
Web-Logs ────┘ │ │
│ └──→ Dashboard
│
└──→ Aggregation ──→ Report
Was wird getrackt?
| Aspekt | Frage | Beispiel |
|---|---|---|
| Herkunft | Woher? | CRM-System, API, CSV |
| Transformation | Was wurde gemacht? | JOIN, Filter, Aggregation |
| Abhängigkeiten | Wer nutzt es? | Dashboard, ML-Modell |
| Zeitstempel | Wann? | Letzte Aktualisierung |
| Owner | Wer ist verantwortlich? | Team Data Engineering |
-- models/staging/stg_orders.sql
SELECT
id,
customer_id,
order_date,
total
FROM {{ source('raw', 'orders') }}
WHERE order_date >= '2024-01-01'
-- models/marts/customer_metrics.sql
SELECT
customer_id,
COUNT(*) as order_count,
SUM(total) as lifetime_value
FROM {{ ref('stg_orders') }}
GROUP BY customer_id
dbt generiert automatisch Lineage:
raw.orders → stg_orders → customer_metrics
{
"eventType": "COMPLETE",
"eventTime": "2026-03-11T14:30:00Z",
"run": {
"runId": "abc-123"
},
"job": {
"namespace": "etl",
"name": "transform_orders"
},
"inputs": [
{
"namespace": "postgres",
"name": "raw.orders"
}
],
"outputs": [
{
"namespace": "warehouse",
"name": "staging.orders"
}
]
}
from airflow import DAG
from airflow.providers.openlineage.plugins.adapter import OpenLineageAdapter
with DAG("etl_pipeline") as dag:
extract = PostgresOperator(
task_id="extract_orders",
sql="SELECT * FROM orders"
)
transform = PythonOperator(
task_id="transform",
python_callable=transform_data
)
load = BigQueryOperator(
task_id="load_to_bq",
destination_table="warehouse.orders"
)
extract >> transform >> load
# OpenLineage erfasst automatisch:
# postgres.orders → transform → bigquery.warehouse.orders
def get_downstream_dependencies(table_name):
"""Was bricht, wenn ich diese Tabelle ändere?"""
lineage = get_lineage_graph()
downstream = []
queue = [table_name]
while queue:
current = queue.pop(0)
for dependent in lineage.get_dependents(current):
downstream.append(dependent)
queue.append(dependent.name)
return downstream
# Beispiel
deps = get_downstream_dependencies("raw.orders")
# → ["stg_orders", "customer_metrics", "revenue_dashboard", "churn_model"]
Training Data Lineage:
──────────────────────
raw.customers ──┐
├──→ feature_engineering ──→ training_data ──→ model_v1.0
raw.transactions┘ │
└──→ feature_store
Wenn raw.customers sich ändert:
→ feature_engineering muss neu laufen
→ training_data ist veraltet
→ model_v1.0 sollte neu trainiert werden Data Lineage ist wie ein Stammbaum für Daten: Du kannst jeden Datenpunkt zu seinen Ursprüngen zurückverfolgen und sehen, welche Transformationen er durchlaufen hat – wie bei der Ahnenforschung.
Dokumentiert Datenherkunft (woher?)
Trackt Transformationen (was wurde gemacht?)
Zeigt Abhängigkeiten (wer nutzt die Daten?)
Debugging
Fehlerhafte Daten zur Quelle zurückverfolgen
Sicherheit
DSGVO: Woher kommen personenbezogene Daten?
Impact Analysis
Was bricht, wenn ich diese Tabelle ändere?
Data Quality
Qualitätsprobleme zur Ursache zurückverfolgen
Data Catalog: Was gibt es? (Inventar). Data Lineage: Woher kommt es und wohin geht es? (Fluss). Beide ergänzen sich für Data Governance.
Tools wie dbt, Airflow mit OpenLineage, oder Spark mit Spline erfassen Lineage automatisch aus dem Code. Besser als manuelle Dokumentation.
Ja! Für Reproduzierbarkeit, Debugging und Compliance. Welche Daten haben das Modell trainiert? Woher kamen sie? Wie wurden sie transformiert?