Lakehouse フェデレーションとは

この記事では、Azure Databricks を使用して複数の外部データ ソースに対してクエリを実行できるようにするクエリ フェデレーション プラットフォームである Lakehouse フェデレーションについて紹介します。 また、Lakehouse フェデレーション接続を設定し、Unity Catalog メタストアに外部カタログを作成する方法についても説明します。

Lakehouse フェデレーションとは

Lakehouse フェデレーションは、Azure Databricks のクエリ フェデレーション プラットフォームです。 クエリ フェデレーションという用語は、すべてのデータを統合システムに移行することなく、ユーザーとシステムが複数のデータ ソースに対してクエリを実行できるようにする機能のコレクションを表します。

Azure Databricks は、Unity Catalog を使用してクエリ フェデレーションを管理します。 Pro SQL ウェアハウス、サーバーレス SQL ウェアハウス、Databricks ランタイム クラスターに含まれるドライバーを使用して、一般的なデータベース ソリューションへの読み取り専用接続を構成します。 Unity Catalog のデータ ガバナンスおよびデータ系列 ツールは、Azure Databricks ワークスペース内のユーザーによって行われたすべてのフェデレーション クエリに対するデータ アクセスの管理と監査を保証します。

Lakehouse フェデレーションを使用する理由

Lakehouse は、データの冗長性と分離を減らすために、データの中央ストレージを強調しています。 組織には運用環境に多数のデータ システムがあり、接続されているシステムのデータに対してさまざまな理由でクエリを実行することが必要になる場合があります。

  • カスタム レポート。
  • 概念実証作業。
  • 新しい ETL パイプラインまたはレポートの探索フェーズ。
  • 増分移行中のワークロードのサポート。

これらの各シナリオでは、クエリ フェデレーションを使用すると、適切な場所でデータをクエリでき、複雑で時間のかかる ETL 処理を回避できるため、より迅速に分析情報を得ることができます。

Lakehouse フェデレーションは次のような場合のユースケースを対象としています。

  • Azure Databricks にデータを取り込む必要はありません。
  • クエリで外部データベース システムのコンピューティングを利用したいと考えています。
  • Unity Catalog インターフェイスと、きめ細かいアクセス制御、データ系統、検索などのデータ ガバナンスの利点を必要としています。

Lakehouse フェデレーションのセットアップの概要

Lakehouse フェデレーを使用してデータセットを読み取り専用クエリに使用できるようにするには、次のものを作成します。

  • 接続 、外部データベース システムにアクセスするためのパスと認証情報を指定する Unity Catalog 内のセキュリティ保護可能なオブジェクト。
  • 外部カタログ、外部データ システムのデータベースをミラーリングする Unity Catalog のセキュリティ保護可能なオブジェクト。これにより、Azure Databricks ワークスペースでそのデータ システムに対して読み取り専用クエリを実行できるようになり、Unity Catalog を使用してアクセスが管理されます。

サポートされるデータ ソース

Lakehouse フェデレーションは、次の種類のデータベースへの接続をサポートしています。

接続の要件

ワークスペースの要件:

  • Unity Catalog を使用できるワークスペース。

コンピューティングの要件:

  • Databricks Runtime クラスターまたは SQL ウェアハウスから対象となる データベース システムに接続するためのネットワーク接続。 「レイクハウス フェデレーションのためのネットワークに関する推奨事項」を参照してください。
  • Azure Databricks クラスターでは、Databricks Runtime 13.3 LTS 以降、および共有またはシングルユーザー アクセス モードを使用する必要があります。
  • SQL ウェアハウスは Pro またはサーバーレスである必要があり、かつ 2023.40 以上を使用する必要があります。

必要なアクセス許可:

  • 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する CREATE CONNECTION 特権を持つユーザーである必要があります。
  • 外部カタログを作成するには、メタストアに対する CREATE CATALOG 権限を持ち、接続の所有者であるか、接続に対する CREATE FOREIGN CATALOG 特権を持っている必要があります。

追加の権限要件は、以下の各タスク ベースのセクションで規定されています。

接続を作成する

接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE CONNECTION SQL コマンドを使用します。

必要な権限: メタストア管理者、または CREATE CONNECTION 特権を持つユーザー。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコン [カタログ] をクリックします。

  2. [カタログ] ペインの上部にある 追加またはプラス アイコン [追加] アイコンをクリックし、メニューから [接続の追加] を選択します。

    または、[クイック アクセス] ページで、[外部データ >] ボタンをクリックし、[接続] タブに移動し、[接続の作成] をクリックします。

  3. わかりやすい接続名を入力します。

  4. [接続の種類] (MySQL や PostgreSQL などのデータベース プロバイダー) を選択します。

  5. 接続プロパティ (ホスト情報、パス、アクセス資格情報など) を入力します。

    接続の種類ごとに異なる接続情報が必要になります。 左側の目次に記載されている、接続の種類に応じた記事を参照してください。

  6. (省略可能) [接続のテスト] をクリックして、動作することを確認します。

  7. (省略可能) コメントを追加します。

  8. Create をクリックしてください。

