Freigeben über


Zeilenverfolgung in Databricks

Die Zeilenverfolgung ermöglicht Azure Databricks das Nachverfolgen von Zeilenebenen in einer Tabelle. Für einige inkrementelle Aktualisierungen für materialisierte Ansichten ist dieses Feature erforderlich.

Alle Apache Iceberg v3-Tabellen enthalten Zeilenverfolgung. Für Delta Lake-Tabellen müssen Sie die Zeilenverfolgung explizit aktivieren.

Wichtig

Die Zeilenverfolgung ist in Databricks Runtime 14.1 und höher verfügbar.

Die Zeilenverfolgung ist ein Tabellenfeature und verwendet ein höheres Tabellen-Writer-Protokoll als einige Clients. Tabellenprotokollversionen können nicht heruntergestuft werden, und Tabellen mit aktivierter Zeilenverfolgung können nicht von Clients geschrieben werden, die nicht alle aktivierten Writer-Protokolltabellenfeatures unterstützen. Siehe Delta Lake Featurekompatibilität und Protokolle.

Aktivieren der Zeilennachverfolgung in Delta-Tabellen

Um die Zeilennachverfolgung für eine Delta Lake-Tabelle zu aktivieren, legen Sie die Tabelleneigenschaft delta.enableRowTracking = true während der Tabellenerstellung fest:

CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;

Verwenden Sie das folgende Beispiel, um die Zeilenverfolgung für eine vorhandene Delta Lake-Tabelle zu aktivieren:

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);

Wichtig

Durch das Aktivieren der Zeilennachverfolgung für vorhandene Tabellen werden automatisch Zeilen-IDs und Zeilen-Commitversionen allen vorhandenen Zeilen in der Tabelle zugewiesen. Dieser Vorgang kann dazu führen, dass mehrere neue Versionen der Tabelle erstellt werden, und eine erhebliche Zeit in Anspruch nehmen.

Durch das Klonen einer Tabelle wird ein separater Verlauf erstellt, sodass die Zeilen-IDs und Zeilen-Commitversionen in geklonten Tabellen nicht mit denen in der ursprünglichen Tabelle übereinstimmen.

Was ist das Schema der Metadatenfelder für die Zeilennachverfolgung?

Die Zeilennachverfolgung fügt der Tabelle zwei ausgeblendete Metadatenfelder hinzu. Sie können diese Felder explizit zu Ihrer Abfrage hinzufügen, um die Werte zurückzugeben.

Spaltenname type Werte Erklärung
_metadata.row_id Long Der eindeutige Bezeichner der Zeile. Eine Zeile behält dieselbe ID bei, wenn sie mithilfe einer MERGE- oder UPDATE-Anweisung geändert wird.
_metadata.row_commit_version Long Die Delta-Protokoll- oder Tabellenversion, bei der die Zeile zuletzt eingefügt oder aktualisiert wurde. Einer Zeile wird immer dann eine neue Version zugewiesen, wenn sie mithilfe einer MERGE- oder UPDATE-Anweisung geändert wird.

Einige Vorgänge speichern diese Metadatenfelder mithilfe des Transaktionsprotokolls. Das Ausführen von OPTIMIZE- oder REORG-Vorgängen in einer Tabelle mit aktivierter Zeilennachverfolgung schreibt Datendateien neu, um diese Felder zu speichern.

Deaktivieren der Zeilennachverfolgung in Delta-Tabellen

Um die Zeilennachverfolgung für eine Delta Lake-Tabelle zu deaktivieren, legen Sie die Tabelleneigenschaft auf false.

ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);

Wichtig

Durch das Deaktivieren der Zeilennachverfolgung wird das entsprechende Tabellenfeature nicht entfernt und die Tabellenprotokollversion wird nicht herabgestuft. Außerdem werden die Metadatenfelder nicht aus der Zieltabelle entfernt.

Wenn die Zeilennachverfolgung deaktiviert ist, sind die generierten Zeilen-IDs nicht mehr zuverlässig zum Nachverfolgen eindeutiger Zeilen.

Begrenzungen

Auf die Metadatenfelder, die Zeilen-IDs und Zeilen-Commitversionen enthalten, kann beim Lesen des Änderungsdatenstroms nicht zugegriffen werden. Siehe Verwenden des Delta Lake-Änderungs-Datenfeeds in Azure Databricks.