メインコンテンツまでスキップ

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

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

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

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

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

  1. Databricks プロバイダーから共有された OIDC プロファイルポータルの URL にアクセスしてください。

    まだお受け取りになっていない場合は、URLをご請求ください。

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

  3. ダウンロードしたファイルで、clientIdclientSecret、および scope を該当する値に置き換えてください。

  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スコープ。
SQL
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>をデータベースの名前に置き換えます。

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

OSS Spark

以下の例では、OSS Spark を使用して Iceberg REST Catalog から共有データを読み込みます。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 スクリプトへのパスです。
Bash
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>