Delta-Lake-Tabellen mit Iceberg-Clients lesen

Verfügbar in Databricks Runtime 14.3 LTS und höher, konfiguriert Iceberg Reads Delta-Lake-Tabellen, um automatisch Iceberg-Metadaten zu generieren, sodass Iceberg-Clients Delta-Lake-Daten lesen können, ohne Dateien neu zu schreiben.

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

So funktionieren Lesevorgänge in Iceberg

Sowohl Delta Lake als auch Apache Iceberg bestehen aus Parkettdatendateien und einer Metadatenebene. Wenn Sie Iceberg-Reads aktivieren, konfiguriert Azure Databricks Ihre Tabellen so, dass sie das Universal Format (UniForm) für die Metadatenschicht verwenden. UniForm erzeugt automatisch Iceberg-Metadaten asynchron zusammen mit den Delta Lake-Metadaten, ohne die Parquet-Datendateien neu zu schreiben. Eine einzige Kopie der Datendateien unterstützt sowohl Delta- als auch Iceberg-Clients.

Berücksichtigen Sie bei der Verwendung von Iceberg-Lesevorgängen Folgendes:

  • Delta Lake-Tabellen mit aktivierten Iceberg-Lesezugriffen verwenden Zstandard anstelle von Snappy als Komprimierungs-Codec für zugrunde liegende Parquet-Datendateien.
  • Die Iceberg-Metadatengenerierung wird asynchron auf der Berechnung ausgeführt, die zum Schreiben von Daten in Delta Lake-Tabellen verwendet wird, wodurch die Ressourcenauslastung des Treibers erhöht werden kann.

Dokumentation zur Legacy-UniForm-Tabellenfunktion finden Sie unter Legacy UniForm IcebergCompatV1IcebergCompatV1.

Anforderungen

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

  • Die Tabelle "Delta Lake" muss im Unity-Katalog registriert werden. Sowohl verwaltete als auch externe Tabellen werden unterstützt.
  • Für die Tabelle muss die Spaltenzuordnung aktiviert sein. Siehe Umbenennen und Löschen von Spalten mit der Delta Lake-Spaltenzuordnung.
    • Sobald IcebergCompatV2 für eine Tabelle aktiviert wurde, können Sie die columnMapping Tabellenfunktion nicht entfernen.
  • Die Delta Lake-Tabelle muss minReaderVersion>= 2 und minWriterVersion>= 7 haben. 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 vollständig zu entfernen und gleichzeitig Iceberg-Lesezugriffe für eine vorhandene Tabelle zu aktivieren, in der Löschvektoren aktiviert sind. Siehe Aktivieren oder Aktualisieren der Iceberg-Leseunterstützung mithilfe von REORG.

Iceberg-Reads aktivieren

Hinweis

Das Aktivieren von Iceberg-Lesezugriffen fügt das IcebergCompatV2 Feature für das Schreibprotokoll hinzu und aktualisiert das Writer-Protokoll. Nur Clients, die dieses Tabellenfeature unterstützen, können in die Tabelle schreiben. Dies kann sich auf die Kompatibilität mit externen Delta Lake-Clients auswirken. Siehe Delta Lake Featurekompatibilität und Protokolle.

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.

Während der Tabellenerstellung

Die Spaltenzuordnung wird automatisch aktiviert, wenn Sie bei der Tabellenerstellung Lesezugriffe für Iceberg aktivieren:

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

Databricks empfiehlt, sie für Kompatibilitätszwecke festzulegen delta.columnMapping.mode = id . Siehe Umbenennen und Löschen von Spalten mit der Delta Lake-Spaltenzuordnung.

In einer vorhandenen Tabelle

So aktivieren Sie Iceberg-Lesevorgänge in einer vorhandenen Tabelle auf Databricks Runtime 15.4 LTS und höher:

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

Ausführliche Informationen zum name Spaltenzuordnungsmodus finden Sie unter Spaltenzuordnungsmodi.

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

