テーマ切替
Professional 学習教材 ⑩ データ共有・フェデレーション(配点 5%)
Databricks 認定データエンジニア Professional 試験のドメイン⑩「データ共有・フェデレーション」の自習教材です。 Delta Sharing(オープン共有プロトコル / Databricks 間共有)と Lakehouse フェデレーション(クエリフェデレーション)を扱います。 Azure Databricks(Microsoft Learn 日本語)公式ドキュメントを実読して作成しています。この md 単体で学習が完結するよう構成しています。
参照した公式ページ:
- Delta Sharing とは: https://learn.microsoft.com/ja-jp/azure/databricks/delta-sharing/
- Delta Sharing オープン共有プロトコルとは: https://learn.microsoft.com/ja-jp/azure/databricks/delta-sharing/share-data-open
- Delta Sharing を使用した共有データへのアクセス(受信者の場合): https://learn.microsoft.com/ja-jp/azure/databricks/delta-sharing/recipient
- 外部データベースとカタログに接続する(Lakehouse フェデレーション): https://learn.microsoft.com/ja-jp/azure/databricks/query-federation/
- フェデレーションクエリ(SQL 言語リファレンス): https://learn.microsoft.com/ja-jp/azure/databricks/sql/language-manual/sql-ref-federated-queries
- 補足(構文確認用): create-share / create-recipient-token / grant-access(同ドキュメント delta-sharing 配下)
1. このドメインの概要
このドメインは、データを移動(コピー)せずに、組織の内外で安全にアクセス・共有するための 2 つの機能を扱います。
| 機能 | 目的 | データの所在 | 一言で |
|---|---|---|---|
| Delta Sharing(デルタ共有) | 自社のデータ/AI 資産を外部の相手に共有する(送り出す) | プロバイダー側に残る | ライブデータをコピーせず安全に配布するオープンプロトコル |
| Lakehouse フェデレーション | 外部データベースのデータを Databricks から直接クエリする(読み込む) | 外部 DB に残る | データを移行せず外部 DB をそのまま照会 |
両者に共通する重要な思想は次の 2 点です。
- ゼロコピー / データを移動しない: レプリケーション(複製)を前提としないため、常に最新のライブデータにアクセスでき、重複ストレージが不要。
- Unity Catalog によるガバナンス: 共有・受信者・接続・外部カタログはすべて Unity Catalog のセキュリティ保護可能オブジェクトとして一元管理され、アクセス制御・監査が効く。
試験では「どちらの機能を使うべきか」「オープン共有と Databricks 間(D2D)共有の違い」「認証方式(ベアラートークン vs OIDC vs 共有識別子)」「フェデレーションのプッシュダウン」「読み取り専用という制約」などが問われます。
2. 重要用語集
| 用語(日本語) | English | 説明 |
|---|---|---|
| デルタ共有 | Delta Sharing | コンピューティングプラットフォームに依存せず、他組織と安全にデータ共有するために Databricks が開発したオープンプロトコル。オープンソースプロジェクトとしても提供(delta.io/sharing)。 |
| オープン共有プロトコル | Open sharing protocol | Databricks を使っていない相手や UC 非対応の相手を含む任意のプラットフォーム上の任意のユーザーと共有する方式。認証にベアラートークンまたは OIDC を使う。 |
| Databricks 間共有 / D2D 共有 | Databricks-to-Databricks (D2D) sharing | 受信者も Unity Catalog 対応 Databricks ワークスペースを持つ場合の共有方式。トークン不要。ノートブック/ボリューム/モデルも共有可能。 |
| プロバイダー | Provider | データを共有する側のエンティティ。受信者が UC 対応の場合、プロバイダー組織を表す UC セキュリティ保護可能オブジェクトにもなる。 |
| 受信者 | Recipient | プロバイダーから共有を受け取る側のエンティティ。UC 上では、組織を表し「資格情報」または「共有識別子」に関連付くセキュリティ保護可能オブジェクト。 |
| 共有 | Share | プロバイダーが受信者に共有する読み取り専用のコレクション。テーブル/ビュー/ボリューム/モデル/ノートブック等を含められる UC 登録オブジェクト。 |
| 共有識別子 | Sharing identifier | D2D 共有で受信者が自メタストアを特定するために提供する文字列。形式は <cloud>:<region>:<uuid>(例 aws:eu-west-1:b0c978c8-...)。CURRENT_METASTORE() で取得。 |
| ベアラートークン | Bearer token | オープン共有の認証手段。有効期間の長い認証トークン。資格情報ファイルに含まれ、受信者に安全に配布する。最大 1 年間有効。 |
| 資格情報ファイル | Credential file | オープン共有(トークン方式)で受信者がダウンロードする認証情報ファイル。1 回だけダウンロード可。 |
| アクティブ化リンク | Activation link / URL | 資格情報ファイルをダウンロードするための URL。プロバイダーがセキュリティで保護されたチャネルで受信者に送付。 |
| OIDC フェデレーション | OpenID Connect (OIDC) federation | 受信者の IdP が発行する JWT と引き換えに、有効期間の短い Databricks OAuth トークンを付与するオープン共有の認証方式。U2M/M2M フローがある。 |
| ディレクトリベースアクセス | Directory-based access mode | オープン共有で、受信者にクラウドストレージの場所と**一時クラウド資格情報(クラウドトークン)**を返し、直接読み取らせるモード。要件を満たさない場合は署名付き URL を使う。 |
| 署名付き URL | Pre-signed URL | オブジェクトストレージ上のファイルへ一時的にアクセスさせる、有効期間の短い URL。 |
| 動的ビュー | Dynamic view | CURRENT_RECIPIENT() を使い、受信者プロパティに応じて行/列レベルでアクセスを制限する共有可能なビュー。 |
| Lakehouse フェデレーション | Lakehouse Federation | 外部データに対する管理された読み取り専用アクセスを UC の外部カタログ経由で提供する Databricks のクエリフェデレーション基盤。 |
| クエリフェデレーション | Query federation | JDBC 経由で外部リレーショナル DB にクエリをプッシュダウンして実行する方式。クエリは Databricks とリモート両方で実行される。 |
| カタログフェデレーション | Catalog federation | 外部カタログ(Hive Metastore/Glue/Snowflake 等)を接続し、オブジェクトストレージ上のデータを直接照会する方式。Databricks 上でのみ実行され、より低コスト・高性能。 |
| 接続 | Connection | 外部サーバーを識別する UC のセキュリティ保護可能オブジェクト。URL・ポート・資格情報など通信手段を保持。CREATE CONNECTION で作成。 |
| 外部カタログ / フォーリンカタログ | Foreign catalog | 外部接続を通じて外部 DB のカタログ全体を UC に登録したもの。CREATE FOREIGN CATALOG で作成。 |
| プッシュダウン | Pushdown | フィルタや集計などのクエリ処理を外部ソース側に委譲して実行させる最適化。クエリフェデレーションの中核。 |
| Spark データソース | Spark data source | Lakehouse フェデレーション非対応・書き込みが必要・並列度の制御が必要な場合に使う、JDBC/コネクタ経由の直接読み書き手段。 |
3. 詳細解説
3-1. Delta Sharing とは(オープン共有 vs D2D 共有、ユースケース)
Delta Sharing は、使用するコンピューティングプラットフォームに関係なく他組織と安全にデータ共有するために Databricks が開発したオープンプロトコルです。Databricks Marketplace や Clean Rooms の基礎技術でもあり、他プラットフォームの Delta テーブル共有に使えるオープンソースプロジェクトとしても提供されています。
共有・プロバイダー・受信者(基本 3 概念)
- 共有(share): プロバイダーが 1 人以上の受信者に共有する読み取り専用のテーブル/パーティションのコレクション。受信者が UC 対応 Databricks の場合はノートブック・ビュー(動的ビュー含む)・ボリューム・モデルも含められる。テーブル等はいつでも追加/削除でき、アクセス権もいつでも付与/取り消しできる。UC メタストアから共有を削除すると全受信者がアクセスを失う。
- プロバイダー(provider): 受信者とデータを共有するエンティティ。組み込みの Databricks Delta Sharing サーバーと UC を使う場合、UC 有効なワークスペースが最低 1 つ必要(既存全ワークスペースの移行は不要)。
- 受信者(recipient): 共有を受け取るエンティティ。UC 上では「資格情報」または「共有識別子」に関連付くオブジェクト。メタストアごとに受信者を個別に定義する必要がある。プロバイダーが受信者を削除すると、その受信者はアクセスできた全共有を失う。
データを共有する 4 つの方法
- Databricks 間(D2D)共有プロトコル … UC 対応ワークスペース同士。組み込みサーバー利用。ノートブック/ボリューム/モデル共有、UC ガバナンス、監査、使用状況追跡など他方式にない機能をサポート。
- Databricks オープン共有プロトコル … UC 対応ワークスペースの表形式データを任意のプラットフォーム上の任意のユーザーと共有。組み込みサーバー利用。
- オープンソース Delta Sharing サーバーの自己実装 … Databricks 以外を含む任意のプラットフォーム間で共有(Azure Databricks ドキュメントでは手順を扱わない)。
- SAP Business Data Cloud (BDC) コネクタ … UC 対応ワークスペースと SAP BDC 間で共有。
オープン共有 vs Databricks 間(D2D)共有
| 観点 | オープン共有(Open sharing) | Databricks 間共有(D2D) |
|---|---|---|
| 相手 | Databricks 利用有無を問わず任意のユーザー(UC 非対応でも可) | UC 対応 Databricks ワークスペースを持つユーザー |
| 認証 | ベアラートークン または OIDC フェデレーション(トークン/資格情報が必要) | トークン不要。共有識別子で安全な接続を確立 |
| トークン管理 | プロバイダーがトークンを管理・ローテーションする必要あり | プロバイダーはトークン管理不要(プラットフォームが全て処理) |
| 共有できる資産 | Delta / Managed Iceberg の表形式データのみ | 表形式に加えノートブック・ボリューム・モデル・ビューも可 |
| アクセス手段 | Databricks / Apache Spark / pandas / Power BI など多数のコネクタ | 受信者ワークスペースで自動的に検出・利用可能 |
| クラウド | AWS 商用 → AWS GovCloud / Azure China などクラウド種別間もサポート | AWS/Azure/GCP をまたぐ他アカウントとも共有可能 |
補足: 同一アカウント内の UC メタストア間の D2D 共有は常に有効(メタストアで Delta Sharing を有効化する必要すらない)。ただし同一メタストアにアタッチされたワークスペース間では Delta Sharing 自体が不要で、UC で直接アクセス管理すればよい。
主なユースケースと利点
- クラウド/リージョン/プラットフォームをまたいだライブデータ共有。
- エグレスコスト: 同一リージョン内はエグレス費用なし。データレプリケーション不要。ただしクラウド/リージョンをまたぐとクラウドベンダーのエグレス料金が発生し得る(Cloudflare R2 からの共有はエグレス無料)。
- Lakeflow Connect(マネージドコネクタ)との使い分け: データ重複を制限したい/可能な限り最新データをクエリしたい場合は Delta Sharing。大量データ・低レイテンシ・サードパーティ API 制限対応が優先ならマネージドコネクタ(インジェスト)。
ストリーミングとタイムトラベル
- Delta Sharing は Apache Spark 構造化ストリーミングをサポート。プロバイダーが履歴付き(
WITH HISTORY)でテーブルを共有すると、受信者はストリーミングソースとして低レイテンシ増分処理でき、Delta Lake タイムトラベルクエリや CDF(変更データフィード,table_changes())クエリも可能。CDF/タイムトラベルには履歴共有が必須。
主な制限(試験頻出)
- 表形式データは Delta または Managed Iceberg 形式のみ(Parquet は CONVERT TO DELTA で変換可能)。UniForm は Delta として読み取り。
- 共有できないテーブル: パーティションフィルタ付きリキッドクラスタリング / V2 チェックポイント・R2 / 照合順序有効 / 行フィルタ・列マスク付き /
SHALLOW CLONE/ 外部キー制約付き。 - ノートブック・ボリューム・モデルは D2D 共有でのみ共有可能(オープン共有では不可)。
- 共有可能なビューは、Delta テーブルまたは他の共有可能ビューで定義する必要がある。
- 親オブジェクト(カタログ/スキーマ)の削除は、共有中の子オブジェクトも連鎖削除する(共有保護を回避してしまう)。削除前に共有から資産を外すこと。
3-2. データ共有の作成・管理(プロバイダー側:share 作成・アクセス付与・認証)
プロバイダー管理者のセットアップ手順(概要):
- メタストアで Delta Sharing を有効化(他アカウント/非 Databricks と共有する場合)。※自アカウント内メタストア間の D2D は既定で有効。
- 共有(share)を作成し、データ資産を追加。
- 受信者(recipient)を作成。
- 相手が非 Databricks または UC 非対応 → オープン共有(ベアラートークン or OIDC)。
- 相手が UC 対応 Databricks → D2D 共有(トークン不要、共有識別子を受け取る)。
- 受信者に共有へのアクセス権を付与(
GRANT SELECT ON SHARE ... TO RECIPIENT ...)。この手順はUSE SHARE+USE RECIPIENT+SET SHARE PERMISSION権限を持つ非管理者も実行可。 - 接続情報を送付(オープン共有のみ)。トークン方式ならアクティブ化リンク、OIDC ならポータル URL を送る。D2D は付与と同時に受信者ワークスペースで利用可能。
主な権限(プロバイダー側)
CREATE SHARE: 共有を作成する権限(メタストアに対して)。- 資産の追加: 共有の所有者であり、カタログ/スキーマに
USE CATALOG/USE SCHEMA、テーブルにSELECT(ボリュームはREAD VOLUME)を持つ。共有し続けるにはこれらの権限を保持する必要がある(失うと受信者もアクセス不可に)。 CREATE RECIPIENT: 受信者を作成する権限。- アクセス付与: メタストア管理者、または(
USE SHARE+SET SHARE PERMISSIONor 共有所有者)かつ(USE RECIPIENTor 受信者所有者)。
認証方式(オープン共有)
- ベアラートークン方式(
TOKEN): 受信者作成時に Azure Databricks がトークン・資格情報ファイル・アクティブ化リンクを生成。トークンは作成後最大 1 年間有効。必要に応じて更新・取り消し可能。既定の受信者トークン有効期間はメタストアで構成(有効期限の設定を推奨)。- トークンのローテーション: 既存トークンを期限切れに設定し、新トークン+アクティブ化 URL に置換。受信者は同時に最大 2 トークン(アクティブ + ローテーション中)を保持可能。
--existing-token-expire-in-seconds(0で即時失効)で旧トークン失効タイミングを制御。侵害時は即時失効を推奨。 - 重要な期限: 2025/12/8 より前に発行され、有効期限が 2026/12/8 より後または無期限のトークンは、2026/12/8 に自動失効する。
- トークンのローテーション: 既存トークンを期限切れに設定し、新トークン+アクティブ化 URL に置換。受信者は同時に最大 2 トークン(アクティブ + ローテーション中)を保持可能。
- OIDC フェデレーション方式: 受信者の IdP が発行する JWT と引き換えに有効期間の短い Databricks OAuth トークンを付与。ベアラートークンよりセキュリティ・利便性で優れる。U2M(Tableau/Power BI 等)と M2M(Python クライアント)のフローがある。
動的ビューによる行/列レベル制御
CURRENT_RECIPIENT() 関数(Databricks Runtime 14.2 以降)を使う動的ビューを共有すると、受信者プロパティに基づいて行・列を制限できる(列はマスク表示 REDACTED も可)。プロバイダー自身は共有コンテキストのため直接クエリできず、自分を受信者として共有してテストする。
監査・エグレス管理
- 監査ログとシステムテーブルで共有・受信者の作成/変更、受信者アクティビティを監視できる。
- 課金は
system.billing(Billable usage)や materialization history システムテーブルで確認。ビュー/具体化ビュー/ストリーミングテーブルの共有・アクセスでコストが発生し得る。 - IP アクセスリストで受信者アクセスを特定ネットワークに制限できる(オープン共有)。
3-3. 共有データへのアクセス(受信者側:オープン/D2D 別の手順)
受信者は読み取り専用で共有資産にアクセスする。共有ノートブックも読み取り専用だが複製して編集・実行は可能。データ更新はほぼリアルタイムで反映され、ソースデータは変更できない。
D2D モデルでアクセスする手順
- 受信者は自分の UC メタストアの共有識別子をプロバイダーに提供する。
- 形式:
<cloud>:<region>:<uuid>(例aws:eu-west-1:b0c978c8-3e68-4cdf-94af-d05c120ed1ef)。 - 取得: Catalog Explorer の Delta Sharing 設定、または SQL の
SELECT CURRENT_METASTORE();(標準/専用アクセスモードで実行)。
- 形式:
- プロバイダーが受信者・共有を作成し、アクセスを付与。
- 資格情報ファイル不要。Databricks が安全な接続を処理し、共有データはワークスペースで自動的に検出可能になる。必要なら UC できめ細かいアクセス制御を追加。
オープン共有モデルでアクセスする手順
- プロバイダーが受信者・共有を作成。
- 受信者はセキュアなチャネルで送られたアクティブ化 URL(トークン方式)またはポータル URL(OIDC 方式)を受け取り、資格情報ファイルまたは URL をダウンロードする。
- アクティブ化リンクは他者と共有しない。資格情報ファイルは 1 回だけダウンロード可能(再クリックするとボタンが無効化)。紛失したらプロバイダーに連絡。
- 資格情報ファイルを安全に保管(パスワードマネージャー推奨)。共有権のないユーザーと共有しない。
読み取り方法まとめ
| 共有方式 | 認証 | 読み取り手段 |
|---|---|---|
| オープン共有(トークン) | 資格情報ファイルのトークン。最大 1 年有効。プロバイダーが有効期限/ローテーションを管理 | Azure Databricks / Apache Spark / pandas / Power BI 等 |
| オープン共有(OIDC) | 受信者の IdP で認証。送付された URL を利用 | U2M フロー(Tableau/Power BI)、M2M フロー(Python クライアント) |
| D2D 共有 | 資格情報ファイル不要 | Databricks ワークスペースで自動検出・クエリ |
受信者は共有データのコピー(読み取り・複製)は作れるが、ソースデータの変更は不可。UC 対応の受信者ワークスペースでは監査ログで社内の誰がどのデータにアクセスしたか把握できる。
3-4. Lakehouse フェデレーション(外部 DB へのクエリ、接続と外部カタログ、プッシュダウン)
Lakehouse フェデレーションは Azure Databricks のクエリフェデレーション基盤で、UC の外部カタログを通じて外部データへの管理された読み取り専用アクセスを、自動クエリプッシュダウンときめ細かいアクセス制御付きで提供する。適用対象は Databricks SQL / Databricks Runtime 13.3 LTS 以降 / Unity Catalog のみ。
2 タイプ: クエリフェデレーション vs カタログフェデレーション
| 観点 | クエリフェデレーション | カタログフェデレーション |
|---|---|---|
| 説明 | JDBC 経由で外部リレーショナル DB にクエリをプッシュダウン | 外部カタログ(Hive Metastore/Glue/Snowflake 等)を接続し、オブジェクトストレージ上のデータを直接照会 |
| クエリ実行場所 | Databricks コンピューティングとリモートコンピューティングの両方 | Databricks コンピューティング上のみ(より低コスト・高性能) |
| 書き込み | 非対応(読み取り専用) | 非対応(読み取り専用) |
| ガバナンス | UC 外部カタログ、テーブルレベルのアクセス制御 | UC 外部カタログ、テーブルレベルのアクセス制御 |
| 最適な用途 | 運用 DB へのアドホックレポート・BI・PoC アクセス | UC への段階的移行、または外部カタログとのハイブリッドモデル維持 |
3 ステップの仕組み(クエリフェデレーション)
- 外部接続(connection)を作成 …
CREATE CONNECTION。特定のフェデレーションサーバーを UC に登録し、URL・ポート・資格情報(ユーザー名/パスワード等)などの通信手段を確立する。UC のセキュリティ保護可能オブジェクト。 - 外部カタログ(foreign catalog)を作成 …
CREATE FOREIGN CATALOG。3 レベル名前空間(catalog.schema.table)をサポートする接続なら、外部 DB のカタログ全体を UC に登録できる。スキーマ定義とその関係は外部ソースと同期される。 - アクセス権を付与 …
GRANT。通常のセキュリティ保護可能リソース同様、カタログ/スキーマ/テーブルレベルで付与できる。
これで、ローカルテーブルと外部テーブルをまたいだクエリを発行できる(プッシュダウンにより処理は外部 DB 側に委譲される)。
サポートされるデータソース
- クエリフェデレーション: MySQL / PostgreSQL / Teradata / Oracle / Amazon Redshift / Salesforce Data 360 / Snowflake / Microsoft SQL Server / Azure Synapse / Google BigQuery / Databricks。
- カタログフェデレーション: 従来の Databricks Hive メタストア / 外部 Hive メタストア / Salesforce Data 360 / Snowflake / OneLake。
Spark データソースとの使い分け
Lakehouse フェデレーションがソースをサポートしない場合・書き込みアクセスが必要な場合・クエリの並列化を細かく制御したい場合は、Spark データソース API を使う。Databricks Runtime には PostgreSQL / SQL Server / MySQL / Snowflake / Redshift などのバンドルコネクタが含まれ、JDBC 互換 DB では JDBC の UC 接続で独自ドライバも使える。PySpark DataSource API でカスタムコネクタも構築可能。
なお、ソースが Lakehouse Federation と Lakeflow Connect の両方をサポートし、データ量増大や低レイテンシのパフォーマンスが優先される場合、Databricks は Lakeflow Connect(インジェスト) を推奨する。
4. 構文・コード例
Delta Sharing(プロバイダー側)
sql
-- 共有を作成する(CREATE SHARE 権限が必要)
CREATE SHARE [IF NOT EXISTS] <share-name>
[COMMENT "<comment>"];
-- テーブルを共有に追加(パーティション/エイリアス/履歴を指定可能)
ALTER SHARE <share-name> ADD TABLE <catalog-name>.<schema-name>.<table-name>
[COMMENT "<comment>"]
[PARTITION(<clause>)] [AS <alias>]
[WITH HISTORY | WITHOUT HISTORY];
-- WITH HISTORY: タイムトラベル/ストリーミング読み取り/CDF(table_changes())に必要。
-- 既定は DBR 16.2 以降で WITH HISTORY、それ未満で WITHOUT HISTORY(スキーマ共有は常に WITH HISTORY)。
-- スキーマ全体を共有に追加(DBR 13.3 LTS 以降。PARTITION/AS は使用不可)
ALTER SHARE <share-name> ADD SCHEMA <catalog-name>.<schema-name>
[COMMENT "<comment>"];
-- パーティションで一部だけ共有
ALTER SHARE share_name
ADD TABLE inventory
PARTITION (year = "2021"),
(year = "2020", month = "Dec");
-- 受信者プロパティで動的にパーティションをフィルタ(マルチテナント共有)
ALTER SHARE <share-name> ADD TABLE <catalog>.<schema>.<table>
PARTITION (country = CURRENT_RECIPIENT().country);
-- ボリューム / モデルを共有に追加(D2D 共有のみ)
ALTER SHARE <share-name> ADD VOLUME <catalog-name>.<schema-name>.<volume-name>
[COMMENT "<comment>"] [AS <alias>];
ALTER SHARE <share-name> ADD MODEL <catalog-name>.<schema-name>.<model-name>
[COMMENT "<comment>"] [AS <alias>];sql
-- 動的ビュー: 受信者プロパティに応じた行レベル制御
CREATE VIEW my_catalog.default.view1 AS
SELECT * FROM my_catalog.default.my_table
WHERE country = CURRENT_RECIPIENT('country');
-- 動的ビュー: 列レベル制御(マスキング)
CREATE VIEW my_catalog.default.view2 AS
SELECT
CASE
WHEN CURRENT_RECIPIENT('country') = 'US' THEN pii
ELSE 'REDACTED'
END AS pii
FROM my_catalog.default.my_table;sql
-- 受信者の作成(CREATE RECIPIENT 権限が必要)。オープン共有ではトークン方式が既定(TOKEN)
CREATE RECIPIENT [IF NOT EXISTS] <recipient-name>
[COMMENT "<comment>"];
-- アクティブ化リンク(activation_link)を取得
DESCRIBE RECIPIENT <recipient-name>;sql
-- 受信者に共有アクセスを付与(SELECT が共有で許可できる唯一の権限)
GRANT SELECT ON SHARE <share-name> TO RECIPIENT <recipient-name>;
-- アクセスを取り消す
REVOKE SELECT ON SHARE <share-name> FROM RECIPIENT <recipient-name>;
-- 共有にアクセスできる受信者を一覧
SHOW GRANT ON SHARE <share-name>;
-- 受信者がアクセスできる共有を一覧
SHOW GRANTS TO RECIPIENT <recipient-name>;bash
# CLI 例
databricks recipients create <recipient-name> # 受信者作成(activation_url を出力)
databricks recipients get <recipient-name> # activation_url 取得
databricks recipients rotate-token <recipient-name> <expiration-seconds> # トークンのローテーション(0 で即時失効)D2D 共有(受信者側)
sql
-- 自メタストアの共有識別子(<cloud>:<region>:<uuid>)を取得してプロバイダーに渡す
SELECT CURRENT_METASTORE();Lakehouse フェデレーション(クエリフェデレーション)
sql
-- 1. 外部接続を作成(PostgreSQL の例)
CREATE CONNECTION postgresql_connection
TYPE POSTGRESQL
OPTIONS (
host 'qf-postgresql-demo.xxxxxx.us-west-2.rds.amazonaws.com',
port '5432',
user 'postgresql_user',
password 'password123');
-- 資格情報をシークレットスコープで隠す書き方(推奨)
CREATE CONNECTION postgresql_connection
TYPE POSTGRESQL
OPTIONS (
host 'qf-postgresql-demo.xxxxxx.us-west-2.rds.amazonaws.com',
port '5432',
user secret('secrets.r.us', 'postgresUser'),
password secret('secrets.r.us', 'postgresPassword'));
-- 2. 外部(フォーリン)カタログを作成し、外部 DB のカタログ全体を UC に登録
CREATE FOREIGN CATALOG postgresql_catalog
USING CONNECTION postgresql_connection
OPTIONS (database 'postgresdb');
-- 3. アクセス権を付与(GRANT。カタログ/スキーマ/テーブルレベル)
GRANT USE CATALOG ON CATALOG postgresql_catalog TO `data_analysts`;
-- 4. ローカルと外部をまたいでクエリ(外部側にプッシュダウンされる)
SELECT * FROM postgresql_catalog.a_schema.table1
UNION ALL
SELECT * FROM default.postgresql_schema.table2;sql
-- 接続・外部カタログの管理系コマンド
SHOW CONNECTIONS;
DESCRIBE CONNECTION <connection-name>;
ALTER CONNECTION <connection-name> ...;
DROP CONNECTION <connection-name>;
REFRESH FOREIGN CATALOG <catalog-name>; -- 外部メタデータを再同期5. 試験で問われるポイント
- Delta Sharing はオープンプロトコル。受信者は Databricks 顧客である必要はなく、UC も必須ではない(ただし UC には AI 資産共有・ガバナンス・パフォーマンスの利点)。
- オープン共有 vs D2D 共有の判断基準: 相手が UC 対応 Databricks なら D2D(トークン不要・共有識別子・ノートブック/ボリューム/モデル共有可)、それ以外はオープン共有(トークン or OIDC)。
- オープン共有の認証: ベアラートークン(長寿命、資格情報ファイル、最大 1 年、プロバイダーが管理・ローテーション)か OIDC フェデレーション(短命 OAuth トークン、IdP、U2M/M2M)。資格情報ファイルはダウンロード 1 回のみ、アクティブ化リンクは他者と共有しない。
- D2D 共有ではトークン不要。受信者は
CURRENT_METASTORE()で得た共有識別子(<cloud>:<region>:<uuid>)を提供する。 - 共有は読み取り専用。受信者はソースを変更できず、コピーは作れる。データ更新はほぼリアルタイム。
- オープン共有では表形式(Delta / Managed Iceberg)のみ。ノートブック・ボリューム・モデルは D2D 限定。
- タイムトラベル/ストリーミング/CDF には
WITH HISTORY(履歴共有)が必要。 - エグレスコスト: 同一リージョンは無料。クラウド/リージョンをまたぐと発生し得る。Cloudflare R2 はエグレス無料。
- Lakehouse フェデレーションは読み取り専用、UC のみ、DBR 13.3 LTS 以降。書き込みが必要なら Spark データソース。
- クエリフェデレーション(JDBC・プッシュダウン・両側で実行)vs カタログフェデレーション(オブジェクトストレージ直接・Databricks 上のみ・低コスト高性能) の違い。
- フェデレーションの 3 ステップ:
CREATE CONNECTION→CREATE FOREIGN CATALOG→GRANT。接続と外部カタログはどちらも UC のセキュリティ保護可能オブジェクト。 - 接続の資格情報は
secret()(シークレットスコープ) で隠すのがベストプラクティス。 - Lakehouse Federation と Lakeflow Connect の両対応ソースで大量データ/低レイテンシ優先なら Lakeflow Connect(インジェスト) が推奨される点。
6. 理解度チェックリスト
- [ ] Delta Sharing が「オープンプロトコル」であること、Databricks/UC が受信者側に必須でないことを説明できる
- [ ] 共有(share)・プロバイダー・受信者の 3 概念と、それぞれが UC オブジェクトである点を説明できる
- [ ] オープン共有と D2D 共有の違い(相手・認証・トークン管理・共有できる資産)を表で説明できる
- [ ] オープン共有の 2 つの認証方式(ベアラートークン / OIDC フェデレーション)の特徴と使い分けを説明できる
- [ ] 資格情報ファイルは 1 回だけダウンロード可能で、アクティブ化リンクを他者と共有してはいけない理由を説明できる
- [ ] D2D 共有でトークンが不要な理由と、
CURRENT_METASTORE()で共有識別子を取得する流れを説明できる - [ ] 共有が読み取り専用であり、更新がほぼリアルタイムで反映されることを説明できる
- [ ]
WITH HISTORYが必要になるケース(タイムトラベル/ストリーミング/CDF)を挙げられる - [ ] ノートブック・ボリューム・モデルが D2D 共有限定である点を説明できる
- [ ]
CREATE SHARE/ALTER SHARE ADD TABLE/GRANT SELECT ON SHARE ... TO RECIPIENTの構文を書ける - [ ] 動的ビューと
CURRENT_RECIPIENT()で行/列レベルのアクセス制御を実現する方法を説明できる - [ ] エグレスコストの発生条件(同一リージョン無料、クロスリージョン/クラウドで発生、R2 は無料)を説明できる
- [ ] Lakehouse フェデレーションが読み取り専用で、UC・DBR 13.3 LTS 以降が前提であることを説明できる
- [ ] クエリフェデレーションとカタログフェデレーションの違い(実行場所・コスト・仕組み)を説明できる
- [ ] フェデレーションの 3 ステップ(
CREATE CONNECTION→CREATE FOREIGN CATALOG→GRANT)を書ける - [ ] クエリフェデレーションでサポートされる主要データソース(PostgreSQL/MySQL/Snowflake/SQL Server/BigQuery 等)を挙げられる
- [ ] 書き込みが必要な場合や非対応ソースで Spark データソース API を使う判断ができる
- [ ] 接続の資格情報を
secret()で管理するベストプラクティスを説明できる