Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit dem Apache Iceberg REST-Katalog können unterstützte Clients wie Apache Spark, Apache Flink und Trino in Unity Catalog registrierte Iceberg-Tabellen auf Azure Databricks lesen und schreiben.
Eine vollständige Liste der unterstützten Integrationen finden Sie unter Unity Catalog-Integrationen.
Hinweis
Unity-Katalog verfügt auch über einen schreibgeschützten Iceberg REST-Katalog-API-Endpunkt. Dies ist ein veralteter Endpunkt. Siehe Lesen von Databricks-Tabellen aus Apache Iceberg Clients (veraltet)
Verwenden des Unity Catalog Iceberg-Katalogendpunkts
Unity Catalog stellt eine Implementierung der Iceberg REST-Katalog-API-Spezifikation bereit.
Konfigurieren des Zugriffs mithilfe des Endpunkts /api/2.1/unity-catalog/iceberg-rest. Details zur Verwendung dieser REST-API finden Sie in der Iceberg REST API-Spezifikation.
Hinweis
Azure Databricks hat für einige Iceberg-Leserclients den Verkauf von Anmeldeinformationen eingeführt. Databricks empfiehlt, den Verkauf von Anmeldeinformationen zum Steuern des Zugriffs auf Cloudspeicherorte für unterstützte Systeme zu nutzen. Siehe Unity Katalog-Anmeldedatenbereitstellung für den Zugriff auf externe Systeme und Zugriff auf Iceberg-Tabellen mit externen Systemen.
Wenn das Bereitstellen von Anmeldeinformationen für Ihren Client nicht unterstützt wird, müssen Sie den Zugriff vom Client auf den Speicherort konfigurieren, der die Dateien und Metadaten für die Delta- oder Iceberg-Tabelle enthält. Weitere Informationen zur Konfiguration finden Sie in der Dokumentation ihres Iceberg-Clients.
Anforderungen
Azure Databricks unterstützt den Iceberg REST-Katalogzugriff auf Tabellen als Teil des Unity-Katalogs. Sie müssen den Unity-Katalog in Ihrem Arbeitsbereich aktiviert haben, um diese Endpunkte zu verwenden. Auf die folgenden Tabellentypen kann mithilfe des Iceberg REST-Katalogs zugegriffen werden:
| Thema | Lesen Sie | Schreiben |
|---|---|---|
| Verwalteter Iceberg | Ja | Ja |
| Fremde Eisberge | Ja | Nein |
| Verwaltetes Delta (mit aktiviertem Iceberg-Lesemodus) | Ja | Nein |
| Externes Delta (mit aktivierten Iceberg-Lesevorgängen) | Ja | Nein |
Fremde Eisbergtabellen werden nicht automatisch aktualisiert, wenn Sie die Iceberg REST-Katalog-API zum Lesen von Tabellen verwenden. Zum Aktualisieren müssen Sie REFRESH FOREIGN TABLE ausführen, um die neueste Momentaufnahme zu lesen. Der Verkauf von Anmeldeinformationen in ausländischen Iceberg-Tabellen wird nicht unterstützt.
Hinweis
Sie müssen Delta-Tabellen so konfigurieren, dass sie über die Iceberg REST-Katalog-API zugänglich sind. Siehe Delta Lake-Tabellen mit Iceberg-Clients mithilfe von UniForm lesen.
Sie müssen die folgenden Konfigurationsschritte ausführen, um den Zugriff auf Lese- oder Schreibzugriff auf Azure Databricks-Tabellen von Iceberg-Clients mithilfe des Iceberg-REST-Katalogs zu konfigurieren:
- Aktivieren Sie den Zugriff auf externe Daten für Ihren Metastore. Siehe Aktivieren des externen Datenzugriffs im Metastore.
- Gewähren Sie dem Prinzipal, der die Integration konfiguriert, das
EXTERNAL USE SCHEMAPrivileg für das Schema, das die Tabellen enthält. Siehe Erteilen von Prinzipalberechtigungen für den Unity-Katalog. - Authentifizieren sie sich mithilfe eines persönlichen Azure Databricks-Zugriffstokens oder OAuth. Siehe Autorisieren des Zugriffs auf Azure Databricks-Ressourcen.
Hinweis
Die Iceberg-Spezifikation lässt keine doppelten Datendateien innerhalb einer einzigen Tabellenspiegelung zu. Um dies zu verhindern, blockiert Unity Catalog, wenn dies erkannt wird, externe Engines daran, doppelte Datendateien in die Tabelle zu schreiben.
Hinweis
Informationen zum Lesen von Tabellen mit Zeilenfiltern oder Spaltenmasken , die von einem externen Iceberg-Client angefügt sind, finden Sie unter cross-engine attribute-based access controls (ABAC) für erforderliche Clientversionen und -konfigurationen.
Verwenden von Iceberg-Tabellen mit Apache Spark
Die folgenden Beispiele zeigen, wie Sie Apache Spark für den Zugriff auf Azure Databricks Tabellen über die Iceberg REST-Katalog-API konfigurieren. Azure Databricks unterstützt die OAuth- und PAT-Authentifizierung (Personal Access Token).
Um auf Tabellen in mehreren Katalogen zuzugreifen, müssen Sie jeden Katalog separat konfigurieren.
Hinweis
Sie müssen die Iceberg Spark Runtime JAR und das cloudspezifische Bundle JAR in Ihre Spark-Pakete einschließen. Die JAR-Laufzeitversion muss ihren Spark- und Scala-Versionen entsprechen. Beispiel: für Spark 3.5 mit Scala 2.12:
org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:<iceberg-version>
Außerdem das cloudspezifische Bundle:
- AWS:
org.apache.iceberg:iceberg-aws-bundle:<iceberg-version> - Azure:
org.apache.iceberg:iceberg-azure-bundle:<iceberg-version> - GCP:
org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>
Ausführliche Informationen finden Sie in der Dokumentation zur Iceberg AWS-Integration für Spark. Diese JARs sind beim Zugriff auf Iceberg-Tabellen aus Azure Databricks Clustern nicht erforderlich.
OAuth-Authentifizierung
CLI
pyspark \
--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:<iceberg-version>,org.apache.iceberg:iceberg-aws-bundle:<iceberg-version> \
--conf "spark.sql.catalog.<spark-catalog-name>=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.<spark-catalog-name>.type=rest" \
--conf "spark.sql.catalog.<spark-catalog-name>.rest.auth.type=oauth2" \
--conf "spark.sql.catalog.<spark-catalog-name>.uri=https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest" \
--conf "spark.sql.catalog.<spark-catalog-name>.oauth2-server-uri=https://<workspace-url>/oidc/v1/token" \
--conf "spark.sql.catalog.<spark-catalog-name>.credential=<oauth_client_id>:<oauth_client_secret>" \
--conf "spark.sql.catalog.<spark-catalog-name>.warehouse=<uc-catalog-name>" \
--conf "spark.sql.catalog.<spark-catalog-name>.scope=all-apis"
Python
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:<iceberg-version>,org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>") \
.config("spark.sql.catalog.<spark-catalog-name>", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.<spark-catalog-name>.type", "rest") \
.config("spark.sql.catalog.<spark-catalog-name>.rest.auth.type", "oauth2") \
.config("spark.sql.catalog.<spark-catalog-name>.uri", "https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest") \
.config("spark.sql.catalog.<spark-catalog-name>.oauth2-server-uri", "https://<workspace-url>/oidc/v1/token") \
.config("spark.sql.catalog.<spark-catalog-name>.credential", "<oauth_client_id>:<oauth_client_secret>") \
.config("spark.sql.catalog.<spark-catalog-name>.warehouse", "<uc-catalog-name>") \
.config("spark.sql.catalog.<spark-catalog-name>.scope", "all-apis") \
.getOrCreate()
Ersetzen Sie die folgenden Variablen:
-
<spark-catalog-name>: Der Name, den Sie dem Katalog in Ihrer Spark-Sitzung zuweisen möchten. -
<uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, der Ihre Tabellen enthält. -
<oauth_client_id>: OAuth-Client-ID für den authentifizierenden Prinzipal. -
<oauth_client_secret>: Geheimer OAuth-Clientschlüssel für den authentifizierenden Prinzipal. -
<iceberg-version>: Die zu verwendende Iceberg-Version, z. B.1.9.2.
-
<workspace-url>: Die Azure Databricks-Arbeitsbereichs-URL. Beispiel:adb-1234567890123456.12.azuredatabricks.net.
PAT-Authentifizierung
CLI
pyspark \
--packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:<iceberg-version>,org.apache.iceberg:iceberg-aws-bundle:<iceberg-version> \
--conf "spark.sql.catalog.<spark-catalog-name>=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.<spark-catalog-name>.type=rest" \
--conf "spark.sql.catalog.<spark-catalog-name>.uri=https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest" \
--conf "spark.sql.catalog.<spark-catalog-name>.token=<token>" \
--conf "spark.sql.catalog.<spark-catalog-name>.warehouse=<uc-catalog-name>"
Python
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:<iceberg-version>,org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>") \
.config("spark.sql.catalog.<spark-catalog-name>", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.<spark-catalog-name>.type", "rest") \
.config("spark.sql.catalog.<spark-catalog-name>.uri", "https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest") \
.config("spark.sql.catalog.<spark-catalog-name>.token", "<token>") \
.config("spark.sql.catalog.<spark-catalog-name>.warehouse", "<uc-catalog-name>") \
.getOrCreate()
Ersetzen Sie die folgenden Variablen:
-
<spark-catalog-name>: Der Name, den Sie dem Katalog in Ihrer Spark-Sitzung zuweisen möchten. -
<uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, der Ihre Tabellen enthält. -
<token>: Ein persönliches Zugriffstoken (PAT) für die authentifizierende Entität. Siehe Authentifizieren mit persönlichen Zugriffstokens von Azure Databricks (Legacy). -
<iceberg-version>: Die zu verwendende Iceberg-Version, z. B.1.9.2.
-
<workspace-url>: Die Azure Databricks-Arbeitsbereichs-URL. Beispiel:adb-1234567890123456.12.azuredatabricks.net.
Zugreifen auf Azure Databricks-Tabellen mit Snowflake
Snowflake bietet zwei Optionen für den Zugriff auf Tabellen über den Iceberg REST-Katalog: mithilfe der katalogverknüpften Datenbanken von Snowflake oder mithilfe externer Tabellen.
Konfigurieren Sie für beide Optionen zunächst eine Snowflake-Katalogintegration. Azure Databricks unterstützt die folgenden Authentifizierungsmethoden für Snowflake-Katalogintegrationen:
- Bearertoken: Verwendet ein Azure Databricks Personal Access Token (PAT) oder OAuth-Token. Wird in allen Clouds unterstützt.
- Entra-Dienstprinzipal OAuth (nur Azure): Verwendet einen Microsoft Entra ID-Dienstprinzipal, um sich direkt beim Entra-Tokenendpunkt zu authentifizieren.
Weitere Informationen zu den Snowflake-Authentifizierungsoptionen für REST-Katalogintegrationen finden Sie in der Snowflake-Dokumentation.
Snowflake mit Bearer-Token-Authentifizierung
Im folgenden Beispiel wird eine Snowflake-Katalogintegration mithilfe eines Bearertokens konfiguriert. Sie können ein persönliches Azure Databricks-Zugriffstoken (PERSONAL Access Token, PAT) oder ein OAuth-Token verwenden, das aus einem Azure Databricks-Dienstprinzipal generiert wird. Ausführliche Informationen zum Generieren von OAuth-Token finden Sie unter Autorisieren des Dienstprinzipalzugriffs auf Azure Databricks mit OAuth.
CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = '<uc-schema-name>'
REST_CONFIG = (
CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest',
WAREHOUSE = '<uc-catalog-name>'
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = '<token>'
)
ENABLED = TRUE;
Ersetzen Sie die folgenden Variablen:
-
<catalog-integration-name>: Der Name, den Sie dem Katalog zuweisen möchten, der bei Snowflake registriert ist. -
<uc-schema-name>: Der Name des Schemas im Unity-Katalog, auf das Sie zugreifen müssen. -
<uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, auf den Sie zugreifen müssen. -
<workspace-url>: Die Azure Databricks-Arbeitsbereichs-URL. Zum Beispiel:https://cust-success.cloud.databricks.comoderhttps://adb-1234567890123456.12.azuredatabricks.net. -
<token>: Ein persönliches Zugriffstoken (PAT) für den Benutzer, der die Integration konfiguriert.
Snowflake mit Entra-Dienstprinzipal OAuth
In Azure können Snowflake-Katalogintegrationen, die einen Entra-gesicherten Dienstprinzipal verwenden, den Azure Databricks OIDC-Tokenendpunkt (<workspace-url>/oidc/v1/token) nicht verwenden. Stattdessen müssen Sie sich direkt beim Microsoft Entra-Tokenendpunkt authentifizieren. Dies unterscheidet sich von dem OAuth-Ansatz, der für andere Iceberg-Clients (z. B. Apache Spark) in Azure verwendet wird.
Hinweis
Die Dokumentation von Snowflake kann darauf hinweisen, dass entra-ID nicht unterstützt wird. Die folgende Konfiguration verwendet Entra OAuth für den Azure Databricks-Ressourcenbereich und ist der unterstützte Pfad zum Lesen des Unity-Katalogs aus Snowflake in Azure.
Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben:
- Ein Entra-Dienstprinzipal mit dem Privileg
EXTERNAL USE SCHEMA, das für das Zielschema im Unity-Katalog gewährt wurde. Siehe Erteilen von Prinzipalberechtigungen für den Unity-Katalog. - Die Client-ID und der geheime Clientschlüssel des Dienstprinzipals.
- Ihre Azure-Mandanten-ID.
Führen Sie die folgende SQL-Datei in Snowflake aus:
CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = '<uc-schema-name>'
REST_CONFIG = (
CATALOG_URI = 'https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
WAREHOUSE = '<uc-catalog-name>'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://login.microsoftonline.com/<azure-tenant-id>/oauth2/v2.0/token'
OAUTH_CLIENT_ID = '<entra-client-id>'
OAUTH_CLIENT_SECRET = '<entra-client-secret>'
OAUTH_ALLOWED_SCOPES = ('2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default')
)
ENABLED = TRUE
REFRESH_INTERVAL_SECONDS = 600;
Ersetzen Sie die folgenden Variablen:
-
<catalog-integration-name>: Der Name, den Sie dem Katalog zuweisen möchten, der bei Snowflake registriert ist. -
<uc-schema-name>: Der Name des Schemas im Unity-Katalog, auf das Sie zugreifen müssen. -
<uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, auf den Sie zugreifen müssen. -
<workspace-url>: Die Azure Databricks-Arbeitsbereichs-URL. Beispiel:adb-1234567890123456.12.azuredatabricks.net. -
<azure-tenant-id>: Ihre Microsoft Entra-Mandanten-ID. -
<entra-client-id>Die Client-ID oder Anwendungs-ID des Dienstprinzipals. -
<entra-client-secret>: Ein Client-Geheimnis für den Entra-Service Principal.
Von Bedeutung
Der Bereich 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d/.default ist die Azure Databricks-Anwendungs-ID, die in Entra registriert ist. Dies unterscheidet sich von dem all-apis Bereich, der beim Azure Databricks OIDC-Endpunkt verwendet wird. Die Verwendung des falschen Bereichs ist eine häufige Ursache für Authentifizierungsfehler beim Konfigurieren dieser Integration.
Nachdem Sie die Katalogintegration erstellt haben, folgen Sie der Snowflake-Dokumentation , um eine katalogverknüpfte Datenbank zu erstellen, um auf Ihre Tabellen zuzugreifen.
Weitere Informationen zum Erstellen und Verwalten von Entra-Dienstprinzipale für Azure Databricks finden Sie unter Authenticate with Microsoft Entra service principals.
Hinweis
Snowflake unterstützt keine Entra-Authentifizierung für Katalogintegrationen, die private Netzwerke (Azure Private Link) verwenden, um eine Verbindung mit Azure Databricks herzustellen. Die Verbindung mit dem Azure Databricks Iceberg REST-Katalogendpunkt muss beim Authentifizieren mit einem Entra-Dienstprinzipal öffentliche Netzwerke verwenden.
Katalogverknüpfte Datenbanken
Die katalogverknüpften Datenbanken von Snowflake werden automatisch mit Dem Unity-Katalog synchronisiert, um Schemas und Iceberg-Tabellen zu erkennen. Dies beseitigt die Notwendigkeit einer manuellen Metadatenaktualisierung.
Nachdem Sie eine Snowflake-Katalogintegration konfiguriert haben, lesen Sie die Snowflake-Dokumentation , um eine katalogverknüpfte Datenbank zu erstellen, um auf Ihre Tabellen zuzugreifen.
Von Bedeutung
Der Versuch, von Snowflake in schreibgeschützte Azure Databricks-Tabellen zu schreiben, kann zu Fehlern führen. Weitere Informationen zu unterstützten Vorgängen können Sie in der Snowflake-Dokumentation nachlesen.
Externe Tabellen
Alternativ können Sie nach dem Erstellen einer Snowflake-Katalogintegration externe Tabellen erstellen. Bei diesem Ansatz müssen Metadaten manuell aktualisiert werden, um Aktualisierungen anzuzeigen.
CREATE OR REPLACE ICEBERG TABLE my_table
CATALOG = '<catalog-integration-name>'
CATALOG_TABLE_NAME = '<uc-table-name>';
Verwenden von Azure Databricks-Tabellen mit PyIceberg
Um PyIceberg für den Zugriff auf Azure Databricks-Tabellen zu verwenden, müssen Sie PyIceberg mit den erforderlichen Abhängigkeiten installieren. PyIceberg erfordert pyarrow für Tabellenvorgänge wie das Lesen von Daten und das Überprüfen von Tabellenmetadaten. Installieren Sie PyIceberg mit dem Extra pyarrow:
pip install "pyiceberg[pyarrow]"
Hinweis
Wenn Sie die Installation nicht durchführen pyarrow, schlagen Vorgänge wie das Beschreiben oder Lesen von Tabellen fehl. Die vollständige Liste der optionalen Abhängigkeiten finden Sie in der PyIceberg-Dokumentation.
Nachfolgend sehen Sie ein Beispiel für die Konfigurationseinstellungen, mit denen PyIceberg auf Azure Databricks-Tabellen zugreifen kann, indem Sie eine Verbindung mit dem Iceberg REST-Katalog im Unity-Katalog herstellen:
catalog:
unity_catalog:
uri: https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest
warehouse: <uc-catalog-name>
token: <token>
Ersetzen Sie die folgenden Variablen:
-
<workspace-url>: Die Azure Databricks-Arbeitsbereichs-URL. Beispiel:adb-1234567890123456.12.azuredatabricks.net.
-
<uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, auf den Sie zugreifen müssen. -
<token>: Ein persönliches Zugriffstoken (PAT) für den Benutzer, der die Integration konfiguriert.
Weitere Informationen finden Sie in der Dokumentation zur Konfiguration des PYIceberg REST-Katalogs.
Beispiel für REST-API-Curl
Im folgenden curl Beispiel wird eine Tabelle mit der REST-API geladen:
curl -X GET -H "Authorization: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg-rest/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>
Die Antwort sieht wie folgt aus:
{
"metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
"metadata": <iceberg-table-metadata-json>,
"config": {
"expires-at-ms": "<epoch-ts-in-millis>",
"adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
}
}
Hinweis
Das expires-at-ms Feld zeigt an, wann die Anmeldeinformationen ablaufen. Die Standardablaufzeit beträgt eine Stunde. Um die Leistung zu verbessern, sollte der Client die Anmeldeinformationen zwischenspeichern, bis sie ablaufen, bevor neue angefordert werden.