Verwenden Sie REORG, um Iceberg-Lesevorgänge zu aktivieren, wenn eine der folgenden Bedingungen zutrifft:

  • Sie haben Löschvektoren für Ihre Tabelle 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 wie Athena oder Redshift unterstützen.

Um Iceberg-Lesevorgänge zu aktivieren und zugrunde liegende Datendateien neu zu schreiben, verwenden Sie REORG wie im folgenden Beispiel:

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

Überprüfen, ob Iceberg-Lesevorgänge aktiviert sind

Verwenden Sie DESCRIBE EXTENDED , um zu überprüfen, dass Iceberg-Reads für Ihre Tabelle aktiviert sind:

DESCRIBE EXTENDED catalog_name.schema_name.table_name;

Suchen Sie in der Ausgabe nach dem Abschnitt Delta Uniform Iceberg. Wenn dieser Abschnitt vorhanden ist, sind Iceberg-Lesevorgänge in Ihrer Tabelle aktiviert.

Alternativ kannst du auch SHOW TBLPROPERTIES verwenden:

SHOW TBLPROPERTIES catalog_name.schema_name.table_name;

Überprüfen Sie die folgenden Eigenschaften:

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

Wenn beide Eigenschaften mit diesen Werten vorhanden sind, sind Iceberg-Lesevorgänge aktiviert.

Iceberg-Lesevorgänge deaktivieren

Sie können Iceberg-Lesevorgänge deaktivieren, indem Sie die delta.universalFormat.enabledFormats Tabelleneigenschaft aufheben:

ALTER TABLE table_name UNSET TBLPROPERTIES ('delta.universalFormat.enabledFormats');

Upgrades auf Delta Lake-Lese- und Writer-Protokollversionen können nicht rückgängig gemacht werden. Siehe Delta Lake Featurekompatibilität und Protokolle.

Iceberg-Metadatengenerierung

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

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

Um Schreibwartezeiten zu vermeiden, die mit der Metadatengenerierung verknüpft sind, können Delta Lake-Tabellen mit häufigen Commits mehrere Delta Lake-Commits in einem einzigen Commit für Iceberg-Metadaten gruppieren.

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 zwar erfolgreich in Delta Lake 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.

Versionen von Delta Lake-Tabellen stimmen nicht zwangsläufig mit Iceberg-Versionen überein, weder anhand des Commit-Zeitstempels noch anhand der Versions-ID. Verwenden Sie die entsprechenden Tabelleneigenschaften, um zu überprüfen, welche Version einer Delta Lake-Tabelle eine bestimmte Version einer Iceberg-Tabelle entspricht. 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 Description
converted_delta_version Die neueste Version der Delta Lake-Tabelle, für die Iceberg-Metadaten erfolgreich generiert wurden.
converted_delta_timestamp Der Zeitstempel des neuesten Delta Lake-Commits, für den Iceberg-Metadaten erfolgreich generiert wurden.

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

  • Der Abschnitt Delta Uniform Iceberg, der von DESCRIBE EXTENDED table_name zurückgegeben wird, wird überprüft.
  • Ü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 Iceberg-Metadatengenerierung manuell für die neueste Version der Delta Lake-Tabelle auslösen. Dieser Vorgang wird synchron ausgeführt. Nach Abschluss des Vorgangs spiegeln die in Iceberg verfügbaren Tabelleninhalte die neueste Version der Delta Lake-Tabelle wider, die beim Start des Konvertierungsprozesses verfügbar ist.

Dieser Vorgang ist unter normalen Bedingungen nicht erforderlich. Verwenden Sie es, zur Wiederherstellung nach Folgendem:

  • 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 Lake-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

Einige Iceberg-Clients, z. B. BigQuery, erfordern, dass Sie einen Pfad zu versionsierten Metadatendateien bereitstellen, um externe Iceberg-Tabellen zu registrieren. Jedes Mal, wenn Azure Databricks eine neue Version der Delta Lake-Tabelle in Iceberg konvertiert, wird eine neue JSON-Metadatendatei erstellt.

