Erstellen von Ingestion-Pipelines
Wann verwenden
- Extrahieren aus Datenbanken, APIs, Dateien oder SaaS in ein Warehouse/Lake.
- Entwerfen von inkrementeller Extraktion, Wasserzeichen oder CDC.
- Handhabung von API-Paginierung, Ratenbegrenzungen und Wiederholungen.
- Entscheidung zwischen verwalteten EL-Tools (Fivetran/Airbyte) und benutzerdefiniertem Code.
- NICHT verwenden für die Transformation bereits geladener Daten (dbt/Spark-Fähigkeiten verwenden).
Arbeitsablauf
- [ ] Extraktionsmodus wählen: vollständiger Snapshot vs. inkrementell vs. CDC
- [ ] Zuverlässiges High-Water-Mark auswählen (updated_at, LSN/binlog, Sequenz)
- [ ] Rohdaten unveränderlich ablegen (anhängen), dann nachgelagert transformieren
- [ ] Ladevorgang idempotent gestalten (Upsert/Partitionsüberschreibung nach Schlüssel)
- [ ] Paginierung, Ratenbegrenzungen, Wiederholungen und verspätete Daten handhaben
- Modus wählen. Vollständiger Neuladevorgang (kleine/Dimensionstabellen), inkrementell über ein High-Water-Mark (die meisten Faktentabellen) oder CDC (hochvolumiges OLTP, wenn Löschungen und jede Änderung benötigt werden).
- Vertrauenswürdiges Wasserzeichen auswählen.
updated_atfunktioniert nur, wenn die Quelle es immer aktualisiert; andernfalls DB-Protokollpositionen (LSN/binlog/SCN) oder eine monotone Sequenz verwenden. Das letzte Wasserzeichen speichern und von dort fortsetzen. - Rohdaten unveränderlich ablegen. Rohe Extrakte (Bronze) mit Lademetadaten anhängen; Transformationen nachgelagert durchführen, sodass ein erneutes Abspielen ohne erneuten Quelle-Zugriff möglich ist.
- Idempotenter Ladevorgang. Upsert nach natürlichem Schlüssel oder Überschreibung der Partition, sodass Wiederholungen und Überlappungen keine Duplikate erzeugen (siehe
writing-idempotent-transformations). - Robust gegenüber Paginierung, Ratenbegrenzungen und verspäteten Daten.
Muster
Inkrementelle Extraktion mit Überlappung für verspätete Daten:
-- Ein kleines Überlappungsfenster über das letzte Wasserzeichen hinaus ziehen, um verspätete Updates zu erfassen,
-- dann per Upsert nach Schlüssel, damit die Überlappung keine Duplikate erzeugt.
SELECT * FROM source.orders
WHERE updated_at >= :last_watermark - INTERVAL '3 days';
CDC — Datenbankprotokoll lesen (Debezium/nativ), um Einfügungen, Aktualisierungen und Löschungen zu erfassen (die wasserzeichenbasierte Extraktion nicht sieht). Änderungen mit MERGE anwenden, dabei die Commit-Position der Änderung für die Sortierung verwenden.
API-Paginierung + Ratenbegrenzungen — Cursor/Next-Page-Token folgen; bei 429/5xx zurückziehen und mit exponentiellem Backoff und Jitter wiederholen; Fortschritt zwischenspeichern, sodass ein Fehler in der Mitte fortsetzt.
Verwaltet vs. benutzerdefiniert — Fivetran/Airbyte für Standard-Connectoren verwenden (sie handhaben Schema-Drift, inkrementellen Zustand, Wiederholungen); benutzerdefinierten Code nur für ungewöhnliche Quellen oder bei strengen Kontroll-/Kostenanforderungen schreiben.
Häufige Fallstricke
updated_at-Wasserzeichen, wenn die Quelle es nicht zuverlässig setzt — Zeilen werden unbemerkt übersehen; validieren oder auf protokollbasiertes CDC umstellen.- Kein Überlappungsfenster — verspätete Updates gehen zwischen den Läufen verloren.
- Wasserzeichenbasierte Extraktion, die Löschungen erwartet — kann sie nicht sehen; CDC oder regelmäßige vollständige Abgleiche verwenden.
- Während der Extraktion transformieren — macht erneutes Abspielen unmöglich; zuerst roh ablegen.
- Ratenbegrenzungen/Paginierungs-Grenzfälle ignorieren — teilweise Ziehungen, die vollständig erscheinen; Zwischenspeichern und Zählungen überprüfen.
- Nicht-idempotenter Ladevorgang — Wiederholungen und Überlappungsfenster erzeugen Duplikate.