SQL

ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 この例は、PostgreSQL データベースへの接続を対象としています。 オプションは接続の種類によって異なります。 左側の目次に記載されている、接続の種類に応じた記事を参照してください。

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

資格情報などの機密性の高い値には、プレーンテキストの文字列ではなく Azure Databricks のシークレットを使用することをお勧めします。 次に例を示します。

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

シークレットの設定については、「シークレットの管理」を参照してください。

既存の接続の管理については、「Lakehouse フェデレーションの接続の管理」を参照してください。

外部カタログを作成する

外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。

外部カタログを作成するには、カタログ エクスプローラーを使うか、Azure Databricks ノートブックまたは SQL クエリ エディターで CREATE FOREIGN CATALOG SQL コマンドを使います。

Note

Unity Catalog API を使用することもできます。 「Azure Databricks リファレンス ドキュメント」を参照してください。

外部カタログ メタデータは、カタログとのやり取りごとに Unity Catalog に同期されます。 Unity Catalog とデータ ソースの間のデータ型マッピングについては、各データ ソースのドキュメントの「データ型マッピング」セクションを確認してください。

必要なアクセス許可: メタストアに対する CREATE CATALOG アクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG 特権。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、カタログ アイコン [カタログ] をクリックしてカタログ エクスプローラーを開きます。

  2. [カタログ] ペインの上部にある 追加またはプラス アイコン [追加] アイコンをクリックし、メニューから [カタログの追加] を選択します。

    または、[クイック アクセス] ページで、[カタログ] ボタンをクリックし、[カタログの作成] ボタンをクリックします。

  3. カタログを作成する」で外部カタログを作成する手順に従います。

SQL

ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。 プレースホルダー値を次のように置き換えます。

  • <catalog-name>: Azure Databricks 内のカタログの名前。
  • <connection-name>: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト
  • <database-name>: Azure Databricks でカタログとしてミラーリングするデータベースの名前。 2 層の名前空間を使用する MySQL には必要ありません。
  • <external-catalog-name>: Databricks 間のみ: ミラーリングしている外部 Databricks ワークスペース内のカタログの名前。 「外部カタログを作成する」を参照してください。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

外部カタログの管理と操作については、「外部カタログの管理と操作」を参照してください。

Lakehouse フェデレーションと具体化されたビュー

Databricks では、具体化されたビューを作成するときに Lakehouse フェデレーションを使って外部データを読み込むことが推奨されます。 「Databricks SQL の具体化されたビューを使用する」を参照してください。

Lakehouse フェデレーションを使う場合、ユーザーは次のようにフェデレーション データを参照できます。

CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;

システム生成フェデレーション クエリを表示する

Lakehouse Federation は、Databricks SQL ステートメントを、フェデレーション データ ソースにプッシュダウンできるステートメントに変換します。 生成された SQL ステートメントを表示するには、クエリ プロファイルのグラフ ビューで外部データ ソース スキャン ノードをクリックするか、EXPLAIN FORMATTED SQL ステートメントを実行します。 対象範囲については、各データ ソースのドキュメントの「サポートされているプッシュダウン」セクションを参照してください。

制限事項

  • クエリは読み取り専用です。
  • 接続のスロットリングは、Databricks SQL の同時クエリ制限を使用して決定されます。 接続あたりのウェアハウス間での制限はありません。 プロおよびクラシックの SQL ウェアハウスのキューと自動スケーリングに関するページを参照してください。
  • Unity Catalog で無効な名前を持つテーブルとスキーマはサポートされておらず、外部カタログの作成時に Unity Catalog によって無視されます。 命名規則と制限事項の一覧については、「制限事項」を参照してください。
  • Unity カタログでは、テーブル名とスキーマ名は小文字に変換されます。 また、検索には小文字の名前も使用する必要があります。 小文字の名前が重複するテーブルまたはスキーマがある場合、どちらか一方のテーブルまたはスキーマのみが外部カタログにインポートされます。
  • 参照される外部テーブルごとに、Azure Databricks はリモート システムでサブクエリをスケジュールして、そのテーブルからデータのサブセットを返し、その結果を 1 つのストリームで 1 つの Azure Databricks Executor タスクに返します。 結果セットが大きすぎると、Executor がメモリ不足になる可能性があります。
  • シングル ユーザー アクセス モードは、接続を所有するユーザーのみが使用できます。
  • Lakehouse Federation では、Azure Synapse 接続または Redshift 接続の大文字と小文字を区別する識別子を持つ外部テーブルをフェデレーションすることはできません。

その他のリソース