Iceberg クライアントから Open ID Connect (OIDC) フェデレーションを使用して共有されるデータを読み取ります

このページでは、Open ID Connect (OIDC) フェデレーション データ受信者が、OSS Spark や Snowflake などの Iceberg REST Catalog (IRC) クライアントを使用して、Azure Databricksで作成された OpenSharing 共有にアクセスする方法について説明します。

代わりにベアラー トークンを使用して認証を管理する場合は、「 ベアラー トークンを使用して Databricks 以外のユーザーの受信者オブジェクトを作成する (Databricks から開く共有)」を参照してください。

このページは受信者を対象としています。 プロバイダーがAzure Databricksで受信者の OIDC フェデレーションを有効にする方法については、「OpenSharing 受信者の Open ID Connect (OIDC) フェデレーションを有効にする」を参照してください。

OIDC ポータルから Iceberg プロファイルを取得する

  1. Azure Databricks プロバイダーが共有した OIDC プロファイル ポータルの URL に移動します。

    まだ受信していない場合は、URL を要求します。

  2. ポータル ページで、[ファイルの ダウンロード] をクリックします。

  3. ダウンロードしたファイルで、 clientIdclientSecretscope を実際の値に置き換えます。

  4. クライアント コードを使用して共有プロファイル ファイルをインポートします。

共有データにアクセスする

任意の Iceberg REST カタログを使用してデータにアクセスできます。

Snowflake

Snowflake ワークシートで、次のコマンドを実行してカタログ統合を作成します。 プロバイダーが共有している OIDC プロファイル ポータルから SQL コマンドをコピーすることもできます。

プレースホルダーの値を実行する前に置き換えます。

  • <catalog-integration-name>: カタログ統合の名前。
  • <catalog-uri>: ダウンロードしたプロファイル ファイルの Iceberg REST カタログ エンドポイント。
  • <share-name>: ユーザーに付与された共有名。
  • <oauth-token-uri>: IdP の OAuth トークン エンドポイント。
  • <oauth-client-id><oauth-client-secret>: OAuth 資格情報。
  • <oauth-scope>: OAuth スコープ。
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;

カタログ統合を使用するリンクされたデータベースを作成します。 <database-name>をデータベースの名前に置き換えます。

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

OSS Spark

次の例では、OSS Spark を使用して Iceberg REST カタログから共有データを読み取ります。 Iceberg Spark ランタイムと AWS バンドル JAR を含む Spark インストールから実行します。

プレースホルダーの値を実行する前に置き換えます。

  • <spark-home>: Spark インストールへのパス。
  • <iceberg-jars-path>: Iceberg JAR ファイルへのパス。
  • <catalog-uri>: ダウンロードしたプロファイル ファイルの Iceberg REST カタログ エンドポイント。
  • <share-name>: ユーザーに付与された共有名。
  • <oauth-token-uri>: IdP の OAuth トークン エンドポイント。
  • <oauth-client-id><oauth-client-secret>: OAuth 資格情報。
  • <oauth-scope>: OAuth スコープ。
  • <spark-script>: 実行する Scala スクリプトへのパス。
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>