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プロファイルを取得
-
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 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 スクリプトへのパスです。
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>