次の方法で共有


Apache Iceberg クライアントから Azure Databricks テーブルにアクセスする

Von Bedeutung

Unity Catalog Apache Iceberg REST Catalog API は、Databricks Runtime 16.4 LTS 以降の パブリック プレビュー 段階にあります。

Unity Catalog には、一般提供されている Iceberg REST Catalog API の読み取り専用実装があります。 このエンドポイントは、Iceberg 読み取りが有効になっている Delta テーブルを読み取る場合に推奨されます。 詳細については、 Apache Iceberg クライアント (レガシ) からの Databricks テーブルの読み取り を参照してください。

Apache Iceberg REST カタログを使用して、サポートされている Iceberg クライアント (Apache Spark、Apache Flink、Trino、Snowflake など) から、Azure Databricks 上の Unity カタログ登録済みテーブルに登録されているテーブルの読み取りと書き込みを行います。

サポートされている統合の完全な一覧については、 Unity カタログの統合を参照してください。

Unity CatalogのIcebergエンドポイントを使用する

Unity Catalog には、Iceberg REST カタログ API 仕様の実装が用意されています。

エンドポイント /api/2.1/unity-catalog/iceberg-rest を使用してアクセスを構成します。 この REST API の使用に関する詳細については Iceberg REST API の仕様を参照してください。

Azure Databricks では、一部の Iceberg リーダー クライアントに資格情報の発行が導入されています。 Databricks では、資格情報の発行を使用して、サポートされているシステムのクラウド ストレージの場所へのアクセスを制御することをお勧めします。 「外部システム アクセスのための Unity Catalog 資格情報の販売」を参照してください。

クライアントで資格情報の発行がサポートされていない場合は、クライアントからDeltaまたはIcebergテーブルのファイルとメタデータを含むストレージの場所へのアクセスを構成する必要があります。 構成の詳細については、Iceberg クライアントのドキュメントを参照してください。

要件

Azure Databricks では、Unity Catalog の一部として、テーブルへの Iceberg REST Catalog アクセスがサポートされています。 これらのエンドポイントを使用するには、ワークスペース内で Unity Catalog を有効にする必要があります。 次の表の種類は、Iceberg REST カタログからアクセスできます。

トピック お読みください 書く
マネージド・アイスバーグ イエス イエス
海外の氷山 イエス いいえ
マネージド デルタ (Iceberg 読み取りが有効になっている場合) イエス いいえ
外部デルタ (Iceberg の読み取りが有効な場合) イエス いいえ

Iceberg REST Catalog API を使用して読み取るときに、外部 Iceberg テーブルは自動的に更新されません。 更新するには、 REFRESH FOREIGN TABLE を実行して最新のスナップショットを読み取る必要があります。 Foreign Iceberg テーブルでの資格情報の自動販売機はサポートされていません。

Iceberg REST Catalog API を介してアクセスできるように Delta テーブルを構成する必要があります。 DeltaテーブルをIcebergクライアントで読むを参照してください。

Iceberg REST カタログを使用して Iceberg クライアントから Azure Databricks テーブルへの読み取りまたは書き込みを行うアクセスを構成するには、次の構成手順を完了する必要があります。

Apache Spark で Iceberg テーブルを使用する

OAuth 認証を使用して Iceberg REST Catalog API を使用して Azure Databricks テーブルにアクセスするように Apache Spark を構成する方法の例を次に示します。

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",

# Configuration for accessing Uniform tables in Unity Catalog
"spark.sql.catalog.<spark-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<spark-catalog-name>.type": "rest",
"spark.sql.catalog.<spark-catalog-name>.rest.auth.type": "oauth2",
"spark.sql.catalog.<spark-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest",
"spark.sql.catalog.<spark-catalog-name>.oauth2-server-uri": "<workspace-url>/oidc/v1/token",
"spark.sql.catalog.<spark-catalog-name>.credential":"<oauth_client_secret>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"
"spark.sql.catalog.<spark-catalog-name>.scope":"all-apis"

次の変数を置換してください。

  • <uc-catalog-name>: テーブルを含む Unity Catalog 内のカタログの名前。
  • <spark-catalog-name>: Spark セッション内でカタログを割り当てる名前。
  • <workspace-url>: Azure Databricks ワークスペースの URL。
  • <oauth_client_id>: 認証プリンシパルの OAuth クライアント ID。
  • <oauth_client_secret>: 認証プリンシパルの OAuth クライアント シークレット。

これらの構成では、Apache Spark を使用して Unity カタログ内のテーブルに対してクエリを実行できます。 複数のカタログにわたるテーブルにアクセスするには、各カタログを個別に構成する必要があります。

Spark 構成を使用して Unity Catalog 内のテーブルにクエリを実行する場合は、次の点に注意してください。

  • "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" は、Iceberg 固有のストアド プロシージャを実行している場合にのみ必要です。

  • Azure Databricks では、すべてのテーブルに対してクラウド オブジェクト ストレージが使用されます。 iceberg-spark-runtime JAR を Spark パッケージとして追加する必要があります。

    • AWS: org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • 紺碧: org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP: org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

    詳細については、Spark 用 Iceberg AWS 統合のドキュメントを参照してください。

    Azure Databricks から Iceberg テーブルにアクセスする場合、これらの構成は必要ありません。 Azure Databricks クラスターへの外部 Iceberg JAR の読み込みはサポートされていません。

Snowflake を使用して Azure Databricks テーブルを読み取る

Snowflake が Unity カタログの Iceberg REST カタログに接続して Azure Databricks テーブルを読み取れるようにするための推奨構成設定の例を次に示します。

CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<uc-schema-name>'
  REST_CONFIG = (
    CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest',
    WAREHOUSE = '<uc-catalog-name>'
    ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<token>'
  )
  ENABLED = TRUE;

次の変数を置換してください。

  • <catalog-integration-name>: Snowflake に登録されているカタログを割り当てる名前。
  • <uc-schema-name>: アクセスする必要がある Unity Catalog 内のスキーマの名前。
  • <uc-catalog-name>: アクセスする必要がある Unity Catalog 内のカタログの名前。
  • <workspace-url>: Azure Databricks ワークスペースの URL。
  • <token>: 統合の設定に使用する管理者の PAT トークン。

PyIceberg で Azure Databricks テーブルを使用する

PyIceberg が Unity カタログの Iceberg REST カタログに接続して Azure Databricks テーブルにアクセスできるようにする構成設定の例を次に示します。

catalog:
  unity_catalog:
    uri: https://<workspace-url>/api/2.1/unity-catalog/iceberg-rest
    warehouse: <uc-catalog-name>
    token: <token>

次の変数を置換してください。

  • <workspace-url>: Azure Databricks ワークスペースの URL。
  • <uc-catalog-name>: アクセスする必要がある Unity Catalog 内のカタログの名前。
  • <token>: 統合の設定に使用する管理者の PAT トークン。

PyIceberg REST カタログ構成のドキュメントを参照してください。

REST API curl の例

次の curl の中の例のような REST API 呼び出しを使用して、テーブルを読み込むこともできます。

curl -X GET -H "Authorization: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg-rest/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>

それから、次のような応答を受け取る必要があります。

{
  "metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
  "metadata": <iceberg-table-metadata-json>,
  "config": {
    "expires-at-ms": "<epoch-ts-in-millis>",
    "adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
  }
}

応答内の expires-at-ms フィールドは、資格情報の有効期限を示しており、既定の有効期限は 1 時間です。 パフォーマンスを向上させるには、新しいものを要求する前に、有効期限が切れるまでクライアントに資格情報をキャッシュさせます。