レイクハウスフェデレーションとは
この記事では、Databricksを使用して複数の外部データソースに対してクエリーを実行できるようにするクエリーフェデレーションプラットフォームである、レイクハウスフェデレーションについて説明します。また、レイクハウスフェデレーション接続を設定し、Unity Catalogメタストアにフォーリンカタログを作成する方法についても説明します。
レイクハウスフェデレーションとは
レイクハウスフェデレーションは、Databricksのクエリーフェデレーションプラットフォームです。クエリーフェデレーションという用語は、すべてのユーザーを統一システムに移行しなくても、ユーザーとシステムが複数のデータソースに対してクエリーを実行できるようにする機能のコレクションを表します。
Databricksは、 Unity Catalogを使用してクエリーフェデレーションを管理します。Pro SQL ウェアハウス、Serverless SQL ウェアハウス、および Databricks Runtime クラスターに含まれているドライバーを使用して、一般的なデータベースソリューションへの読み取り専用接続を構成します。Unity Catalogのデータガバナンスとデータリネージツールを使用すると、Databricksワークスペース内のユーザーが作成したすべてのフェデレーションクエリーのデータアクセスが管理および監査されます。
レイクハウスフェデレーションを使う理由は?
レイクハウスでは、データの冗長性と分離を減らすために、データの中央ストレージを強調しています。 組織では、本番運用に多数のデータシステムがあり、次のような理由で接続されたシステムのデータをクエリーしたい場合があります。
アドホックなレポート
POC作業
新しいETLパイプラインまたはレポートの調査段階
インクリメンタルマイグレーション中のワークロードのサポート
いずれのシナリオでも、クエリーフェデレーションを使用すると、その場でデータをクエリーでき、複雑で時間のかかるETL処理を回避できるため、より迅速に知見を得ることができます。
レイクハウスフェデレーションは、以下のような用途に適しています。
Databricksにデータを取り込みたくない
クエリで外部データベースシステムのコンピュートを活用したい
きめ細かなアクセス制御、データのリネージ、検索など、Unity Catalogのインターフェースとデータガバナンスのメリットを活用したい
レイクハウスフェデレーションのセットアップの概要
レイクハウスフェデレーションを使用してデータセットを読み取り専用クエリーに利用できるようにするには、以下を作成します。
接続:外部データベースシステムにアクセスするためのパスと認証情報を指定する、Unity Catalogのセキュアなオブジェクト。
外部カタログ:外部データシステムのデータベースをミラーリングするUnity Catalog内の保護可能なオブジェクト。これにより、Databricksワークスペース内のそのデータシステムに対して読み取り専用クエリ^を実行でき、Unity Catalogを使用してアクセスを管理できます。
接続要件
ワークスペースの要件:
Unity Catalogのワークスペースが有効になっています。
コンピュートの要件:
コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。
Databricks コンピュートは、Databricks Runtime 13.3 LTS 以上、および共有またはシングル ユーザー アクセス モードを使用する必要があります。
SQLウェアハウスはProまたはServerlessで、2023.40以上を使用している必要があります。
必要な権限:
接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの
CREATE CONNECTION
権限を持つユーザーである必要があります。フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
権限を持っている必要があります。
追加の権限要件は、以下の各タスクベースのセクションに記載しています。
接続を作成する
接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、Databricksノートブックまたは Databricks SQLクエリーエディタで CREATE CONNECTION
SQLコマンドを使用できます。
注:
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections を参照してください。 および Unity Catalog コマンド。
必要な権限:メタストア管理者またはCREATE CONNECTION
権限を持つユーザー。
Databricks ワークスペースで、カタログをクリックします。
[カタログ]ウィンドウの上部にある追加アイコンをクリックし、メニューから[接続を追加]を選択します。
または、クイックアクセスページから外部データ > ボタンをクリックし、[接続]タブに移動して[接続を作成]をクリックします。
ユーザーフレンドリーな接続名を入力します。
接続タイプ(MySQLやPostgreSQLなどのデータベースプロバイダー)を選択します。
接続プロパティ(ホスト情報、パス、アクセス資格情報など)を入力します。
接続タイプごとに異なる接続情報が必要です。左側の目次にリストされている接続の種類に関する記事を参照してください。
(オプション)[接続をテスト]をクリックして、動作することを確認します。
(オプション)コメントを追加します。
[作成]をクリックします。
ノートブックまたはSQLクエリーエディターで次のコマンドを実行します。この例はPostgreSQLデータベースへの接続です。オプションは接続タイプによって異なります。左側の目次にリストされている接続の種類に関する記事を参照してください。
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
認証情報などの機密性の高い値には、プレーンテキストの文字列の代わりに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>')
)
シークレットの設定については、「シークレット管理」を参照してください。
既存の接続の管理については、「レイクハウスフェデレーションの接続を管理する」を参照してください。
フォーリンカタログの作成
フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、DatabricksとUnity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。
フォーリンカタログを作成するには、カタログエクスプローラー、またはDatabricksノートブックまたはSQLクエリーエディターのCREATE FOREIGN CATALOG
SQLコマンドを使用できます。
注:
Unity Catalog APIを使用することもできます。Databricksリファレンスドキュメントを参照してください。
フォーリンカタログのメタデータは、カタログとやり取りするたびにUnity Catalogに同期されます。Unity Catalogとデータソース間のデータ型マッピングについては、各データソースのドキュメントの「データ型マッピング」セクションを確認してください。
必要な権限:メタストアの CREATE CATALOG
権限、接続の所有権または接続の CREATE FOREIGN CATALOG
権限。
Databricks ワークスペースで、[カタログ]をクリックしてカタログエクスプローラーを開きます。
カタログペインの上部で、 追加アイコンをクリックし、メニューから[カタログを追加]を選択します。
または、クイックアクセスページから[カタログ]ボタンをクリックし、[カタログを作成]ボタンをクリックします。
「カタログの作成」のフォーリンカタログの作成手順に従ってください。
ノートブックまたはSQLクエリーエディタで次のSQLコマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>
:Databricksのカタログの名前。<connection-name>
:データソース、パス、およびアクセス認証情報を指定する接続オブジェクト。<database-name>
:Databricksでカタログとしてミラーリングするデータベースの名前。2層の名前空間を使用するMySQLには必要ありません。<external-catalog-name>
:DatabrickstoDatabricks のみ: ミラーリングする外部 Databricks ワークスペース内のカタログの名前。「フォーリンカタログの作成」を参照してください。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
フォーリンカタログの管理と操作に関する情報については、「 フォーリンカタログの管理と操作」を参照してください。
レイクハウスフェデレーションとマテリアライズドビュー
Databricks では、マテリアライズドビューを作成するときに、レイクハウスフェデレーションを使用して外部データを読み込むことをお勧めします。 「Databricks SQL でのマテリアライズドビューの使用」を参照してください。
レイクハウスフェデレーションを使用すると、ユーザーは次のようにフェデレーションデータを参照できます。
CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;
システム生成の横串検索を表示する
レイクハウスフェデレーションは、Databricks SQLステートメントをフェデレーションデータソースにプッシュダウンできるステートメントに変換します。生成されたSQL文を表示するには、クエリープロファイルのグラフビューで外部データソースのスキャンノードをクリックするか、EXPLAIN FORMATTED SQL文を実行します。対象範囲については、各データソースのドキュメントの「サポートされているプッシュダウン」のセクションを参照してください。
制限事項
クエリは読み取り専用です。
接続のスロットリングは、Databricks SQLの同時クエリー制限を使用して決定されます。1接続あたりのウェアハウス数に制限はありません。プロおよびクラシック SQL ウェアハウスのキューイングとオートスケールを参照してください。
Unity Catalog で無効な名前を持つテーブルとスキーマはサポートされておらず、フォーリンカタログの作成時に Unity Catalog によって無視されます。「 制限事項」の命名規則と制限事項の一覧を参照してください。
テーブル名とスキーマ名は、 Unity Catalogでは小文字に変換されます。ルックアップでは、小文字の名前も使用する必要があります。小文字の名前が重複するテーブルまたはスキーマがある場合、テーブルまたはスキーマの 1 つだけがフォーリンカタログにインポートされます。
参照されるフォーリンテーブルごとに、 Databricksリモート システムでサブクエリをスケジュールして、そのテーブルからデータのサブセットを返し、その結果を単一のストリームで 1 つのDatabricksエゼグキュータータスクに返します。 結果セットが大きすぎる場合、エグゼキューターがメモリ不足で実行される可能性があります。
シングルユーザーアクセスモードは、接続を所有するユーザーのみが使用できます。
レイクハウスフェデレーションはAzure Synapse接続またはRedshift接続の大文字と小文字を区別する識別子を持つフォーリンテーブルをフェデレーションできません。
リソースクォータ
Databricks は、すべての Unity Catalog セキュリティ保護可能なオブジェクトにリソース クォータを適用します。 これらのクォータは、「 リソース制限」に記載されています。 フォーリンカタログとそれに含まれるすべてのオブジェクトは、クォータ使用量の合計に含まれます。
これらのリソース制限を超えることが予想される場合は、Databricksアカウントチームにお問い合わせください。
クォータの使用状況は、 Unity Catalog リソース クォータ APIsを使用して監視できます。 「Unity Catalog のリソース クォータの使用状況を監視する」を参照してください。
関連リソース
SQL言語リファレンスのフェデレーションクエリー (レイクハウスフェデレーション)