Teilen über


Lesen von Delta-Tabellen mit Iceberg-Clients

Dieser Artikel liefert Details zum Freischalten von Iceberg-Lesemöglichkeiten in Tabellen, die mit Delta Lake in Azure Databricks gespeichert sind. Für dieses Feature wird Databricks Runtime 14.3 LTS oder höher benötigt.

Hinweis

Diese Funktion wurde zuvor als Delta Lake Universal Format (UniForm) bezeichnet.

Sie können eine externe Verbindung so konfigurieren, dass Unity Catalog als Iceberg-Katalog fungiert. Siehe Access Azure Databricks-Tabellen von Apache Iceberg-Clients.

Wie funktionieren Apache Iceberg Reads (UniForm)?

Sowohl Delta Lake als auch Apache Iceberg bestehen aus Parkettdatendateien und einer Metadatenebene. Durch Aktivieren von Iceberg-Lesevorgängen werden Ihre Tabellen so konfiguriert, dass Iceberg-Metadaten asynchron generiert werden, ohne Daten neu zu schreiben, sodass Iceberg-Clients Delta-Tabellen lesen können, die von Azure Databricks geschrieben wurden. Eine einzelne Kopie der Datendateien kann für mehrere Formate verwendet werden.

Wichtig

  • Tabellen mit aktivierten Iceberg-Lesevorgängen verwenden Zstandard anstelle von Snappy als Komprimierungscodec für zugrunde liegende Parkettdatendateien.
  • Die Iceberg-Metadatengenerierung wird asynchron auf der Berechnung ausgeführt, die zum Schreiben von Daten in Delta-Tabellen verwendet wird, wodurch die Ressourcenauslastung des Treibers erhöht werden kann.
  • Eine Dokumentation für die Legacytabellenfunktion IcebergCompatV1 von UniForm finden Sie unter UniForm IcebergCompatV1 (Legacy).

Anforderungen

Um Iceberg-Lesevorgänge zu aktivieren, müssen die folgenden Anforderungen erfüllt sein:

  • Die Delta-Tabelle muss bei Unity Catalog registriert werden. Sowohl verwaltete als auch externe Tabellen werden unterstützt.
  • Für die Tabelle muss die Spaltenzuordnung aktiviert sein. Weitere Informationen finden Sie unter Rename and drop columns with Delta Lake column mapping (Umbenennen und Löschen von Spalten mit Delta Lake-Spaltenzuordnung).
  • Die Delta-Tabelle muss eine minReaderVersion>= 2 und eine minWriterVersion>= 7 aufweisen. Siehe Delta Lake Featurekompatibilität und Protokolle.
  • Schreibvorgänge in die Tabelle müssen Databricks Runtime 14.3 LTS oder höher verwenden.

Hinweis

Sie können Löschvektoren für eine Tabelle mit aktivierten Iceberg-Lesevorgängen nicht aktivieren.

Verwenden Sie REORG , um Löschvektoren zu deaktivieren und zu löschen, während Iceberg-Lesevorgänge bei einer bestehenden Tabelle mit aktivierten Löschvektoren zulässig sind. Siehe Aktivieren oder Aktualisieren der Iceberg-Leseunterstützung mithilfe von REORG.

Iceberg-Lesevorgänge aktivieren (UniForm)

Wichtig

Wenn Sie Iceberg-Lesevorgänge aktivieren, wird der Tabelle die Funktion zum Schreiben des Protokolls IcebergCompatV2 hinzugefügt. Nur Clients, die diese Tabellenfunktion unterstützen, können in Tabellen mit aktivierten Iceberg-Lesevorgängen schreiben. In Azure Databricks müssen Sie Databricks Runtime 14.3 LTS oder höher verwenden, um in aktivierte Tabellen zu schreiben.

IcebergCompatV2 hängt von der Spaltenzuordnung ab. Sobald IcebergCompatV2 für eine Tabelle aktiviert ist, können Sie die columnMapping Tabellenfunktion nicht ablegen.

Sie können Iceberg-Lesevorgänge deaktivieren, indem Sie die delta.universalFormat.enabledFormats Tabelleneigenschaft aufheben. Upgrades auf Delta Lake-Reader- und Writer-Protokollversionen können nicht rückgängig gemacht werden.

Sie müssen die folgenden Tabelleneigenschaften festlegen, um Iceberg-Lesevorgänge zu aktivieren:

'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'

Wenn Sie Iceberg-Lesevorgänge zum ersten Mal aktivieren, beginnt die asynchrone Metadatengenerierung. Diese Aufgabe muss abgeschlossen werden, bevor externe Clients die Tabelle mithilfe von Iceberg abfragen können. Weitere Informationen finden Sie unter Überprüfen des Status der Generierung von Iceberg-Metadaten.

