Iceberg クライアントから Databricks テーブルを読み取る
Iceberg REST Catalog を使用して、サポートされている Iceberg クライアント (Apache Spark、Apache Flink、Trino、Snowflake など) から Azure Databricks 上の Unity Catalog 登録済みテーブルを読み取ります。
Unity Catalog の Iceberg カタログ エンドポイントを使用して読み取る
Unity Catalog では、Iceberg 読み取りが有効になっているテーブルに対して、Iceberg REST Catalog API の読み取り専用実装が用意されています。
エンドポイント /api/2.1/unity-catalog/iceberg
を使用してアクセスを構成します。 この REST API の使用に関する詳細については Iceberg REST API の仕様を参照してください。
注
Azure Databricks では、一部の Iceberg リーダー クライアントに資格情報の発行が導入されています。 Databricks では、資格情報の発行を使用して、サポートされているシステムのクラウド ストレージの場所へのアクセスを制御することをお勧めします。 「外部システム アクセスのための Unity Catalog 資格情報の販売」を参照してください。
クライアントで資格情報の管理がサポートされていない場合、Iceberg リード(UniForm)が有効になっている Delta テーブルのファイルとメタデータを含むクラウドストレージへのアクセスをクライアント側で設定する必要があります。 構成の詳細については、Iceberg リーダー クライアントに関するドキュメントを参照してください。
要件
Azure Databricks では、Unity Catalog の一部として、テーブルへの Iceberg REST Catalog アクセスがサポートされています。 これらのエンドポイントを使用するには、ワークスペース内で Unity Catalog を有効にする必要があります。 次のテーブルの種類は、Iceberg REST Catalog の読み取りの対象です。
- Iceberg 読み取り (UniForm) が有効になっている Unity Catalog マネージド テーブル。
- Delta Lake によって格納され、Iceberg 読み取り (UniForm) が有効になっている Unity カタログの外部テーブル。
DeltaテーブルをIcebergクライアントで読むを参照してください。
Iceberg REST Catalog を使用して Iceberg クライアントから Databricks テーブルを読み取るアクセスを構成するには、次の構成手順を完了する必要があります。
- メタストアの "外部データ アクセス" を有効にします。 「メタストア上で外部データ アクセスを有効にする」を参照してください。
- 統合を構成するプリンシパルに、テーブルを含むスキーマに対する
EXTERNAL USE SCHEMA
特権を許可します。 「プリンシパルに EXTERNAL USE SCHEMA を付与する」を参照してください。 - Databricks 個人用アクセス トークンを使用して認証します。 Azure Databricks リソースへのアクセスの承認に関するページを参照してください。
Apache Spark を使用して Iceberg テーブルを読み取る
Azure Databricks テーブルを Iceberg として読み取るように 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>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.<spark-catalog-name>.token":"<token>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"
次の変数を置き換えてください。
<uc-catalog-name>
: テーブルを含む Unity Catalog 内のカタログの名前。<spark-catalog-name>
: Spark セッション内でカタログを割り当てる名前。<workspace-url>
: Azure Databricks ワークスペースの URL。<token>
: 統合の設定に使用する管理者の PAT トークン。
これらの構成では識別子 <catalog-name>.<schema-name>.<table-name>
を使用し、Apache Spark において Azure Databricks テーブルに Iceberg としてクエリを実行できます。 複数のカタログにわたるテーブルにアクセスするには、各カタログを個別に構成する必要があります。
Spark 構成を使用して Unity Catalog 内のテーブルにクエリを実行する場合は、次の点に注意してください。
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
は、Iceberg 固有のストアド プロシージャを実行している場合にのみ必要です。Azure Databricks では、すべてのテーブルに対してクラウド オブジェクト ストレージが使用されます。 クラウド固有の Iceberg バンドル JAR を、Spark パッケージとして追加する必要があります。
- AWS:
org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
- Azure:
org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
- GCP:
org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>
詳細については、Spark 用 Iceberg AWS 統合のドキュメントを参照してください。
- AWS:
Snowflake を使用して Databricks テーブルを読み取る
Snowflake が Azure Databricks テーブルを Iceberg として読み取ることができるようにするための、推奨される構成設定の例を次に示します。
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',
WAREHOUSE = '<uc-catalog-name>'
)
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 トークン。
REST API curl の例
次の curl
の中の例のような REST API 呼び出しを使用して、テーブルを読み込むこともできます。
curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/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 時間です。 パフォーマンスを向上させるには、新しいものを要求する前に、有効期限が切れるまでクライアントに資格情報をキャッシュさせます。