Verwenden von UniForm zum Lesen von Deltatabellen mit Iceberg-Clients
Das universelle Delta-Format (UniForm) ermöglicht das Lesen von Delta-Tabellen mit Iceberg-Reader-Clients. Für dieses Feature wird Databricks Runtime 14.3 LTS oder höher benötigt.
Wichtig
Eine Dokumentation für die Legacytabellenfunktion IcebergCompatV1
von UniForm finden Sie unter UniForm IcebergCompatV1 (Legacy).
UniForm nutzt die Tatsache, dass sowohl Delta Lake als auch Iceberg aus Parquet-Datendateien und einer Metadatenebene bestehen. UniForm generiert automatisch asynchron Iceberg-Metadaten, ohne Daten neu zu schreiben, sodass Iceberg-Clients Delta-Tabellen lesen können, als wären sie Iceberg-Tabellen. Eine einzelne Kopie der Datendateien dient beiden Formaten.
Sie können eine externe Verbindung so konfigurieren, dass Unity Catalog als Iceberg-Katalog fungiert. Weitere Informationen finden Sie unter Lesen mithilfe des Unity Catalog Iceberg-Katalogendpunkts.
UniForm verwendet zstd anstelle von Snappy als Komprimierungscodec für zugrunde liegende Parkettdatendateien.
Hinweis
Die Generierung von UniForm-Metadaten wird asynchron auf dem Compute ausgeführt, der zum Schreiben von Daten in Delta-Tabellen verwendet wird, was die Ressourcenauslastung des Treibers erhöhen kann.
Anforderungen
Um UniForm aktivieren zu können, müssen Sie die folgenden Anforderungen erfüllen:
- 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 eineminWriterVersion
>= 7 aufweisen. Weitere Informationen finden Sie unter Wie verwaltet Azure Databricks die Kompatibilität von Delta Lake-Features?. - 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 nicht aktivieren, wenn UniForm aktiviert ist. Wenn Sie UniForm für eine vorhandene Tabelle mit aktivierten Löschvektoren aktivieren, deaktiviert und löscht UniForm Löschvektoren und schreibt Datendateien nach Bedarf neu.
Aktivieren von Delta UniForm
Wichtig
Durch Aktivieren von Delta UniForm wird das Delta-Tabellenfeature IcebergCompatV2
, ein Feature zum Schreiben von Protokollen, festgelegt. Nur Clients, die dieses Tabellenfeature unterstützen, können in Tabellen mit aktiviertem UniForm schreiben. Sie müssen Databricks Runtime 14.3 LTS oder höher verwenden, um mit dem aktivierten Feature in Delta-Tabellen zu schreiben.
Sie können UniForm deaktivieren, indem Sie die Tabelleneigenschaft delta.universalFormat.enabledFormats
löschen. Sie können die Spaltenzuordnung nicht deaktivieren, nachdem sie aktiviert wurde, und Upgrades von Delta Lake Reader- und Writer-Protokollversionen können nicht rückgängig gemacht werden.
Sie müssen die folgenden Tabelleneigenschaften festlegen, um die UniForm-Unterstützung für Iceberg zu aktivieren:
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
Außerdem müssen Sie die Spaltenzuordnung aktivieren, um UniForm nutzen zu können. Diese ist automatisch aktiviert, wenn Sie UniForm während der Tabellenerstellung aktivieren, wie das folgende Beispiel zeigt:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Sie können UniForm mithilfe der folgenden Syntax ermöglichen, in eine vorhandene Tabelle zu schreiben:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Hinweis
Diese Syntax funktioniert auch zum Upgraden der Public Preview-Version von UniForm, die die Tabellenfunktion IcebergCompatV1
verwendet hat.
Diese Syntax deaktiviert und löscht Löschvektoren automatisch aus der Tabelle. Vorhandene Dateien werden nach Bedarf umgeschrieben, um sie mit Iceberg kompatibel zu machen.
Wenn Sie UniForm zum ersten Mal aktivieren, beginnt die asynchrone Generierung von Metadaten. 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.
Hinweis
Wenn Sie BigQuery als Iceberg-Reader-Client verwenden möchten, müssen Sie in Azure Databricks spark.databricks.delta.write.dataFilesToSubdir
auf festlegentrue
, um eine BigQuery-Anforderung für das Datenlayout zu ermöglichen.
Informationen finden Sie unter Einschränkungen.
Wann generiert UniForm Iceberg-Metadaten?
Azure Databricks löst die Generierung von Iceberg-Metadaten asynchron aus, nachdem eine Delta Lake-Schreibtransaktion mit demselben Computeausführung abgeschlossen wurde, die die Delta-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 Wartezeiten beim Schreiben im Zusammenhang mit der Iceberg-Metadatengenerierung zu vermeiden, können Delta-Tabellen mit häufigen Commits mehrere Delta-Commits in einem Iceberg-Commit bündeln.
Delta Lake stellt sicher, dass immer nur ein Prozess zur Generierung von Iceberg-Metadaten ausgeführt wird. Commits, die einen zweiten gleichzeitigen Prozess zur Generierung von Iceberg-Metadaten auslösen würden, werden zwar erfolgreich an Delta committet, lösen jedoch keine asynchrone Generierung von Iceberg-Metadaten 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.
Überprüfen des Status der Generierung von Iceberg-Metadaten
UniForm fügt Unity Catalog- und Iceberg-Tabellenmetadaten die folgenden Felder hinzu, um den Status der Generierung von Metadaten 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 vonDESCRIBE EXTENDED table_name
zurückgegeben wird - Überprüfen von Tabellenmetadaten mit dem Katalog-Explorer
- Verwenden der REST-API zum Abrufen einer Tabelle
Informationen zum Überprüfen von Tabelleneigenschaften außerhalb von Azure Databricks finden Sie in der Dokumentation Ihres Iceberg-Reader-Clients. 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 Generierung von UniForm-Iceberg-Metadaten nicht unterstützt, schreibt in die Delta-Tabelle.
Verwenden Sie die folgende Syntax, um die Generierung von Iceberg-Metadaten manuell auszulösen:
MSCK REPAIR TABLE <table-name> SYNC METADATA
Informationen finden Sie unter REPAIR TABLE.
Lesen mithilfe eines Metadaten-JSON-Pfads
Bei manchen Iceberg-Clients müssen Sie einen Pfad zu versionierten Metadatendateien angeben, um externe Iceberg-Tabellen zu registrieren. Jedes Mal, wenn UniForm eine neue Version der Delta-Tabelle in Iceberg konvertiert, wird dabei auch 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 im Tabellenverzeichnis nach folgendem Muster:
<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 vonDESCRIBE EXTENDED table_name
zurückgegeben wird - Überprüfen von Tabellenmetadaten mit dem Katalog-Explorer
- Verwenden des folgenden Befehls mit der REST-API:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>
Die Antwort enthält folgende Informationen:
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
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.
Lesen mithilfe des Unity Catalog Iceberg-Katalogendpunkts
Einige Iceberg-Clients können eine Verbindung mit einem Iceberg-REST-Katalog herstellen. Unity Catalog bietet mithilfe des Endpunkts /api/2.1/unity-catalog/iceberg
eine schreibgeschützte Implementierung der Iceberg-REST-Katalog-API für Delta-Tabellen mit aktiviertem UniForm an. Weitere Informationen zur Verwendung dieser REST-API finden Sie in der Iceberg-REST-API-Spezifikation.
Clients, die bekanntermaßen die Iceberg-Katalog-API unterstützen, sind Apache Spark, Flink und Trino. Sie müssen den Zugriff auf den zugrunde liegenden Cloudobjektspeicher konfigurieren, der die Delta-Tabelle mit aktiviertem UniForm enthält. Konfigurationsdetails finden Sie in der Dokumentation des Iceberg-Reader-Clients.
Sie müssen ein persönliches Azure Databricks-Zugriffstoken generieren und konfigurieren, damit andere Dienste eine Verbindung mit Unity Catalog herstellen können. Weitere Informationen finden Sie unter Authentifizierung für die Azure Databricks-Automatisierung – Übersicht.
Im Folgenden finden Sie ein Beispiel für die Einstellungen zum Konfigurieren von OSS Apache Spark zum Lesen des UniForm- als Iceberg-Format:
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO
Ersetzen Sie die vollständige URL des Arbeitsbereichs, in dem Sie das persönliche Zugriffstoken für <api-root>
generiert haben.
Hinweis
Beim Abfragen von Tabellen in Unity Catalog mit dieser Methode verwenden Objektbezeichner das folgende Muster:
unity.<catalog-name>.<schema-name>.<table-name>
Dieses Muster verwendet dieselben Namespaces mit drei Ebenen, die in Unity Catalog vorhanden sind, fügt jedoch zusätzlich das Präfix unity
hinzu.
Delta- und Iceberg-Tabellenversionen
Sowohl Delta Lake als auch Iceberg ermöglichen Zeitreisenabfragen mithilfe von Tabellenversionen oder Zeitstempeln, die in Tabellenmetadaten gespeichert sind.
Im Allgemeinen werden Iceberg- und Delta-Tabellenversionen weder durch den Commit-Zeitstempel noch durch die Versions-ID ausgerichtet. Wenn Sie überprüfen möchten, welcher Version einer Delta-Tabelle eine bestimmte Version einer Iceberg-Tabelle entspricht, können Sie die entsprechenden Tabelleneigenschaften verwenden, die für die Iceberg-Tabelle festgelegt sind. Weitere Informationen finden Sie unter Überprüfen des Status der Generierung von Iceberg-Metadaten.
Begrenzungen
Es gelten die folgenden Einschränkungen:
- UniForm funktioniert nicht für Tabellen, bei denen Löschvektoren aktiviert sind. Weitere Informationen finden Sie unter Was sind Löschvektoren?.
- Delta-Tabellen mit UniForm-Aktivierung unterstützen keine
VOID
-Typen. - Iceberg-Clients können nur aus UniForm lesen. Schreibvorgänge werden nicht unterstützt.
- Für Iceberg-Reader-Clients können unabhängig von UniForm individuelle Einschränkungen gelten. Weitere Informationen finden Sie in der Dokumentation des von Ihnen gewählten Clients.
- Die Empfänger der Delta-Freigabe können die Tabelle nur als Delta lesen, auch wenn UniForm aktiviert ist.
Der Datenfeed kann für Delta-Clients geändert werden, wenn UniForm aktiviert ist, aber in Iceberg nicht unterstützt wird:
Einige von UniForm verwendete Delta Lake-Tabellenfunktionen werden von einigen Delta Sharing-Reader-Clients nicht unterstützt. Weitere Informationen unter Sicheres Freigeben von Daten und KI-Ressourcen mithilfe von Delta Sharing.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für