Eine Liste der Einschränkungen finden Sie unter Einschränkungen.

Aktivieren Sie Iceberg-Lesevorgänge während der Tabellenerstellung

Die Spaltenzuordnung muss aktiviert sein, um Iceberg Reads verwenden zu können, und kann nach der Aktivierung nicht mehr deaktiviert werden. Dies geschieht automatisch, wenn Sie iceberg-Lesevorgänge während der Tabellenerstellung aktivieren, wie im folgenden Beispiel gezeigt:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Aktivieren Sie Iceberg-Lesevorgänge in einer vorhandenen Tabelle

In Databricks Runtime 15.4 LTS und höher können Sie Iceberg-Lesevorgänge in einer vorhandenen Tabelle mithilfe der folgenden Syntax aktivieren oder aktualisieren:

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Aktivieren oder Aktualisieren der Iceberg-Leseunterstützung mithilfe von REORG

Sie können REORG verwenden, um Iceberg-Lesevorgänge zu aktivieren und zugrunde liegende Datendateien neu zu schreiben, wie im folgenden Beispiel gezeigt:

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

Verwenden Sie REORG , wenn einer der folgenden Werte zutrifft:

  • In Ihrer Tabelle sind Löschvektoren aktiviert.
  • Sie haben zuvor die IcebergCompatV1-Version von UniForm Iceberg aktiviert.
  • Sie müssen aus Iceberg-Engines lesen, die keine Parquet-Dateien im Hive-Stil unterstützen, wie Athena oder Redshift.

Wann erfolgt die Erstellung von Iceberg-Metadaten?

Azure Databricks löst die Metadatengenerierung asynchron aus, nachdem eine Delta Lake-Schreibtransaktion abgeschlossen wurde. Dieser Metadatengenerierungsprozess verwendet dieselbe Computeressource, mit der die Delta-Transaktion abgeschlossen wurde.

Hinweis

Sie können die Generierung von Iceberg-Metadaten auch manuell auslösen. Weitere Informationen finden Sie unter Manuelles Auslösen der Iceberg-Metadatenkonvertierung.

Um Schreiblatenzen bei der Metadatengenerierung zu vermeiden, können Delta-Tabellen mit häufigen Commits mehrere Delta-Commits in einen an Iceberg-Metadaten bündeln.

Delta Lake stellt sicher, dass nur ein Metadatengenerierungsprozess für eine bestimmte Computeressource ausgeführt wird. Commits, die einen zweiten gleichzeitigen Metadatengenerierungsprozess auslösen würden, werden erfolgreich zu Delta committet, lösen jedoch keine asynchrone Iceberg-Metadatengenerierung aus. Dies verhindert kaskadierende Wartezeiten bei der Generierung von Metadaten für Workloads mit häufigen Commits (Sekunden bis Minuten zwischen Commits).

Weitere Informationen finden Sie unter Delta- und Iceberg-Tabellenversionen.

Delta- und Iceberg-Tabellenversionen

Sowohl Delta Lake als auch Iceberg ermöglichen Zeitreiseabfragen mithilfe von Tabellenversionen oder Zeitstempeln, die in Tabellenmetadaten gespeichert sind.

In der Regel stimmen Delta-Tabellenversionen weder durch den Commit-Zeitstempel noch durch die Versions-ID mit Iceberg-Versionen überein. Wenn Sie überprüfen möchten, welche Version einer Delta-Tabelle einer bestimmten Version einer Iceberg-Tabelle entspricht, können Sie die entsprechenden Tabelleneigenschaften verwenden. Weitere Informationen finden Sie unter Überprüfen des Status der Generierung von Iceberg-Metadaten.

Überprüfen des Status der Generierung von Iceberg-Metadaten

Das Aktivieren von Iceberg-Lesevorgängen in einer Tabelle fügt die folgenden Felder zu Unity-Katalog- und Iceberg-Tabellenmetadaten hinzu, um den Status der Metadatengenerierung nachzuverfolgen:

Metadatenfeld Beschreibung
converted_delta_version Die neueste Version der Delta-Tabelle, für die erfolgreich Iceberg-Metadaten generiert wurden.
converted_delta_timestamp Der Zeitstempel des neuesten Delta-Commits, für den erfolgreich Iceberg-Metadaten generiert wurden.

In Azure Databricks können Sie diese Metadatenfelder wie folgt überprüfen:

  • Überprüfen des Abschnitts Delta Uniform Iceberg, der von DESCRIBE EXTENDED table_name zurückgegeben wird
  • Überprüfen von Tabellenmetadaten mit dem Katalog-Explorer

Informationen zum Überprüfen von Tabelleneigenschaften außerhalb von Azure Databricks finden Sie in der Dokumentation für Ihren Iceberg-Reader-Client. Für OSS Apache Spark können Sie diese Eigenschaften mithilfe der folgenden Syntax anzeigen:

