Freigeben über


Vollständige Aktualisierung für Streamingtabellen

Eine vollständige Aktualisierung einer Streamingtabelle verwirft alle vorhandenen Daten und Metadaten und startet den Datenstrom von Anfang an neu. Insbesondere schneidet sie die Streamingtabelle ab, entfernt alle Prüfpunktdaten und startet den Streamingprozess mit neuen Prüfpunkten für jeden Fluss, der in die Tabelle geschrieben wird. Diese Seite beschreibt, wann Sie möglicherweise eine vollständige Aktualisierung ausführen müssen, und die Auswirkungen der Ausführung einer vollständigen Aktualisierung. Es enthält auch bewährte Methoden für vollständige Aktualisierungen.

Anleitungen zum Auslösen einer vollständigen Aktualisierung finden Sie unter Ausführen eines Pipelineupdates.

Auswirkungen auf Datenquellen

Eine vollständige Aktualisierung entfernt alle vorhandenen Daten aus der Streamingtabelle. Wenn Ihre Datenquelle Aufbewahrungsgrenzwerte aufweist , z. B. Kafka-Themen mit kurzen Aufbewahrungszeiträumen, können einige historische Daten nach einer vollständigen Aktualisierung nicht wiederhergestellt werden.

Wenn Ihre Quelle z. B. Kafka mit 24-Stunden-Aufbewahrung ist und Sie nach diesem Fenster eine vollständige Aktualisierung ausführen, sind ältere Nachrichten nicht mehr verfügbar und können nicht erneut verarbeitet werden.

Hinweis

Vollständige Aktualisierungen werden für Streaming-Workloads mit hohem Volumen nicht empfohlen, oder wenn die vorgelagerte Aufbewahrung verhindert, dass verlaufsbezogene Daten wiedergegeben werden.

Wenn die Streamingtabelle abhängige Downstreamtabellen enthält, schlägt die Pipeline fehl, bis diese Tabellen ebenfalls vollständig aktualisiert werden, es sei denn, die Streamingtabelle hat skipChangeCommits aktiviert. Nachgelagerte materialisierte Ansichten müssen ebenfalls vollständig aktualisiert werden.

Wann eine vollständige Aktualisierung ausgeführt werden soll

Vollständige Aktualisierungen auf Lakeflow Spark Declarative Pipelines müssen explizit ausgelöst werden. Sie können eine vollständige Aktualisierung ausführen, indem Sie in der Pipeline-Benutzeroberfläche auf "Vollständig aktualisieren" klicken oder die automatische vollständige Aktualisierung in Lakeflow Connect aktivieren.

Eine vollständige Aktualisierung wird empfohlen, wenn Änderungen verhindern, dass eine Streamingabfrage sicher vom vorhandenen Prüfpunkt fortgesetzt wird oder wenn zuvor verarbeitete Daten mit der aktualisierten Logik, dem Schema oder der Quellkonfiguration inkonsistent werden. In den folgenden Abschnitten werden allgemeine Szenarien beschrieben.

Schema-Änderungen

Die folgenden Schemaänderungen in der Zieltabelle sind nicht abwärtskompatibel und erfordern eine vollständige Aktualisierung:

  • Das Umbenennen von Spalten ohne aktivierten Spaltenzuordnungsmodus.
  • Ändern von Deduplizierungsspalten
  • Ändern von Spaltendatentypen, einschließlich:
    • Typeneinschränkung (zum Beispiel BIGINT → INT oder DOUBLE → FLOAT).
    • Inkompatible Typänderungen (z. B. STRING → INT).
  • Festes Löschen von Spalten aus dem Tabellenschema.

Für diese Arten von Schemaänderungen empfiehlt Databricks, eine neue Spalte mit dem gewünschten Schema oder Namen zu erstellen und dann eine Ansicht über der Streamingtabelle zu verwenden, um die alten und neuen Werte zu verknüpfen.

Änderungen des Layouts für physische Daten

Für die folgenden Änderungen des physischen Datenlayouts ist eine vollständige Aktualisierung erforderlich:

  • Das Migrieren von der Legacy-Partitionierung zu einem neuen Clusteringschema.

Primäre Quelländerungen

Für die folgenden Upstream-Quelländerungen ist eine vollständige Aktualisierung erforderlich:

  • Ändern der Quelltabellen, die von der Streamingabfrage gelesen werden.
  • Wechseln zwischen Quelltypen (z. B. Kafka zu Delta oder Auto Loader zu Kafka).
  • Ändern von Quellspeicherorten, z. B. Tabellenpfade oder Kafka-Themenabonnements.
  • Löschen und erneutes Erstellen einer Delta-Quelltabelle, auch wenn das Schema unverändert bleibt.

Zustandsbehaftete Verarbeitungsänderungen

Die folgenden zustandsbehafteten Verarbeitungsänderungen erfordern eine vollständige Aktualisierung:

  • Ändern von Aggregationsgruppierungsschlüsseln oder Aggregatfunktionen.
  • Hinzufügen oder Entfernen von Aggregationen.
  • Ändern von Verknüpfungsschlüsseln oder Verknüpfungstypen
  • Hinzufügen oder Entfernen von Verknüpfungen.
  • Ändern von Deduplizierungsspalten oder Deduplizierungslogik.