Ausführliche Informationen zur Konfiguration finden Sie in der Dokumentation für Ihren spezifischen Iceberg Reader-Client.

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:

  • Der Abschnitt Delta Uniform Iceberg, der von DESCRIBE EXTENDED table_name zurückgegeben wird, wird überprüft.
  • Überprüfen von Tabellenmetadaten mit dem Katalog-Explorer

Important

Pfadbasierte Iceberg-Reader-Clients erfordern möglicherweise das manuelle Updaten und Aktualisieren von Metadaten-JSON-Pfaden, um aktuelle Tabellenversionen zu lesen. Beim Abfragen von Iceberg-Tabellen mit veralteten Versionen können Fehler auftreten, da Parquet-Datendateien mit VACUUM aus der Delta Lake-Tabelle entfernt werden. Siehe VACUUMBereinigung von Iceberg-Metadaten.

VACUUM und Iceberg-Metadatenbereinigung

Bei Delta-Lake-Tabellen mit aktivierten Iceberg-Reads sammeln sich Iceberg-Metadaten im metadata/ Verzeichnis, wenn sich die Tabelle ändert. OPTIMIZE und die Konvertierung in Iceberg-Operationen löschen die Metadaten älterer Tabellenversionen nicht. Nur VACUUM entfernt es.

Verfügbar in Databricks Runtime 17.2 und höher, VACUUM löscht nicht nachgefolgte Dateien im metadata/ Verzeichnis, während die Iceberg-Metadaten erhalten bleiben, die Clients zum Lesen aktueller Tabellenversionen benötigen. Diese Bereinigung läuft im FULL Modus, der standardmäßig für VACUUMist.

Um Metadaten für ältere Tabellenversionen zu bereinigen, führen Sie delta.deletedFileRetentionDuration nach Ablauf der VACUUM Aufbewahrungsfrist aus:

VACUUM table_name FULL

Siehe Full-versus-Lite-Modus für mehr Informationen zu Vakuummodi und Konfigurieren Sie Datenspeicherung für Zeitreise-Abfragen für mehr Informationen zur Aufbewahrungszeit.

Wenn prädiktive Optimierung aktiviert ist, übernimmt Databricks diese Bereinigung automatisch, sodass man die Iceberg-Metadaten-Bereinigung nicht manuell ausführen VACUUM muss.

Einschränkungen

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

  • Die 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.
  • Löschvektoren werden für Iceberg v2-Lesevorgänge nicht unterstützt. Apache Iceberg v3 unterstützt jedoch Löschvektoren. Siehe Verwenden von Apache Iceberg v3-Features und Löschvektoren in Databricks.
  • Iceberg-Lesezugriffe können nicht für materialisierte Ansichten oder Streamingtabellen aktiviert werden, die IcebergCompatV2 verwenden. Für pipelineverwaltete materialisierte Ansichten und Streaming-Tabellen können Sie den externen Iceberg-Zugriff mit IcebergCompatV3 aktivieren. Siehe Aktivieren des externen Datenzugriffs für Streamingtabellen und materialisierte Ansichten.
  • Auf die Tabelle "Delta Lake" muss über den Namen (nicht pfad) zugegriffen werden, um die Iceberg-Metadatengenerierung automatisch auszulösen.
  • Delta Lake-Tabellen mit aktiviertem Iceberg-Lesezugriff unterstützen keine VOID-Typen.
  • Einige Delta Lake-Tabellenfunktionen, die von Iceberg-Lesevorgängen verwendet werden, werden von einigen OpenSharing-Reader-Clients nicht unterstützt. Siehe Was ist OpenSharing?.
  • Die Empfänger von Open Sharing können Delta-Lake-Tabellen, für die Iceberg-Lesezugriffe aktiviert sind, über die Iceberg-REST-Katalog-API als Iceberg-Tabellen lesen. Dieses Feature befindet sich in der Public Preview. Siehe "Freigabe für externe Iceberg-Clients aktivieren".
  • Der Legacy-Change-Data-Feed funktioniert für Delta-Clients, wenn Iceberg-Lesezugriffe aktiviert sind, wird jedoch in Iceberg nicht unterstützt. Siehe Legacy-Änderungsdatenfeed für Delta Lake.