Skip to content

Databricksとの統合

情報

この機能は、デフォルトではアカウントで有効になっていません。有効にするには、テクニカルサポートまたはカスタマーサクセス担当者にお問い合わせください。

このガイドでは、Unity Catalogのフェデレーションを使用して、Treasure AIが管理するGlue HMSカタログとIcebergテーブルをDatabricksと統合する方法を説明します。

概要

Treasure AIアカウントにIcebergカタログのリソースをプロビジョニングした後、Glue HMSカタログをDatabricks Unity Catalogにフェデレーションできます。これにより、データをコピーせずに、Treasure AIが管理するIcebergテーブルをDatabricksから直接クエリできます。

この統合では、次のものを使用します。

  • Glue HMSカタログにアクセスするためのサービス資格情報(service credential)
  • Icebergテーブルのデータを格納するS3バケットにアクセスするためのストレージ資格情報(storage credential)
  • Treasure AIのカタログをUnity Catalogにフェデレーションするための外部カタログ(foreign catalog)

前提条件

  • アカウントのIcebergカタログのリソースがプロビジョニング済みで、activeの状態であること(Provision Resourcesを参照)
  • DatabricksのワークスペースとコンピュートでUnity Catalogが有効になっていること(Databricksのドキュメント)

認証

認証の詳細とリージョン別のAPIエンドポイントについては、Use Iceberg Catalog Management APIを参照してください。

必要な情報

次の値は、Get Resource Statusエンドポイントから取得します。

curl "https://api-iceberg-mng.us01.treasuredata.com/v1/iceberg/catalog/resources" \
  -H "Authorization: TD1 <admin_api_key>" \
  -H "Accept: application/json"
レスポンスのフィールド用途例
aws_regionAWSリージョンus-east-1
aws_account_idAWSアカウントID123456789012
iam_role_arnIAMロールのARNarn:aws:iam::123456789012:role/zcpo-hms-tenant-us01_td10000
external_location_url外部ロケーションのURLs3://zcp-us01-td10000-a1b2c3d4/iceberg
db_nameデータベース名td10000_us01_export

セットアップ

ステップ1(Databricks):サービス資格情報とストレージ資格情報を作成する

iam_role_arnに対して、サービス資格情報とストレージ資格情報を作成します。どちらの資格情報も、Treasure AIが提供する同じIAMロールを指定します。

資格情報を作成した後、Databricksに表示されるExternal IDを記録してください。次のステップで必要になります。

ステップ2(Treasure AI):テーブル読み取り用IAMロールの信頼ポリシーを更新する

テーブル読み取り用IAMロールの信頼ポリシーを更新します。 このステップは、Databricksのドキュメントのこのステップに対応します。

ステップ1のExternal IDとIAMロールのARNを指定して、信頼ポリシー更新エンドポイントを呼び出します。

curl -X POST "https://api-iceberg-mng.us01.treasuredata.com/v1/iceberg/catalog/resources/reader_role/trust_policy" \
  -H "Authorization: TD1 <admin_api_key>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "entries": [
      {
        "service": "databricks",
        "iam_principal_arns": [
          "arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL",
          "<iam_role_arn>"
        ],
        "external_ids": ["<external_id_from_databricks>"]
      }
    ]
  }'

External IDはIAMロールを保護します。正しいExternal IDが指定された場合にのみ、IAMロールを引き受け(assume)できます。 このIDはDatabricksが生成するため、資格情報を作成した後でなければわかりません。

iam_principal_arnsには、次の2つのIAMロールが必要です。

この更新は、信頼ポリシー全体を置き換えます。リーダーロールがすでに他の統合を信頼している場合は、上記のエントリーだけをPOSTせず、既存のポリシーにDatabricksのエントリーを追加してください。詳細はManage the Reader Role Trust Policyを参照してください。

重要

このステップが完了するまで、カタログのフェデレーションは動作しません。Get Resource Statusエンドポイントをポーリングし、ステータスがactiveに戻るのを待ってから次に進んでください。

ステップ3(Databricks):提供されたS3の外部ロケーションを作成する

Create an external location for an S3 bucketの手順に従って、external_location_urlの外部ロケーションを作成します。

  • ステップ1で作成したストレージ資格情報を使用します
  • Databricksが、不足している権限(「Write」や「File Events Read」など)について警告する場合があります。この警告は無視して、外部ロケーションを強制的に作成できます。Treasure AIのリーダーロールは、設計上、読み取り専用です。

ステップ4(Databricks):Databricksのメタデータ用の外部ロケーションを作成する

Databricksが自身のメタデータを格納するための、別のストレージ資格情報と外部ロケーションを作成します。手順:Create an external location for S3

このロケーションは、Databricksが外部Icebergテーブルを読み取るために内部で使用します。テーブルのデータは格納しません。

注意

この外部ロケーションは、ステップ3の外部ロケーションとは別のものです。お客様自身のAWSアカウント(Databricksをデプロイしているアカウント)に、別のS3バケットとIAMロールを作成する必要があります。

ステップ5(Databricks):接続と外部カタログを作成する

Treasure AIのGlue HMSカタログへの接続と、そのカタログをUnity Catalogにフェデレーションするための外部カタログを作成します。手順:Create the connection (Glue HMS federation)

接続のパラメーター:

パラメーター値
AWS RegionTreasure AIのリソースのレスポンスにあるaws_region
AWS Account IDTreasure AIのリソースのレスポンスにあるaws_account_id
Credentialsステップ1で作成したサービス資格情報

外部カタログのパラメーター:

パラメーター値
Authorized pathsステップ3で作成した外部ロケーション
Storage locationステップ4で作成した外部ロケーション

検証

外部カタログを作成すると、DatabricksのCatalog Explorerに表示されます。

トラブルシューティング

症状考えられる原因
クエリ時にアクセスが拒否されるIAMロールのARNまたはExternal IDが一致していません。ステップ2で登録した値を確認してください
外部ロケーションの作成時に権限の警告が出る想定どおりの動作です。Treasure AIのリーダーロールは読み取り専用のため、ロケーションを強制的に作成してください

重要な注意事項

  • ステップ2の信頼ポリシーの更新は、全体の置き換えです。後から2つ目のDatabricksワークスペースや別の統合を追加する場合に既存のアクセスを失わないようにするには、Manage the Reader Role Trust Policyの読み取り・変更・書き込み(read-modify-write)の手順を使用してください。
  • リーダーIAMロールは読み取り専用です。Databricksはテーブルをクエリできますが、Treasure AIが管理するS3バケット内のデータは変更できません。
  • Database Management APIで作成したデータベースは、追加の設定なしで、外部カタログから自動的にアクセスできます。