目次
1.はじめに
皆さんこんにちは。
今回からLakehouse フェデレーションと外部カタログについて説明していきます。
現代のデータ環境で、組織は様々なソースからのデータを管理・分析する上で、以下のような課題に直面しています。
- 分散データ:重要な情報、イレーションナルデータベース、クラウドストレージシステム、ビッグデータプラットフォームなど、複数のシステムに保存されています。
- データアクセスの複雑さ:これらの複数のソースからデータにアクセスし分析するには、複数の処理手順、データの移動、複雑な統合が必要となる場合があります。
- コストと遅延:システム間でデータ移動には費用がかかり、遅延が発生する可能性があり、分析のタイムリー性に影響を与えます。
- セキュリティとアクセス管理:複数のシステムにわたるセキュリティ管理とアクセス権の一貫性を維持することは大きな課題です。
- リアルタイム分析のニーズ:組織は迅速な意思決定を行うために、複数のソースからのデータをリアルタイムで分析する能力を必要としています。
これらの課題により、データの移動や複製を必要とせずに、複数のソースからのデータを効果的、安全、かつ柔軟に接続・クエリできるソリューションが必要とされています。レイクハウスフェデレーションは、これらの課題に対応するために作られました。
すべてのデータを一つの大きな保管場所に移動して分析する代わりに、レイクハウスフェデレーションでは、データを元の場所に置いたまま、それらを一緒に分析することができます。
2. 前提要件
実施する際の前提条件は以下の通りです。
- 操作ユーザーは Azure Databricksの管理者アカウントとしてアカウント コンソールへアクセス権限があること。権限が付与されていない場合、管理者に権限を付与してもらう様に依頼してください。
- ワークスペースで Unity Catalog が有効になっていること、またワークスペースが Premium プランのアカウントで起動されていることが必要です。
- 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する CREATE CONNECTION 権限を持つユーザーである必要があります。
- 外部カタログを作成するには、メタストアに対する CREATE CATALOG 権限を持ち、接続の所有者であるか、接続に対する CREATE FOREIGN CATALOG 権限を持っている必要があります。
- Azure Databricks クラスターでは、Databricks Runtime 13.3 LTS 以降、および共有またはシングルユーザー アクセス モードを使用する必要があります。
- SQL ウェアハウスは Pro またはサーバーレスである必要があり、かつ 2023.40 以上を使用する必要があります。
3. Lakehouse フェデレーションとは
- Lakehouse フェデレーションは、Azure Databricks のクエリ フェデレーション プラットフォームです。 クエリ フェデレーションという用語は、すべてのデータを統合システムに移行することなく、ユーザーとシステムが複数のデータ ソースに対してクエリを実行できるようにする機能のコレクションを表します。
- Pro SQL ウェアハウス、サーバーレス SQL ウェアハウス、Databricks ランタイム クラスターに含まれるドライバーを使用して、一般的なデータベース ソリューションへの読み取り専用接続を構成します。
Lakehouseフェデレーションを使用してデータセットを読み取り専用クエリに使用できるようにするには、次のものを作成します。
- 接続 、外部データベース システムにアクセスするためのパスと認証情報を指定する Unity Catalog 内のセキュリティ保護可能なオブジェクト。
- 外部カタログ、外部データ システムのデータベースをミラーリングする Unity Catalog のセキュリティ保護可能なオブジェクト。これにより、Azure Databricks ワークスペースでそのデータ システムに対して読み取り専用クエリを実行できるようになり、Unity Catalog を使用してアクセスが管理されます。
4. Lakehouse フェデレーションと操作
4-1.接続を作成する
接続を作成するには、2 つの方法があります。
- 方法 1: カタログ エクスプローラー
- 方法 2: SQL
方法 1: カタログ エクスプローラー
- Azure Databricks ワークスペースで、「カタログ」をクリックします。
- 「カタログ」 ペインの上部にある 「追加」アイコンをクリックし、メニューから「接続の追加」を選択します。
1.わかりやすい接続名を入力します。(Databrick-SQL-Connection など)
2.「接続の種類」(SQL Server などのデータベース プロバイダー) を選択します。
3.接続プロパティ (ホスト情報、パス、アクセス資格情報など) を入力します。
4.接続の種類ごとに異なる接続情報が必要になります。
5.(省略可能)「接続のテスト」をクリックして、動作することを確認します。
6.(省略可能)「テスト」をクリックして、動作することを確認します。
7.「接続のテスト」ポップアップが表示されたら、「作成」をクリックして接続を作成します。
接続が作成されました。
方法 2: SQL
ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 この例は、PostgreSQL データベースへの接続を対象としています。 オプションは接続の種類によって異なります。
1 |
SQL |
1 2 3 4 5 6 7 |
CREATE CONNECTION <connection-name> TYPE postgresql OPTIONS ( host '<hostname>', port '<port>', user '<user>', password '<password>' ); |
資格情報などの機密性の高い値には、プレーンテキストの文字列ではなく Azure Databricks のシークレットを使用することをお勧めします。 次に例を示します。
1 |
SQL |
1 2 3 4 5 6 7 |
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 フェデレーションの接続の管理」を参照してください。
4-2.外部カタログを作成する
外部カタログを作成するには、2 つの方法があります。
- 方法 1: カタログ エクスプローラー
- 方法 2: SQL
方法 1: カタログ エクスプローラー
1.Azure Databricks ワークスペースで、「カタログ」をクリックしてカタログ エクスプローラーを開きます。
2.「カタログ」ペインの上部にある 「追加」アイコンをクリックします。
3.メニューから「カタログを追加」を選択します。
1.新しいカタログの作成ダイアログで、カタログ名を入力します。(「Foreign-Catalog」など ) 。
2.カタログ タイプ「外部」を選択します。これは、Lakehouse フェデレーションを使用して外部データ システムのデータベースをミラーリングするセキュリティ保護可能なオブジェクトです。
3.接続を選択します。これは前の手順で作成した接続です。
4.データベース名を入力します。これはデータベースの名前です。
5.「接続のテスト」をクリックします。
6.「テスト」をクリックします。
7.「新規カタログを作成」ポップアップが表示されたら、「作成」をクリックして新しい外部カタログを作成します。
8.新しい外部カタログが作成されました。
9.「カタログの構成」をクリックします。
- アカウント内の特定のワークスペースを通じてカタログ内のデータへのアクセス制限を設定できます。
- デフォルト設定では、現在のメタストアに接続されているすべてのワークスペースとカタログを共有します。
- 「次へ」をクリックします。
- この外部カタログへの権限を持つユーザー、グループ、およびサービス プリンシパルを指定します。デフォルトでは、すべてのアカウント ユーザーに BROWSE 権限があります。
- 「次へ」をクリックします。
- マークダウン コメントとタグを追加して、発見可能性とガバナンスを向上させます。
- 「保存」をクリックして、外部カタログの作成とセットアップを完了します。
外部カタログ – 概要
外部カタログ – 詳細
- 外部カタログ – 権限
-
- デフォルトでは、すべてのアカウント ユーザーに外部カタログに対する権限「BROWSE」(オブジェクト メタデータの読み取りが可能) が付与されます。
- 外部カタログ – ワークスペース
-
- デフォルトでは、すべてのワークスペースに外部カタログへのアクセス権が付与されます。
外部カタログのテーブル コンテンツの表示
方法 2: SQL
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。角括弧内の項目は省略可能です。 プレースホルダー値を次のように置き換えます。
<catalog-name>: Azure Databricks 内のカタログの名前。
<connection-name>: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト。
<database-name>: Azure Databricks でカタログとしてミラーリングするデータベースの名前。 2 層の名前空間を使用する MySQL には必要ありません。
<external-catalog-name>: Databricks 間のみ: ミラーリングしている外部 Databricks ワークスペース内のカタログの名前。「外部カタログを作成する」を参照してください。
1 |
SQL |
1 2 |
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name> OPTIONS (database '<database-name>'); |
4-3.外部カタログ内のデータへの読み取り専用アクセス権を付与する
1. 「カタログ」をクリックします。
2.許可を与える必要があるforeign-catalogを選択します。
3.「許可」をクリックします。
4.「付与」をクリックします。
1.プリンシパル: 割り当てるユーザーまたはグループを選択します。(「カスタム グループ」など )”
2.権限プリセット: 「データ リーダー」または「データ エディター」
- 権限「データ リーダー」
- 権限「データ エディター」
- 権限プリセット「データ リーダー」と「データ エディター」を比較します。
- 違いは「タグの適用」のみです。タグの適用により、プリンシパルはオブジェクトにタグを追加および編集できます。
3.権限プリセット。( データ リーダー など )
4.「付与」をクリックします。
4.割り当てられた権限を再度確認します。
4-4.ノートブックを使用してデータを取得する
テーブルは 4 つあります。ノートブックを使用して、コースの平均成績を計算します。
以下の SQL コマンドをコピーしてノートブックに貼り付け、実行します。
1 |
SQL |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SELECT AVG( CASE WHEN foreign_table_course.Name = "Circuit Analysis" THEN foreign_table_credit.Grade ELSE NULL END ) AS avg_students_grade FROM `foreign-catalog`.dbo.course AS foreign_table_course JOIN `foreign-catalog`.dbo.credit AS foreign_table_credit ON foreign_table_course.Name = foreign_table_credit.Grade WHERE foreign_table_course.Name = "Circuit Analysis"; |
実行後、結果が表示されているのがわかります。
5.まとめ
本連載では、
Lakehouse フェデレーションと外部カタログについて説明しました。
今回の記事が少しでもDatabricksを知るきっかけや、業務のご参考になれば幸いです。
日商エレクトロニクスでは、Azure Databricksの環境構築パッケージを用意しています。
Azure DatabricksやAzure活用、マイクロソフト製品の活用についてご相談事がありましたらぜひお問い合わせください!
・Azure Databricks連載シリーズはこちら
この記事を読んだ方へのオススメコンテンツはこちら
この記事を書いた人
- phongcq