Lakehouse Federationは、Databricksから外部データベース(PostgreSQL、MySQL、Snowflake、BigQuery等)のテーブルをデータ移動なしでクエリする仕組みです。 Unity CatalogのCONNECTIONとFOREIGN CATALOGを使って外部DBをDatabricksの名前空間に仮想的にマッピングし、 通常のSQL文でアクセスできます。ETL不要で外部データをDatabricks分析に取り込めるのが最大の利点です。
Federationは「データを移動させず、クエリを外部DBに中継する」アプローチです。 外部DBのテーブルがあたかもDatabricks上のテーブルであるかのように3レベル名前空間(catalog.schema.table)でアクセスできます。
| 外部DB | CONNECTION TYPE | 認証方式 | 備考 |
|---|---|---|---|
| PostgreSQL | POSTGRESQL | ユーザー/パスワード | pg_hba.confでDatabricks IPを許可 |
| MySQL | MYSQL | ユーザー/パスワード | SSL推奨 |
| SQL Server | SQLSERVER | ユーザー/パスワード | Azure SQL Databaseにも対応 |
| Snowflake | SNOWFLAKE | ユーザー/パスワード | Snowflakeアカウント識別子を指定 |
| BigQuery | BIGQUERY | サービスアカウントJSON | GCPプロジェクト単位で接続 |
| Amazon Redshift | REDSHIFT | ユーザー/パスワード | VPCピアリングまたはパブリックアクセス |
CONNECTIONは外部DBへの接続情報(ホスト、ポート、認証情報)を定義するUCオブジェクトです。 作成にはCREATE CONNECTION権限が必要です。
CREATE CONNECTION pg_production
TYPE POSTGRESQL
OPTIONS (
host 'prod-db.example.com',
port '5432',
user 'databricks_reader',
password SECRET('federation-scope', 'pg-password')
);CREATE CONNECTION sf_analytics
TYPE SNOWFLAKE
OPTIONS (
host 'myorg-myaccount.snowflakecomputing.com',
user 'DATABRICKS_SVC',
password SECRET('federation-scope', 'sf-password'),
sfWarehouse 'COMPUTE_WH'
);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は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;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'] が表示されれば
-- フィルタがプッシュダウンされている| 判断軸 | 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のアクセス制御を外部テーブルにも適用したい。最も適切な方法はどれか。
正解: 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)を適用でき、ガバナンスが統一されます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...