Databricks

Lakehouse Federationで外部DBを仮想化: CONNECTION・FOREIGN CATALOG・制約

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Lakehouse Federationは、Databricksから外部データベース(PostgreSQL、MySQL、Snowflake、BigQuery等)のテーブルをデータ移動なしでクエリする仕組みです。 Unity CatalogのCONNECTIONとFOREIGN CATALOGを使って外部DBをDatabricksの名前空間に仮想的にマッピングし、 通常のSQL文でアクセスできます。ETL不要で外部データをDatabricks分析に取り込めるのが最大の利点です。

Lakehouse Federationとは

Federationは「データを移動させず、クエリを外部DBに中継する」アプローチです。 外部DBのテーブルがあたかもDatabricks上のテーブルであるかのように3レベル名前空間(catalog.schema.table)でアクセスできます。

  • データのコピーは発生しない: クエリ実行時にリアルタイムで外部DBにリクエストが飛ぶ
  • 読み取り専用: SELECT文のみ実行可能。INSERT/UPDATE/DELETEは不可
  • Unity Catalog統合: 外部テーブルにもUCのアクセス制御(GRANT/REVOKE)が適用可能
  • Pushdown最適化: WHERE句やSELECTカラムの絞り込みが外部DBにプッシュダウンされ、転送量を削減

対応データベース

外部DBCONNECTION TYPE認証方式備考
PostgreSQLPOSTGRESQLユーザー/パスワードpg_hba.confでDatabricks IPを許可
MySQLMYSQLユーザー/パスワードSSL推奨
SQL ServerSQLSERVERユーザー/パスワードAzure SQL Databaseにも対応
SnowflakeSNOWFLAKEユーザー/パスワードSnowflakeアカウント識別子を指定
BigQueryBIGQUERYサービスアカウントJSONGCPプロジェクト単位で接続
Amazon RedshiftREDSHIFTユーザー/パスワードVPCピアリングまたはパブリックアクセス

CONNECTIONの作成

CONNECTIONは外部DBへの接続情報(ホスト、ポート、認証情報)を定義するUCオブジェクトです。 作成にはCREATE CONNECTION権限が必要です。

PostgreSQLの場合

CREATE CONNECTION pg_production
TYPE POSTGRESQL
OPTIONS (
  host     'prod-db.example.com',
  port     '5432',
  user     'databricks_reader',
  password SECRET('federation-scope', 'pg-password')
);

Snowflakeの場合

CREATE CONNECTION sf_analytics
TYPE SNOWFLAKE
OPTIONS (
  host     'myorg-myaccount.snowflakecomputing.com',
  user     'DATABRICKS_SVC',
  password SECRET('federation-scope', 'sf-password'),
  sfWarehouse 'COMPUTE_WH'
);

BigQueryの場合

CREATE CONNECTION bq_data_warehouse
TYPE BIGQUERY
OPTIONS (
  GoogleServiceAccountKeyJson SECRET('federation-scope', 'bq-sa-key')
);

認証情報にはDatabricksのSecret(SECRET関数)を使い、SQLテキスト内にパスワードを直書きしないのが鉄則です。 Secret Scopeは事前にdatabricks secrets create-scope等で作成しておきます。

FOREIGN CATALOGの作成

FOREIGN CATALOGはCONNECTIONを使って外部DBのスキーマ・テーブルをUCの名前空間にマッピングするオブジェクトです。

-- PostgreSQLのデータベースをFOREIGN CATALOGとしてマッピング
CREATE FOREIGN CATALOG pg_catalog
USING CONNECTION pg_production
OPTIONS (database 'production_db');

-- Snowflakeのデータベースをマッピング
CREATE FOREIGN CATALOG sf_catalog
USING CONNECTION sf_analytics
OPTIONS (database 'ANALYTICS_DB');

-- BigQueryのプロジェクトをマッピング
CREATE FOREIGN CATALOG bq_catalog
USING CONNECTION bq_data_warehouse
OPTIONS (project 'my-gcp-project');

作成後は通常のUCテーブルと同じ3レベル名前空間でアクセスできます。

-- PostgreSQLのテーブルをクエリ
SELECT * FROM pg_catalog.public.customers WHERE region = 'APAC';

-- SnowflakeのテーブルとローカルのテーブルをクロスデータベースJOIN
SELECT
  c.customer_name,
  o.total_amount
FROM pg_catalog.public.customers c
JOIN main.gold.orders o ON c.customer_id = o.customer_id
WHERE o.order_date >= '2026-01-01';

-- BigQueryのテーブルを参照
SELECT * FROM bq_catalog.my_dataset.events LIMIT 100;

アクセス制御

FOREIGN CATALOGのテーブルにもUCのGRANT/REVOKEが適用されます。 外部DBのネイティブ権限とUC権限の2層で制御されるため、両方で許可された操作のみ実行可能です。

-- FOREIGN CATALOGの使用権限をグループに付与
GRANT USE CATALOG ON CATALOG pg_catalog TO data_analysts;
GRANT USE SCHEMA ON SCHEMA pg_catalog.public TO data_analysts;
GRANT SELECT ON TABLE pg_catalog.public.customers TO data_analysts;

-- CONNECTIONの管理権限
GRANT CREATE FOREIGN CATALOG ON CONNECTION pg_production TO catalog_admins;
  • CONNECTION作成: メタストア管理者またはCREATE CONNECTION権限保持者
  • FOREIGN CATALOG作成: CONNECTION上のCREATE FOREIGN CATALOG権限保持者
  • テーブルのSELECT: UC上のGRANT SELECT + 外部DBの読み取り権限の両方が必要

Pushdown最適化

