Iceberg クライアントから Databricks テーブルを読み取る
Iceberg REST カタログを使用して、Apache Spark、Apache Flink、Trino、Snowflake などのサポートされている Iceberg クライアントから Databricks 上の Unity Catalog に登録されたテーブルを読み取ります。
Unity Catalog Iceberg カタログエンドポイントを使用して読み取る
Unity Catalog は、Iceberg 読み取りが有効になっているテーブルに対して、Iceberg REST カタログ API の読み取り専用実装を提供します。
エンドポイント /api/2.1/unity-catalog/iceberg
を使用してアクセスを設定します。 この REST API の使用の詳細については、 Iceberg REST API の仕様 を参照してください。
注:
Databricks は、一部の Iceberg リーダー クライアント向けに資格情報の自動販売を導入しました。 Databricks では、サポートされているシステムのクラウド ストレージの場所へのアクセスを制御するために、資格情報の自動販売を使用することをお勧めします。 「外部システム アクセスのための Unity Catalog 資格情報の販売」を参照してください。
クライアントで資格情報の自動販売がサポートされていない場合は、Iceberg 読み取り (UniForm) が有効になっている Delta テーブルのファイルとメタデータを含むクラウド ストレージの場所へのクライアントからのアクセスを構成する必要があります。 設定の詳細については、Iceberg リーダークライアントのドキュメントを参照してください。
要件
Databricks は、Unity Catalog の一部としてテーブルへの Iceberg REST カタログ アクセスをサポートしています。 これらのエンドポイントを使用するには、ワークスペースで Unity Catalog を有効にする必要があります。 次のテーブルタイプは、Iceberg REST カタログの読み取りの対象となります。
Unity Catalog Iceberg 読み取り (UniForm) が有効になっているマネージドテーブル。
Delta Lake で格納された Unity Catalog の外部テーブルで、Iceberg 読み取り (UniForm) が有効になっています。
「Delta テーブルでの Iceberg 読み取りの有効化 (UniForm)」を参照してください。
Iceberg REST カタログを使用して Iceberg クライアントから Databricks テーブルを読み取るためのアクセスを構成するには、次の構成手順を完了する必要があります。
メタストアの 外部データ アクセス を有効にします。 「 メタストアでの外部データ アクセスの有効化」を参照してください。
統合を構成するプリンシパルに、テーブルを含むスキーマに対する
EXTERNAL USE SCHEMA
権限を付与します。 プリンシパルへの EXTERNAL USE SCHEMA の付与を参照してください。Databricks 個人用アクセス トークンを使用して認証します。 「Databricks リソースへのアクセスを認証する」を参照してください。
Apache Spark を使用した Iceberg テーブルの読み取り
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>
: Databricks ワークスペースの URL。<token>
: 統合を構成するプリンシパルの PAT トークン。
これらの構成では、識別子 . <catalog-name>.<schema-name>.<table-name>
を使用して、Apache Spark で Databricks テーブルを Iceberg としてクエリできます。 複数のカタログにまたがるテーブルにアクセスするには、各カタログを個別に設定する必要があります。
Spark 構成を使用して Unity Catalog のテーブルに対してクエリを実行する場合は、次の点に注意してください。
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
必要があるのは、Iceberg 固有のストアドプロシージャを実行している場合のみです。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 統合のドキュメントを参照してください。
Snowflake で Databricks テーブルを読み取る
以下は、Snowflakeが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>
: 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": "gs://bucket/path/to/iceberg/table/metadata/file",
"metadata": <iceberg-table-metadata-json>,
"config": {
"expires-at-ms": "<epoch-ts-in-millis>",
"gcs.oauth2.token": "<temporary-oauth-token>",
"gcs.oauth2.token-expires-at": "<epoch-ts-in-millis>"
}
}
注:
レスポンスの expires-at-ms
フィールドは、認証情報の有効期限を示し、デフォルトの有効期限は 1 時間です。 パフォーマンスを向上させるには、新しい資格情報を要求する前に、クライアントが有効期限まで資格情報をキャッシュするようにします。