Microsoft SQL Server でフェデレーション クエリを実行する
この記事では、 によって管理されていない データに対して横串検索を実行するようにレイクハウスフェデレーションを設定する方法について説明します。SQL ServerDatabricksレイクハウスフェデレーションの詳細については、「 レイクハウスフェデレーションとは」を参照してください。
レイクハウスフェデレーションを使用して SQL Server データベースに接続するには、 Databricks Unity Catalog メタストアに次のものを作成する必要があります。
- SQL Server データベースへの接続。
- SQL Server データベースを Unity Catalog にミラーリングして Unity Catalog クエリー構文とデータガバナンス ツールを使用してデータベースへの Databricks ユーザー アクセスを管理できるようにする フォーリンカタログ 。
レイクハウスフェデレーションは、 SQL Server、 Azure SQL Database、 Azure SQL Managed Instance をサポートしています。
始める前に
ワークスペースの要件:
- Unity Catalogのワークスペースが有効になっています。
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。
- Databricks コンピュートは、 Databricks Runtime 13.3 LTS 以上、 および標準 または 専用 アクセスモードを使用する必要があります。
- SQLウェアハウスはProまたはServerlessで、2023.40以上を使用している必要があります。
必要な権限:
- 接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの
CREATE CONNECTION
権限を持つユーザーである必要があります。 - フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
権限を持っている必要があります。
追加の権限要件は、以下の各タスクベースのセクションに記載しています。
- OAuthを使用して認証する場合は、Microsoft Databricksの Entra ID アプリを登録する詳細については、次のセクションを参照してください。
(オプション)Databricks の Microsoft Entra ID にアプリを登録する
OAuth を使用して認証する場合は、SQL Server 接続を作成する前に、この手順に従ってください。 代わりにユーザー名とパスワードを使用して認証する場合は、このセクションをスキップしてください。
- Azure portal にサインインします。
- 左側のナビゲーションで、[ Microsoft Entra ID ] をクリックします。
- [アプリの登録] をクリックします。
- [ 新規登録 ] をクリックします。 新しいアプリの名前を入力し、リダイレクト URI を
https://<workspace-url>/login/oauth/azure.html
に設定します。 - 登録 をクリックします。
- [要点 ] ボックスで、 アプリケーション (クライアント) ID をコピーして保存します。この値を使用して、アプリケーションを構成します。
- 「証明書とシークレット 」をクリックします。
- クライアント シークレット タブで、 新しいクライアント シークレット をクリックします。
- シークレットの説明と有効期限を入力します (デフォルト設定は 180 日です)。
- [ 追加 ] をクリックします。
- クライアントシークレットに生成された値をコピーします。
- [ API のアクセス許可 ] をクリックします。
- [ 権限を追加 ] をクリックします。
- [Azure SQL Database ] を選択し 、[ 委任されたアクセス許可 ] で [user_impersonation] をクリックします。
- 「 権限を追加 」をクリックします。
接続を作成する
接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、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 ワークスペースで、
カタログ をクリックします。
-
[カタログ]ウィンドウの上部にある [
追加] アイコンをクリックし、メニューから [ 接続の追加] を選択します。
または、[ クイック アクセス ] ページで [ 外部データ ] ボタンをクリックし、[ 接続 ] タブに移動して [ 接続の作成 ] をクリックします。
-
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。
-
[ 接続の種類 ] で [SQL Server ] を選択します。
-
[ OAuth ] または [ ユーザー名とパスワード (基本認証)] の [認証タイプ ] を選択します。
-
(オプション)コメントを追加します。
-
次へ をクリックします。
-
[ 認証 ] ページで、SQL Server インスタンスの次の接続プロパティを入力します。選択した認証方法に固有のプロパティの前には、括弧内の
Auth type
が付きます。- ホスト : SQL サーバー。
- (基本認証) 港
- (基本認証) trustServerCertificate : デフォルトは
false
です。true
に設定すると、トランスポートレイヤーはSSLを使用してチャンネルを暗号化し、証明書チェーンをバイパスして信頼性を検証します。これは、信頼検証をバイパスする特定の必要がない限り、デフォルトのままにします。 - (基本認証) 利用者
- (基本認証) パスワード
- (OAuthの) 認証エンドポイント :
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
の形式の Azure Entra 認証エンドポイント。 - (OAuthの)作成したアプリの クライアント ID 。
- (OAuthの)作成したクライアントシークレットの クライアントシークレット 。
- (OAuthの) OAuth スコープ : 変更せずに次の値を入力します:
https://database.windows.net/.default offline_access
。 - (OAuthの) [Azure Entra ID でサインイン ] をクリックします。Azure のユーザー名とパスワードを入力します。 [認証 ] ページにリダイレクトされると、認証コードが UI に入力されます。
-
接続の作成 をクリックします。
-
(基本認証) [接続の詳細 ] ページで、次の項目を指定します。
- 信頼サーバー証明書 : デフォルトでは選択されていません。選択すると、トランスポート層は SSL を使用してチャンネルを暗号化し、証明書チェーンをバイパスして信頼を検証します。 これは、信頼検証をバイパスする特定の必要がない限り、デフォルトのままにします。
- アプリケーションの意図 : サーバーに接続するときのアプリケーションのワークロードの種類。
-
次へ をクリックします。
-
[カタログの基本 ] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。
-
[ カタログを作成 ] をクリックします。
-
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある ] を選択するか、[ ワークスペースに割り当て ] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。
-
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
カタログに対する 権限を付与 します。[ 許可 ] をクリックします。
-
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
各プリンシパルに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSE
が付与されます。- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する権限を手動で選択します。
- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
-
次へ をクリックします。
-
[メタデータ] ページで、タグのキーと値のペアを指定します。詳細については、「Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
-
(オプション)コメントを追加します。
-
保存 をクリックします。
(OAuthの)Azure Entra ID OAuth エンドポイントは、Databricks コントロール プレーン IP からアクセスできる必要があります。「Databricks のクラウドとリージョン」を参照してください。
ノートブックまたはDatabricks SQLクエリーエディタで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE sqlserver
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>'
);
資格情報などの機密性の高い値には、プレーンテキスト文字列の代わりに 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>')
)
シークレットの設定に関する情報については、「 シークレット管理」を参照してください。
フォーリンカタログの作成
UI を使用してデータソースへの接続を作成する場合は、フォーリンカタログの作成が含まれているため、この手順をスキップできます。
フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、DatabricksとUnity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。
フォーリンカタログを作成するには、Catalog ExplorerCREATE FOREIGN CATALOG
SQL を使用するか、Databricks ノートブックまたは クエリSQL エディターの コマンドを使用します。Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。 POST /api/2.1/unity-catalog/catalogs を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストアの CREATE CATALOG
権限、接続の所有権または接続の CREATE FOREIGN CATALOG
権限。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
[カタログ]をクリックして カタログエクスプローラー を開きます。
-
カタログ ペインの上部で、
追加 アイコンをクリックし、メニューから[ カタログを追加 ]を選択します。
または、 クイックアクセス ページから[ カタログ ]ボタンをクリックし、[ カタログを作成 ]ボタンをクリックします。
-
「カタログの作成」のフォーリンカタログの作成手順に従います。
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>
:Databricksのカタログの名前。<connection-name>
: データソース、パス、およびアクセス認証情報を指定する 接続オブジェクト 。<database-name>
:Databricksでカタログとしてミラーリングするデータベースの名前。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
サポートされているプッシュダウン
次のプッシュダウンは、すべてのコンピュートでサポートされています。
- フィルター
- 予測
- 上限
- 関数: 部分的、フィルター式のみ。 (文字列関数、数学関数、データ関数、時刻関数、タイムスタンプ関数、およびエイリアス、キャスト、ソートオーダーなどのその他の関数)
次のプッシュダウンは、 Databricks Runtime 13.3 LTS 以降、および SQLウェアハウス コンピュートでサポートされています。
- 集計
- 次の Boolean 演算子: =、<、<=、>、>=、<=>
- 次の数学関数 (ANSI が無効になっている場合はサポートされません): +、-、*、%、/
- 次の雑多な演算子:^、|、~
- ソート (制限付きで使用した場合)
次のプッシュダウンはサポートされていません。
- テーブルのJOIN
- Windows の機能
データ型マッピング
SQL Server から Spark に読み取る場合、データ型は次のようにマップされます。
SQL Server の種類 | Spark タイプ |
---|---|
bigint (unsigned), decimal, money, numeric, smallmoney | DecimalType |
smallint、tinyint | ShortType |
int | IntegerType |
bigint (signed) | LongType |
real | FloatType |
float | DoubleType |
文字、n文字、一意の識別子 | CharType |
バーチャー、バーチャー | VarcharType |
text, xml | StringType |
binary, geography, geometry, image, timestamp, udt, varbinary | BinaryType |
bit | BooleanType |
日付 | DateType |
datetime, datetime, smalldatetime, time | TimestampType/TimestampNTZType |
※ SQL Serverから読み込む場合、 SQL Server datetimes
は Spark TimestampType``preferTimestampNTZ = false
if (デフォルト)にマッピングされます。 SQL Server datetimes
は、preferTimestampNTZ = true
の場合、TimestampNTZType
にマップされます。