SHOW TBLPROPERTIES <table-name>;

Manuelles Auslösen der Iceberg-Metadatenkonvertierung

Sie können die Generierung von Iceberg-Metadaten für die neueste Version der Delta-Tabelle manuell auslösen. Dieser Vorgang wird synchron ausgeführt. Das bedeutet, dass die in Iceberg verfügbaren Tabelleninhalte nach Abschluss die neueste Version der Delta-Tabelle widerspiegeln, die beim Starten des Konvertierungsprozesses verfügbar ist.

Dieser Vorgang sollte unter normalen Bedingungen nicht erforderlich sein, kann jedoch hilfreich sein, wenn folgende Probleme auftreten:

  • Ein Cluster wird beendet, bevor die Metadaten erfolgreich automatisch generiert wurden.
  • Ein Fehler oder Auftragsfehler unterbricht die Generierung der Metadaten.
  • Ein Client, der die Erstellung von UniForm Iceberg-Metadaten nicht unterstützt, schreibt in die Delta-Tabelle.

Verwenden Sie die folgende Syntax, um die Iceberg-Metadatengenerierung manuell auszulösen:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Siehe REPAIR TABLE.

Lesen von Iceberg mithilfe eines JSON-Metadatenpfads

Manche Iceberg-Clients erfodern, dass Sie einen Pfad zu versionierten Metadatendateien angeben, um externe Iceberg-Tabellen zu registrieren. Jedes Mal, wenn Azure Databricks eine neue Version der Delta-Tabelle in Iceberg konvertiert, wird eine neue JSON-Metadatendatei erstellt.

Clients, die Metadaten-JSON-Pfade zum Konfigurieren von Iceberg verwenden, umfassen BigQuery. Konfigurationsdetails finden Sie in der Dokumentation des Iceberg-Reader-Clients.

Delta Lake speichert Iceberg-Metadaten unter dem Tabellenverzeichnis mithilfe des folgenden Musters:

<table-path>/metadata/<version-number>-<uuid>.metadata.json

In Azure Databricks können Sie diesen Metadatenspeicherort wie folgt überprüfen:

  • Überprüfen des Abschnitts Delta Uniform Iceberg, der von DESCRIBE EXTENDED table_name zurückgegeben wird
  • Überprüfen von Tabellenmetadaten mit dem Katalog-Explorer

Wichtig

Pfadbasierte Iceberg-Reader-Clients erfordern möglicherweise das manuelle Updaten und Aktualisieren von Metadaten-JSON-Pfaden, um aktuelle Tabellenversionen zu lesen. Benutzer können beim Abfragen von Iceberg-Tabellen mit veralteten Versionen auf Fehler stoßen, da Parquet-Datendateien mithilfe von VACUUM aus der Delta-Tabelle entfernt werden.

Begrenzungen

Für alle Tabellen mit aktivierten Iceberg-Lesevorgängen gelten die folgenden Einschränkungen:

  • Iceberg v2-Lesevorgänge funktionieren nicht für Tabellen mit aktivierten Löschvektoren. Apache Iceberg v3 unterstützt jedoch Löschvektoren. Siehe Verwenden von Apache Iceberg v3-Features und Was sind Löschvektoren?.
  • Auf die Delta-Tabelle muss über den Namen (nicht Pfad) zugegriffen werden, um die Generierung von Iceberg-Metadaten automatisch auszulösen.
  • Iceberg-Lesevorgänge können nicht für materialisierte Ansichten oder Streamingtabellen aktiviert werden.
  • Delta-Tabellen mit Iceberg-Lesevorgängen unterstützen VOID-Typen nicht.
  • Iceberg-Clientunterstützung ist schreibgeschützt. Schreibvorgänge werden nicht unterstützt.
  • Iceberg Reader-Clients können individuelle Einschränkungen haben, unabhängig von der Azure Databricks-Unterstützung für Iceberg-Lesevorgänge. Weitere Informationen finden Sie in der Dokumentation für Ihren ausgewählten Client.
  • Empfänger von Delta Sharing können Delta-Tabellen als Iceberg-Tabellen lesen, indem sie die Iceberg-Lesevorgänge mit der Iceberg REST-Katalog-API aktivieren. Dieses Feature befindet sich in der Public Preview. Siehe "Freigabe für externe Iceberg-Clients aktivieren".
  • Einige von Iceberg-Lesevorgängen genutzte Delta Lake-Tabellenfeatures werden von einigen Delta Sharing-Leser-Clients nicht unterstützt. Weitere Informationen finden Sie unter Was ist Delta Sharing?.

Change Data Feed funktioniert für Delta-Clients, wenn Iceberg-Lesevorgänge aktiviert sind, wird jedoch nicht von Iceberg unterstützt.