Federationのクエリ実行時に、一部の操作が外部DBにプッシュダウンされます。 プッシュダウンされると外部DBからDatabricksに転送されるデータ量が削減され、パフォーマンスが向上します。

操作プッシュダウン備考
WHERE句のフィルタ対応等値、範囲、IN句等がプッシュダウン
カラム射影(SELECT絞り込み)対応不要カラムは転送されない
LIMIT句対応外部DBで行数を制限
JOIN非対応Spark側で処理
GROUP BY / 集約関数非対応Spark側で処理
ORDER BY非対応Spark側でソート
-- プッシュダウンの確認(EXPLAIN文)
EXPLAIN FORMATTED
SELECT customer_id, customer_name
FROM pg_catalog.public.customers
WHERE region = 'APAC' AND created_at >= '2026-01-01';

-- 結果の PushedFilters セクションに
-- [region = 'APAC', created_at >= '2026-01-01'] が表示されれば
-- フィルタがプッシュダウンされている

制約と注意事項

  • 読み取り専用: SELECT文のみ。DML(INSERT/UPDATE/DELETE/MERGE)は不可
  • パフォーマンス: 大量データの転送はネットワークボトルネックになる。WHERE句で絞り込むか、定期的にDeltaに取り込む運用を検討
  • 型マッピング: 外部DBの型がSparkの型に自動マッピングされるが、一部の型(geometry、array等)は未対応の場合がある
  • トランザクション分離: 外部DBのトランザクション分離レベルに依存。ダーティリードの可能性は外部DBの設定次第
  • ネットワーク要件: Databricksのコンピュートプレーンから外部DBへのネットワーク到達性が必要(VPCピアリング、Private Link等)
  • Deltaテーブルとの結合: FOREIGN CATALOGのテーブルとローカルのDeltaテーブルをJOINできるが、外部テーブル側のデータはすべてSpark側に転送されるため大テーブル同士のJOINは非推奨

Federation vs ETL: 使い分け判断

判断軸Federation推奨ETL(Deltaに取り込み)推奨
データ量小〜中(フィルタで絞り込める)大(全量を頻繁にクエリ)
クエリ頻度低(アドホック分析、探索的クエリ)高(定期レポート、ダッシュボード)
鮮度要件リアルタイム(常に最新が必要)バッチ(日次/時間次の更新で十分)
パフォーマンス外部DB側に十分なリソースがある高速なスキャン・結合が必要
書き込み要件不要(読み取りのみ)変換・加工してDeltaに保存

実務運用パターン

[外部DB: PostgreSQL / MySQL / Snowflake / BigQuery]
       │
       │  CONNECTION (認証情報はSecretで管理)
       v
[FOREIGN CATALOG] → UC名前空間にマッピング
       │
       ├── アドホック分析: SELECT ... WHERE で直接クエリ
       │     → Pushdownで転送量を最小化
       │
       └── ETLパイプライン: 定期的にDelta Lakeに取り込み
             → CTAS/MERGEでDeltaテーブルにマテリアライズ
             → 大量データの結合・集約はDelta上で高速処理

Federationを「探索フェーズ」で使い、価値が確認できたデータをETLでDeltaに取り込むハイブリッド運用が現実的です。

問題で確認

Data Engineer Associate / Professional

問題 1

データアナリストがPostgreSQLデータベースのcustomersテーブルをDatabricksからクエリしたい。データをコピーせず、Unity Catalogのアクセス制御を外部テーブルにも適用したい。最も適切な方法はどれか。

  1. CONNECTIONを作成し、FOREIGN CATALOGで外部DBをUCの名前空間にマッピングしてSELECTする
  2. JDBCドライバーを使ってSparkからPostgreSQLにクエリを発行し、結果をDataFrameに読み込む
  3. PostgreSQLのデータをCSVにエクスポートし、DatabricksのDBFSにアップロードする
  4. Delta SharingのレシピエントとしてPostgreSQLを登録し、データを共有する

正解: A

Lakehouse Federationでは、CONNECTIONで接続情報を定義し、FOREIGN CATALOGで外部DBをUCの名前空間にマッピングすることで、データコピーなしでSELECTクエリを実行でき、UCのGRANT/REVOKEも適用可能です。JDBCでもクエリは可能ですがUCのアクセス制御は適用されません。CSVエクスポートはデータコピーが発生します。Delta Sharingは外部組織間のDeltaデータ共有であり、PostgreSQLへの直接接続には使えません。

よくある質問

Lakehouse Federation経由で外部DBに書き込み(INSERT/UPDATE/DELETE)はできますか?

いいえ。Lakehouse Federationは読み取り専用(SELECT)の仕組みです。外部データベースへのINSERT、UPDATE、DELETEはサポートされていません。外部DBのデータを変更する必要がある場合は、そのDBのネイティブインターフェースを使用するか、JDBCドライバー経由でforeachBatch等から直接書き込む別の仕組みを構築する必要があります。

Pushdown最適化とは具体的に何が外部DBにプッシュされますか?

WHERE句のフィルタ条件、射影(SELECT対象カラムの絞り込み)、LIMIT句がプッシュダウン対象です。これにより、外部DBから転送されるデータ量が削減されます。一方、JOINやGROUP BY等の複雑な操作はSpark側で処理されるため、プッシュダウンされません。フィルタの効き具合はDatabricks SQLのEXPLAIN文で確認できます。

Lakehouse Federationを使うにはUnity Catalogが必須ですか?

はい。Lakehouse FederationはUnity Catalogのメタストア機能を利用してCONNECTIONとFOREIGN CATALOGを管理します。Unity Catalogが有効なワークスペースでのみ利用可能です。これにより、外部DBのテーブルもUC配下でアクセス制御(GRANT/REVOKE)を適用でき、ガバナンスが統一されます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.