Freigeben über


Zugreifen auf Azure Databricks-Tabellen von Apache Iceberg-Clients

Von Bedeutung

Unity Catalog Apache Iceberg REST Catalog API befindet sich in der öffentlichen Vorschau in Databricks Runtime 16.4 LTS und höher. Dieser Endpunkt wird zum Lesen und Schreiben von Tabellen von Iceberg-Clients empfohlen.

Unity Catalog verfügt auch über einen schreibgeschützten Iceberg REST-Katalog-API-Endpunkt. Dies ist ein veralteter Endpunkt. Siehe Read Databricks-Tabellen von Apache Iceberg-Clients (Legacy).

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.

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. Weitere Informationen finden Sie unter Verkauf von Unity Catalog-Anmeldeinformationen für den Zugriff auf externe Systeme.

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 über den Iceberg REST-Katalog 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 aktiviertem Iceberg-Lesemodus) Ja Nein

Ausländische Iceberg-Tabellen werden beim Lesen über die Iceberg REST-Katalog-API nicht automatisch aktualisiert. 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 Lesen von Delta-Tabellen mit Iceberg-Clients.

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:

Verwenden von Iceberg-Tabellen mit Apache Spark

Nachfolgend finden Sie ein Beispiel zum Konfigurieren von Apache Spark für den Zugriff auf Azure Databricks-Tabellen über die Iceberg REST-Katalog-API mit OAuth-Authentifizierung:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",

# Configuration for accessing tables in Unity Catalog
"spark.sql.catalog.<spark-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<spark-catalog-name>.type": "rest",
"spark.sql.catalog.<spark-catalog-name>.rest.auth.type": "oauth2",
"spark.sql.catalog.<spark-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest",
"spark.sql.catalog.<spark-catalog-name>.oauth2-server-uri": "<workspace-url>/oidc/v1/token",
"spark.sql.catalog.<spark-catalog-name>.credential":"<oauth_client_id>:<oauth_client_secret>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"
"spark.sql.catalog.<spark-catalog-name>.scope":"all-apis"

Ersetzen Sie die folgenden Variablen:

  • <uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, der Ihre Tabellen enthält.
  • <spark-catalog-name>: Der Name, den Sie dem Katalog in Ihrer Spark-Sitzung zuweisen möchten.
  • <workspace-url>: Die Azure Databricks-Arbeitsbereichs-URL.
  • <oauth_client_id>: OAuth-Client-ID für den authentifizierenden Prinzipal.
  • <oauth_client_secret>: Geheimer OAuth-Clientschlüssel für den authentifizierenden Prinzipal.

Mit diesen Konfigurationen können Sie Tabellen im Unity-Katalog mithilfe von Apache Spark abfragen. Um auf Tabellen in mehreren Katalogen zuzugreifen, müssen Sie jeden Katalog separat konfigurieren.

Beachten Sie beim Abfragen von Tabellen im Unity-Katalog mithilfe von Spark-Konfigurationen Folgendes:

  • Sie brauchen "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" nur dann, wenn Sie Iceberg-spezifische gespeicherte Prozeduren ausführen.

  • Azure Databricks verwendet Cloudobjektspeicher für alle Tabellen. Sie müssen die Iceberg-Spark-runtime JAR-Datei als Spark-Pakete hinzufügen.

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Azurblau: 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.

    Hinweis

    Diese Konfigurationen sind beim Zugriff auf Iceberg-Tabellen aus Azure Databricks nicht erforderlich. Das Laden externer Iceberg-JARs auf Azure Databricks-Cluster wird nicht unterstützt.

Zugreifen auf Azure Databricks-Tabellen mit Snowflake

Im Folgenden sehen Sie ein Beispiel für die Konfigurationseinstellungen für Snowflake für den Zugriff auf Azure Databricks-Tabellen, indem Sie eine Verbindung mit dem Iceberg REST-Katalog im Unity-Katalog herstellen:

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.
  • <token>: PAT-Token für den Hauptbenutzer, der die Integration konfiguriert.

Verwenden von Azure Databricks-Tabellen mit PyIceberg

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.
  • <uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, auf den Sie zugreifen müssen.
  • <token>: PAT-Token für den Hauptbenutzer, der die Integration konfiguriert.

Weitere Informationen finden Sie in der Dokumentation zur Konfiguration des PYIceberg REST-Katalogs.

Beispiel für REST-API-Curl

Sie können auch einen REST-API-Aufruf wie den in diesem curl Beispiel verwenden, um eine Tabelle zu laden:

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>

Sie sollten dann wie folgt eine Antwort erhalten:

{
  "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 Feld expires-at-ms in der Antwort gibt die Ablaufzeit der Anmeldeinformationen an und weist eine Standardablaufzeit von einer Stunde auf. Um eine bessere Leistung zu erzielen, sollte der Kunde die Zugangsdaten bis zum Ablauf zwischenspeichern, bevor er neue anfordert.