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:
- 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 SCHEMA
Privileg für das Schema, das die Tabellen enthält. Weitere Informationen finden Sie unter Zuweisung von EXTERNAL USE SCHEMA zu einem Prinzipal. - Authentifizieren sie sich mit einem Databricks-Token für den persönlichen Zugriff. Siehe Autorisierung des Zugriffs auf Azure Databricks-Ressourcen.
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.
- AWS:
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.