Teilen über


Lesen von Databricks-Tabellen auf Iceberg-Clients

Verwenden Sie den Iceberg REST-Katalog, um Unity Catalog-registrierte Tabellen in Azure Databricks von unterstützten Iceberg-Clients zu lesen, einschließlich Apache Spark, Apache Flink, Trino und Snowflake.

Lesen mithilfe des Unity Catalog Iceberg-Katalogendpunkts

Unity Catalog bietet eine schreibgeschützte Implementierung der Iceberg REST-Katalog-API für Tabellen, bei denen Iceberg-Lesevorgänge aktiviert sind.

Konfigurieren des Zugriffs mithilfe des Endpunkts /api/2.1/unity-catalog/iceberg. 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 der Verkauf von Anmeldeinformationen für Ihren Client nicht unterstützt wird, müssen Sie den Zugriff vom Client auf den Cloudspeicherort konfigurieren, der die Dateien und Metadaten für die Deltatabelle mit aktivierten Iceberg-Lesevorgängen (UniForm) enthält. Informationen zu Konfigurationsdetails finden Sie in der Dokumentation ihres Iceberg-Leseclients.

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. Die folgenden Tabellentypen sind für Iceberg-REST-Kataloglesevorgänge geeignet:

  • Verwaltete Tabellen im Unity-Katalog mit aktivierten Iceberg-Lesevorgängen (UniForm)
  • Externe Tabellen im Unity-Katalog, die mit Delta Lake gespeichert werden und bei denen Iceberg-Lesevorgänge (UniForm) aktiviert sind.

Siehe Lesen von Delta-Tabellen mit Iceberg-Clients.

Sie müssen die folgenden Konfigurationsschritte ausführen, um den Zugriff auf Datenbricks-Tabellen von Iceberg-Clients mithilfe des Iceberg REST-Katalogs zu konfigurieren:

Lesen von Iceberg-Tabellen mit Apache Spark

Im Folgenden finden Sie ein Beispiel für die Einstellungen zum Konfigurieren von Apache Spark zum Lesen von Azure Databricks-Tabellen als Iceberg:

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

# Configuration for accessing Uniform 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>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.<spark-catalog-name>.token":"<token>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"

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

Mit diesen Konfigurationen können Sie Azure Databricks-Tabellen als Iceberg in Apache Spark mithilfe des Bezeichners <catalog-name>.<schema-name>.<table-name>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 das cloudspezifische Iceberg-Bundle JAR als Spark-Paket hinzufügen:

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

Lesen von Databricks-Tabellen mit Snowflake

Im Folgenden finden Sie ein Beispiel für die empfohlenen Konfigurationseinstellungen, damit Snowflake Azure Databricks-Tabellen als Iceberg lesen kann:

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',
    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>: URL des Azure Databricks-Arbeitsbereichs.
  • <token>: PAT-Token für den Principal, der die Integration konfiguriert.

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 "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/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.