このページでは、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 プロファイルを取得する
Azure Databricks プロバイダーが共有した OIDC プロファイル ポータルの URL に移動します。
まだ受信していない場合は、URL を要求します。
ポータル ページで、[ファイルの ダウンロード] をクリックします。
ダウンロードしたファイルで、
clientId、clientSecret、scopeを実際の値に置き換えます。クライアント コードを使用して共有プロファイル ファイルをインポートします。
共有データにアクセスする
任意の 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>