Probleme mit der Datenkontinuität

Eine vollständige Aktualisierung kann erforderlich sein, wenn die Datenkontinuität kompromittiert wird:

  • CDC-Protokolle sind aufgrund des Ablaufs der Aufbewahrungsfrist nicht mehr verfügbar.
  • Beschädigung oder Löschung des Streaming-Checkpoint-Verzeichnisses.
  • Beschädigung oder Verlust von Schemanachverfolgungs- oder Schemaspeicherortdateien.

Weitere Informationen zum Wiederherstellen einer Pipeline aus Prüfpunktfehlern finden Sie unter "Wiederherstellen einer Pipeline aus Streamingprüfpunktfehlern".

Einschränkungen

Die folgenden Einschränkungen gelten für vollständige Aktualisierungen. Informationen zum Arbeiten innerhalb dieser Einschränkungen finden Sie unter "Bewährte Methoden ".

  • Eine vollständige Aktualisierung verarbeitet keine Daten, es sei denn, Ihre Quelle behält das vollständige historische Dataset bei.
  • Große Datasets können umfangreiche Aktualisierungen kostspielig und zeitaufwändig machen.
  • Nachgeschaltete Verbraucher, die von der Tabelle abhängen, können ausfallen oder unvollständige Ergebnisse zurückgeben, bis die Aktualisierung abgeschlossen ist.

Bewährte Methoden

Situation Bewährte Methoden
Design für Stabilität Planen Sie Ihr Schema, um Änderungen zu vermeiden, die eine vollständige Aktualisierung erfordern. Das Hinzufügen von Spalten ist im Allgemeinen sicher, während beim Ändern vorhandener Spalten oder Partitionierungsschemas in der Regel eine Neukompilierung der Tabelle erforderlich ist.
Streamen von Quellen mit kurzen Aufbewahrungszeiträumen Das Streamen von Quellen wie z. B. einem Kafka-Thema, das keine langen Aufbewahrungszeiträume hat, bedeutet, dass eine vollständige Aktualisierung Daten verliert, die nicht noch in der Quelle enthalten sind.
Um den Verlust historischer Daten zu vermeiden, streamen Sie Rohdaten in eine Streamingtabelle (eine Bronzetabelle in der Medallion-Architektur). Verwenden Sie flexible Spaltentypen (z. B. Variante oder Zeichenfolge), um diese Tabelle zu vermeiden, die eine vollständige Aktualisierung erfordert, wenn sich die Upstreamdaten ändern. Diese Tabelle kann Verlaufsdaten speichern und von nachgelagerten Streamingtabellen verwendet werden (die möglicherweise strengere Typen oder andere strukturelle Änderungen aufweisen). Wenn für die nachgeschalteten Tabellen eine vollständige Aktualisierung erforderlich ist, enthält diese Tabelle Verlaufsdaten, ohne dass eine vollständige Aktualisierung selbst erforderlich ist.
Erwägen Sie Alternativen vor dem Ausführen einer vollständigen Aktualisierung Zu den Alternativen gehören:
  • Wenn Sie die Quelle eines Flusses ändern, sollten Sie einen neuen Fluss erstellen, anstatt den vorhandenen Fluss einer Streamingtabelle zu aktualisieren. Dadurch bleiben die vorhandenen Daten in der Tabelle erhalten, können jedoch doppelte Daten schreiben, da der neue Fluss über einen neuen Prüfpunkt verfügt.
  • Alternativ können Sie den Prüfpunkt zurücksetzen, dies kann jedoch dazu führen, dass doppelte Daten in die Zieltabelle geschrieben werden.
  • Wenn keine der beiden Optionen akzeptabel ist, sollten Sie eine neue Streamingtabelle erstellen und eine Ansicht verwenden, um die alten und neuen Streamingtabellen zu verknüpfen.
Wenn eine vollständige Aktualisierung erforderlich ist Befolgen Sie die folgenden bewährten Methoden, wenn eine vollständige Aktualisierung erforderlich ist :
  • Testen Sie den Vorgang in einer Entwicklungs- oder Stagingumgebung.
  • Dokumentieren Sie nachgeschaltete Abhängigkeiten, die betroffen sind.
  • Planen Sie die Aktualisierung während eines Wartungsfensters, um die Auswirkungen auf Produktionsworkloads zu minimieren.
  • Stellen Sie sicher, dass das Quellsystem genügend historische Daten aufbewahrt, um den Datenstrom wiederzuverwenden.

Um Daten nach einer vollständigen Aktualisierung aufzufüllen, können Sie einen append onceFlow erstellen. Dadurch wird ein einmaliges Backfill ausgeführt, ohne nach dem ersten Backfill weiterzulaufen. Der Code verbleibt in Ihrer Pipeline, und wenn die Pipeline jemals wieder vollständig aktualisiert wird, wird der Rücklauf erneut ausgeführt.