このページでは、Azure Databricks によって管理されていない SQL Server データに対してフェデレーション クエリを実行するように Lakehouse Federation を設定する方法について説明します。 レイクハウスフェデレーションの詳細については、「レイクハウスフェデレーションとは」を参照してください。
Lakehouse フェデレーションを使って SQL Server データベースに接続するには、Azure Databricks Unity Catalog メタストアで次のものを作成する必要があります。
- SQL Server データベースへの接続。
- Unity Catalog クエリ構文とデータ ガバナンス ツールを使って、データベースへの Azure Databricks ユーザーのアクセスを管理できるよう、Unity Catalog に SQL Server データベースをミラーリングする外部カタログ。
Lakehouse フェデレーションでは、SQL Server、Azure SQL Database、Azure SQL Managed Instance がサポートされています。
はじめに
ワークスペースの要件:
- Unity Catalog ので有効化されたワークスペース。
コンピューティング要件:
- コンピューティング リソースからターゲット データベース システムへのネットワーク接続。 「Lakehouse Federation 向けネットワーク推奨事項」を参照してください。
- Azure Databricks コンピューティングでは、Databricks Runtime 13.3 LTS 以降を使用し、Standard または デディケート アクセス モードを使用する必要があります。
- SQL ウェアハウスはプロまたはサーバーレスである必要があり、2023.40 以降を使用する必要があります。
必要なアクセス許可:
- 接続を確立するには、メタストア管理者か、ワークスペースに接続されている Unity Catalog メタストアの
CREATE CONNECTION権限が付与されているユーザーである必要があります。 - 外部カタログを作成するには、メタストアの
CREATE CATALOGアクセス許可が具よされており、接続の所有者であるか、接続のCREATE FOREIGN CATALOG権限が付与されている必要があります。
その他のアクセス許可要件は、以下の各タスクベースのセクションで指定されています。
- Microsoft Entra ID を使用して SQL Server に対する認証を行う場合は、「 SQL Server フェデレーション用に Microsoft Entra ID を構成する」のセットアップを完了します。
接続を作成する
接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE CONNECTION SQL コマンドを使用します。
Note
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 「POST /api/2.1/unity-catalog/connections」および「Unity Catalog コマンド」を参照してください。
必要なアクセス許可: メタストア管理者、または CREATE CONNECTION 権限が付与されたユーザー。
カタログ エクスプローラー
Azure Databricks ワークスペースで、[
カタログ。
[カタログ] ペインの上部で、
[追加] をクリックし、メニューで、[接続を追加] を選択します。または、[クイック アクセス] ページで [外部データ] ボタンをクリックし、[接続] タブに移動して、[接続の作成] をクリックします。
接続 のセットアップ ウィザードの [接続の基本] ページで、わかりやすい 接続名入力します。
[接続の種類] で [SQL Server] を選びます。
OAuth の認証の種類、コンピューターへの OAuth マシン、またはユーザー名とパスワード (基本認証) を選択します。
(オプション) コメントを追加します。
[次へ] をクリックします。
[ 認証 ] ページで、SQL Server インスタンスの次の接続プロパティを入力します。 選択した認証方法に固有のプロパティの前には、かっこで囲まれた
Auth typeが付きます。- ホスト: 使用する SQL サーバー。
- (基本認証) ポート
- (基本認証) trustServerCertificate: 既定値は
falseです。trueに設定すると、トランスポート層は SSL を使ってチャネルを暗号化し、信頼性を検証するための証明書チェーンをバイパスします。 信頼性の検証をバイパスする必要がある場合を除き、この設定は既定値のままにします。 - (基本認証) ユーザー
- (基本認証) パスワード
- (OAuth)「 SQL Server フェデレーション用に Microsoft Entra ID を構成する」で収集した接続の詳細を入力します。
[接続の作成] をクリックします。
(基本認証)[ 接続の詳細 ] ページで、次を指定します。
- 信頼サーバー証明書の: これは既定で選択解除されています。 選択すると、トランスポート層は SSL を使用してチャネルを暗号化し、証明書チェーンをバイパスして信頼を検証します。 信頼性の検証をバイパスする必要がある場合を除き、この設定は既定値のままにします。
- アプリケーションの意図: サーバーに接続するときのアプリケーション ワークロードの種類。
[次へ] をクリックします。
カタログの基本 ページで、外部カタログの名前を入力します。 外部カタログは、カイブデータ システムのデータベースをミラリングします。これにより、クエリを実行でき、Azure Databricks と Unity Catalog を使用してそのデータベースのデータへのアクセスを管理できます。
カタログを作成 をクリックします。
[Access] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 [すべてのワークスペースにアクセス権を持たせる] を選択するか、[ワークスペースへの割り当て] をクリックしてワークスペースを選択し、[割り当て] をクリックします。
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。 テキストボックスに主要項目を入力し、表示された結果からその項目をクリックします。
カタログに関する権限 を付与します。 [許可] をクリックします。
- カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。 テキストボックスに主要項目を入力し、表示された結果からその項目をクリックします。
- 各プリンシパルに付与する 特権プリセット を選択します。 既定では、すべてのアカウント ユーザーに
BROWSEが付与されます。- ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する
read権限を付与します。 - ドロップダウン メニュー データ エディター を選択して、カタログ内のオブジェクトに対する
read権限とmodify権限を付与します。 - 付与する特権を手動で選択します。
- ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する
- [許可] をクリックします。
[次へ] をクリックします。
[メタデータ] ページで、タグのキーと値のペアを指定します。 詳細については、「Unity カタログのセキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
(オプション) コメントを追加します。
[保存] をクリックします。
Note
(OAuth) Azure Entra ID の OAuth エンドポイントに、Azure Databricks コントロール プレーンの IP からアクセスできる必要があります。 「Azure Databricks のリージョン」をご覧ください。
SQL
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE sqlserver
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
資格情報などの機密値には、プレーンテキストの文字列ではなく Azure Databricks シークレットを使用することをお勧めします。 例えば次が挙げられます。
CREATE CONNECTION <connection-name> TYPE sqlserver
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
シークレット設定の詳細については、「シークレットを管理」を参照してください。
外部カタログを作成する
Note
UI を使用してデータ ソースへの接続を作成する場合は、外部カタログの作成が含まれるので、この手順は省略できます。
外部カタログは、カイブデータ システムのデータベースをミラリングします。これにより、クエリを実行でき、Azure Databricks と Unity Catalog を使用してそのデータベースのデータへのアクセスを管理できます。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。
外部カタログを作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは SQL クエリ エディターで CREATE FOREIGN CATALOG SQL コマンドを使用します。 Databricks REST API または Databricks CLI を使用してもカタログを作成できます。
「POST /api/2.1/unity-catalog/catalogs」および「Unity Catalog コマンド」を参照してください。
必要なアクセス許可:CREATE CATALOG メタストアのアクセス許可および接続の所有権または接続の CREATE FOREIGN CATALOG 権限。
カタログ エクスプローラー
Azure Databricks ワークスペースで、[
カタログ をクリックしてカタログ エクスプローラーを開きます。
[カタログ] ペインの上部で、
[追加] をクリックし、メニューで、[カタログを追加] を選択します。または、[クイック アクセス] ページで、[カタログ] ボタンをクリックし、[カタログを作成] ボタンをクリックします。
「カタログを作成する」の外部カタログを作成する手順を実行します。
SQL
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。 次のプレースホルダー値を置き換えます。
-
<catalog-name>: Azure Databricks 内のカタログの名前。 -
<connection-name>: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト。 -
<database-name>: Azure Databricks でカタログとしてミラーリングするデータベースの名前。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
サポートされているプッシュダウン
すべてのコンピューティングで以下のプッシュダウンがサポートされています:
- Filters
- Projections
- Limit
- 関数: 部分的。フィルター式の場合のみ。 (文字列関数、数学関数、データ、時刻およびタイムスタンプ関数、Alias、Cast、SortOrder などのその他の関数)
Databricks Runtime 13.3 LTS 以降と SQL ウェアハウス コンピューティングでは、次のプッシュダウンがサポートされています。
- Aggregates
- 次のブール演算子: =、<、<=、>、>=、<=>
- 次の数学関数 (ANSI が無効な場合はサポートされません): +、-、*、%、/
- 次のその他の演算子: ^、|、~
- 制限付きで使用した場合の並べ替え
次のプッシュダウンはサポートされていません。
- Joins
- Windows 関数
データ型のマップ
SQL Server から Spark に読み取るときは、データ型が次のようにマップされます。
| SQL Server の型 | Spark の種類 |
|---|---|
| bigint (unsigned)、decimal、money、numeric、smallmoney | DecimalType |
| smallint、tinyint | ShortType |
| int | IntegerType |
| bigint (署名されている場合) | LongType |
| real | FloatType |
| float | DoubleType |
| char、nchar、uniqueidentifier | CharType |
| nvarchar、varchar | VarcharType |
| text、xml | StringType |
| binary、geography、geometry、image、timestamp、udt、varbinary | BinaryType |
| bit | BooleanType |
| date | DateType |
| datetime、datetime、smalldatetime、time | TimestampType/TimestampNTZType |
* SQL Server から読み取るとき、datetimes (既定値) の場合、SQL Server の TimestampType は Spark の preferTimestampNTZ = false にマップされます。
datetimes の場合、SQL Server の TimestampNTZType は preferTimestampNTZ = true にマップされます。