Daten lesen, die von einem Iceberg-Client über eine OpenID Connect (OIDC)-Föderation geteilt werden

Auf dieser Seite wird beschrieben, wie Open ID Connect (OIDC)-Verbunddatenempfänger einen Iceberg REST Catalog (IRC)-Client wie OSS Spark oder Snowflake verwenden können, um auf openSharing-Freigaben zuzugreifen, die in Azure Databricks erstellt wurden.

Wenn Sie stattdessen Bearer-Token zum Verwalten der Authentifizierung verwenden, siehe Erstellen eines Empfängerobjekts für Nicht-Databricks-Benutzer mit Bearer-Token (Databricks-zu-Open-Freigabe).

Diese Seite ist für Empfänger vorgesehen. Informationen dazu, wie Anbieter den OIDC-Partnerverbund für Empfänger in Azure Databricks aktivieren können, finden Sie unter Enable Open ID Connect (OIDC)-Partnerverbund für OpenSharing-Empfänger.

Holen Sie sich Ihr Iceberg-Profil aus dem OIDC-Portal

  1. Wechseln Sie zur OIDC-Profilportal-URL, die der Azure Databricks Anbieter für Sie freigegeben hat.

    Fordern Sie die URL an, wenn Sie sie noch nicht erhalten haben.

  2. Klicken Sie auf der Portalseite auf " Datei herunterladen".

  3. Ersetzen Sie in der heruntergeladenen Datei clientId, clientSecret und scope durch Ihre Werte.

  4. Importieren Sie die Freigabeprofildatei mit Ihrem Clientcode.

Zugreifen auf die freigegebenen Daten

Sie können über einen beliebigen Iceberg REST-Katalog auf die Daten zugreifen.

Schneeflocke

Führen Sie in Ihrem Snowflake-Arbeitsblatt den folgenden Befehl aus, um eine Katalogintegration zu erstellen. Sie können den SQL-Befehl auch aus dem OIDC-Profilportal kopieren, das Ihr Anbieter für Sie freigegeben hat.

Ersetzen Sie die Platzhalterwerte, bevor Sie sie ausführen:

  • <catalog-integration-name>: Ein Name für die Katalogintegration.
  • <catalog-uri>: Der Iceberg REST Catalog-Endpunkt aus Ihrer heruntergeladenen Profildatei.
  • <share-name>: Der Ihnen gewährte Freigabename.
  • <oauth-token-uri>: Der OAuth-Tokenendpunkt Ihres IdP.
  • <oauth-client-id> und <oauth-client-secret>: Ihre OAuth-Anmeldeinformationen.
  • <oauth-scope>: Ihr OAuth-Bereich.
USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
    CATALOG_SOURCE = ICEBERG_REST
    TABLE_FORMAT = ICEBERG
    REST_CONFIG = (
        CATALOG_URI = '<catalog-uri>'
        WAREHOUSE = '<share-name>'
        ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
    )
    REST_AUTHENTICATION = (
        TYPE = OAUTH
        OAUTH_TOKEN_URI = '<oauth-token-uri>'
        OAUTH_CLIENT_ID = '<oauth-client-id>'
        OAUTH_CLIENT_SECRET = '<oauth-client-secret>'
        OAUTH_ALLOWED_SCOPES = ('<oauth-scope>')
    )
    REFRESH_INTERVAL_SECONDS = 30
    ENABLED = TRUE;

Erstellen Sie eine verknüpfte Datenbank, die die Katalogintegration verwendet. Ersetzen Sie <database-name> durch einen Namen für die Datenbank.

CREATE DATABASE <database-name>
    LINKED_CATALOG = (
        CATALOG = <catalog-integration-name>
    );

OSS Spark

Im folgenden Beispiel werden freigegebene Daten aus einem Iceberg-REST-Katalog mit OSS Spark gelesen. Führen Sie sie aus einer Spark-Installation aus, die die Iceberg Spark Runtime und AWS Bundle JARs enthält.

Ersetzen Sie die Platzhalterwerte, bevor Sie sie ausführen:

  • <spark-home>: Der Pfad zu Ihrer Spark-Installation.
  • <iceberg-jars-path>: Der Pfad zu Ihren Iceberg JAR Dateien.
  • <catalog-uri>: Der Iceberg REST Catalog-Endpunkt aus Ihrer heruntergeladenen Profildatei.
  • <share-name>: Der Ihnen gewährte Freigabename.
  • <oauth-token-uri>: Der OAuth-Tokenendpunkt Ihres IdP.
  • <oauth-client-id> und <oauth-client-secret>: Ihre OAuth-Anmeldeinformationen.
  • <oauth-scope>: Ihr OAuth-Bereich.
  • <spark-script>: Der Pfad zum auszuführenden Scala-Skript.
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH <spark-home>/bin/spark-shell \
  --jars <iceberg-jars-path>/iceberg-spark-runtime-4.0_2.13-1.10.2.jar,<iceberg-jars-path>/iceberg-aws-bundle-1.10.2.jar \
  --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
  --conf spark.sql.catalog.databricks=org.apache.iceberg.spark.SparkCatalog \
  --conf spark.sql.catalog.databricks.type=rest \
  --conf spark.sql.catalog.databricks.uri=<catalog-uri> \
  --conf spark.sql.catalog.databricks.warehouse=<share-name> \
  --conf spark.sql.catalog.databricks.rest.auth.type=oauth2 \
  --conf spark.sql.catalog.databricks.oauth2-server-uri=<oauth-token-uri> \
  --conf spark.sql.catalog.databricks.credential=<oauth-client-id>:<oauth-client-secret> \
  --conf spark.sql.catalog.databricks.scope=<oauth-scope> \
  --conf spark.sql.catalog.databricks.io-impl=org.apache.iceberg.aws.s3.S3FileIO \
  < <spark-script>