クエリフェデレーションとは何ですか?
クエリフェデレーションでは、クエリは JDBC APIsを使用して外部データベースにプッシュダウンされます。 クエリは、 Databricks とリモートコンピュートの両方で実行されます。 クエリ フェデレーションは、MySQL、PostgreSQL、BigQuery、Redshift、Teradata などのソースに使用されます。
レイクハウスフェデレーションを使用する理由
レイクハウスは、データの冗長性と分離を減らすために、データの中央ストレージを重視しています。組織には多数のデータ・システムがある場合があります 本番運用 また、接続されたシステムでデータを照会する理由はいくつかあります。
- オンデマンドレポート。
- POC作業
- 新しいETLパイプラインまたはレポートの調査段階
- インクリメンタルマイグレーション中のワークロードのサポート
いずれのシナリオでも、クエリーフェデレーションを使用すると、その場でデータをクエリーでき、複雑で時間のかかるETL処理を回避できるため、より迅速に知見を得ることができます。
クエリフェデレーションは、次の場合のユースケースを対象としています。
- Databricks にデータを取り込む必要はありません。
- クエリで外部データベースシステムのコンピュートを活用したい
- きめ細かなアクセス制御、データのリネージ、検索など、Unity Catalogのインターフェースとデータガバナンスのメリットを活用したい
クエリ フェデレーションと LakeFlow Connect
クエリフェデレーションを使用すると、データを移動せずに外部データソースをクエリできます。 Databricks では、大量のデータ、低待機時間のクエリ、サードパーティの API 制限に対応するようにスケーリングできるため、マネージド コネクタを使用したインジェストをお勧めします。ただし、データを移動せずにクエリを実行することもできます。マネージド インジェスト コネクタとクエリ フェデレーションのどちらかを選択できる場合は、ETL パイプラインでのアドホック レポートまたは概念実証作業にクエリ フェデレーションを選択します。
クエリ フェデレーション設定の概要
レイクハウスフェデレーションを使用してデータセットを読み取り専用クエリーに利用できるようにするには、以下を作成します。
- 接続、外部データベース システムにアクセスするためのパスと資格情報を指定する Unity Catalog 内のセキュリティ保護可能なオブジェクト。
- フォーリンカタログは、外部データ システム内のデータベースをミラーリングする Unity Catalog のセキュリティ保護可能なオブジェクトであり、 Databricks ワークスペースでそのデータ システムに対して読み取り専用クエリを実行し、 Unity Catalogを使用してアクセスを管理できるようにします。
サポートされているデータソース
クエリ フェデレーションでは、次のソースへの接続がサポートされています。
- MySQL
- PostgreSQL
- テラデータ
- Oracle
- Amazon Redshift
- Salesforce データクラウド
- Snowflake
- Microsoft SQL Server
- Azure Synapse(SQLデータウェアハウス)
- Google BigQuery
- Databricks
接続要件
ワークスペースの要件:
- Unity Catalogのワークスペースが有効になっています。
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 レイクハウスフェデレーションのネットワーキングに関する推奨事項を参照してください。
- コンピュートDatabricks 13.3 LTS 以上Databricks Runtime標準 または 専用 アクセスモードを使用する必要があります。
- 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
権限を持つユーザー。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
カタログ ウィンドウの上部にある
追加 アイコンをクリックし、メニューから 接続の追加 を選択します。
または、 クイックアクセス ページから 外部データ > ボタンをクリックし、 接続 タブに移動して 接続を作成 をクリックします。
-
ユーザーフレンドリーな 接続名 を入力します。
-
接続タイプ (MySQLやPostgreSQLなどのデータベースプロバイダー)を選択します。
-
(オプション)コメントを追加します。
-
次へ をクリックします。
-
接続プロパティ(ホスト情報、パス、アクセス資格情報など)を入力します。
接続タイプごとに異なる接続情報が必要です。左側の目次に記載されている、接続タイプの記事を参照してください。
-
接続の作成 をクリックします。
-
フォーリンカタログの名前を入力します。
-
(オプション)[ 接続をテスト ]をクリックして、動作することを確認します。
-
[ カタログを作成 ] をクリックします。
-
作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある] を選択するか、[ ワークスペースに割り当て] をクリックしてワークスペースを選択して、[ 割り当て] をクリックします。
-
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
カタログに対する 権限 を付与します。[ 付与] をクリックします。
-
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
各プリンシパルに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSE
権限が付与されます。- ドロップダウンメニューから「 データリーダー」 を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する権限を手動で選択します。
- ドロップダウンメニューから「 データリーダー」 を選択して、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
次へ をクリックします。
-
[ メタデータ ] ページで、タグのキーと値のペアを指定します。詳細については、「セキュリティ 保護可能なオブジェクト Unity Catalog タグを適用する」を参照してください。
-
(オプション)コメントを追加します。
-
保存 をクリックします。
-
ノートブックまたは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>')
)
情報 シークレットの設定については、 シークレット管理 を参照してください。
既存の接続の管理に関する情報については、 レイクハウスフェデレーションの接続管理をご参照ください。
フォーリンカタログを作成する
UI を使用してデータソースへの接続を作成する場合は、フォーリンカタログの作成が含まれており、この手順をスキップできます。
フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、DatabricksとUnity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。
フォーリンカタログを作成するには、カタログエクスプローラCREATE FOREIGN CATALOG
SQL を使用するか、Databricks ノートブックまたは クエリSQL エディターの コマンドを使用します。Unity Catalog API を使用することもできます。 Databricks のリファレンス ドキュメントを参照してください。
フォーリンカタログのメタデータは、カタログとのやり取りごとに Unity Catalog に同期されます。 Unity Catalogとデータソース間のデータ型マッピングについては、各データソースのドキュメントの「 データ型マッピング 」セクションを確認してください。
必要な権限: メタストアの CREATE CATALOG
権限、接続の所有権または接続の CREATE FOREIGN CATALOG
権限。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
[カタログ]をクリックして カタログエクスプローラー を開きます。
-
[
カタログ] ウィンドウの上部にある [ データの追加] アイコンをクリックし、メニューから [ カタログの作成] を選択します。
または、 クイックアクセス ページから[ カタログ ]ボタンをクリックし、[ カタログを作成 ]ボタンをクリックします。
-
カタログの作成のフォーリンカタログの作成手順に従います。
ノートブックまたはSQLクエリーエディタで次のSQLコマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>
:Databricksのカタログの名前。<connection-name>
: データソース、パス、およびアクセス資格情報を指定する 接続オブジェクト 。<database-name>
:Databricksでカタログとしてミラーリングするデータベースの名前。2層の名前空間を使用するMySQLには必要ありません。<external-catalog-name>
: Databricks-to-Databricks のみ: ミラーリングする外部Databricksワークスペース内のカタログの名前。フォー リンカタログの作成を参照してください。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
情報 フォーリンカタログの管理と操作については、「 フォーリンカタログの管理と操作」を参照してください。
マテリアライズドビューを使用してフォーリンテーブルからデータを読み込む
Databricks 、マテリアライズドビューを作成するときに、クエリフェデレーションを使用して外部データをロードすることをお勧めします。 「 マテリアライズドビュー」を参照してください。
クエリフェデレーションを使用する場合、ユーザーは次のようにフェデレーションデータを参照できます。
CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;
システム生成のフェデレーション照会の表示
クエリフェデレーションは、 Databricks SQL ステートメントをフェデレーションデータソースにプッシュダウンできるステートメントに変換します。 生成された SQL 文を表示するには、 クエリプロファイルのグラフビューで外部データソーススキャンノードをクリックするか、 EXPLAIN FORMATTED SQL 文を実行します。 対象範囲については、各データソースのドキュメントの 「サポートされているプッシュダウン 」セクションを参照してください。
制限
-
クエリは読み取り専用です。
唯一の例外は、レイクハウスフェデレーションを使用してワークスペースのレガシー Hive metastore (カタログフェデレーション)をフェデレーションする場合です。 フォーリンテーブルは書き込み可能です。 フェ デレーテッド Hive metastoreでフォーリンカタログに書き込むとはどういう意味ですか?を参照してください。
-
接続の調整は、 Databricks SQL 並列 クエリ制限を使用して決定されます。 接続ごとのウェアハウス間で制限はありません。キューイングとオートスケールロジックを参照してください。
-
Unity Catalogで無効な名前のテーブルとスキーマはサポートされておらず、フォーリンカタログの作成時にUnity Catalogによって無視されます。「 制限事項」の命名規則と制限事項のリストを参照してください。
-
テーブル名とスキーマ名は、Unity Catalog で小文字に変換されます。これにより名前の競合が発生する場合、 Databricks はフォーリンカタログにインポートされるオブジェクトを保証できません。
-
参照されるフォーリンテーブルごとに、 Databricks は、リモート・システム内のサブクエリーをスケジュールして、そのテーブルからデータのサブセットを返し、その結果を 1 つのストリームで 1 つの Databricks エグゼキューター・タスクに返します。 結果セットが大きすぎると、 エグゼキューター メモリ不足で実行される可能性があります。
-
専用アクセスモード(旧シングルユーザーアクセスモード)は、接続を所有するユーザーのみが使用できます。
-
レイクハウスフェデレーションはAzure Synapse接続またはRedshift接続の大文字と小文字を区別する識別子を持つフォーリンテーブルをフェデレーションできません。
リソースクォータ
Databricks では、すべての Unity Catalog セキュリティ保護可能なオブジェクトにリソース クォータが適用されます。これらのクォータは、「 リソース制限」に一覧表示されます。フォーリンカタログとそれに含まれるすべてのオブジェクトは、合計クォータ使用量に含まれます。
これらのリソース制限を超えることが予想される場合は、Databricksアカウントチームにお問い合わせください。
クォータの使用状況は、 Unity Catalog リソース クォータ APIを使用して監視できます。 「Unity Catalog のリソース クォータの使用状況を監視する」を参照してください。