SQL Server 2025 の Polybase の機能強化 として次の内容があります。
SQL Server 2025 では Polybase の機能強化が行われており、Polybase のサービスをインストールしなくてもネイティブに外部データへのアクセスが可能となっています。
そのほかに大きな機能として「Managed ID のサポート」がありますが、実際に使用する際には複数の情報を確認する必要がありますので、参照する必要のある情報をまとめておきたいと思います。
サポートされる構成
SQL Server 2025 の Managed ID を使用した Polybase のサポートですが、使用可能な環構成には制限があります。
原文では次のように記載されています。
Managed Identity is available for SQL Server enabled by Azure Arc and SQL Server 2025 on Azure VMs.
上記記載のとおり、次の環境でのみ本機能を使用することが可能です。
- SQL Server 対応 Azure Arc で Azure と接続された SQL Server 2025
- Managed ID を有効にした SQL Server 2025 on Azure VM
オンプレミスであれば、Azure Arc で Azure と接続し、Azure であれば、SQL Server IaaS Agent 拡張機能 で Azure と接続された環境の必要があります。
これらの環境は SQL Server で Managed ID を使用するための前提となりますので、前提としては当然となりますが、ポイントとなるのが「2026/01/08 時点でも正しく設定をすれば、SQL Server 2025 on Azure VM でもサポートされている」ということです。
投稿時点で公開されている情報では、Azure VM 上で動作させる情報が足りておらず、ひと手間かける必要があるのですが、Azure VM でも使用することが可能です。
関連情報
Managed ID を使用した Polybase のサポートについては次の情報が関連情報となります。
- SQL Server 2025 PolyBase の機能強化
- PolyBase からマネージド ID を使用して Azure Storage に接続する
- BULK INSERT または OPENROWSET(BULK…) を使用して SQL Server にデータをインポートする
- OPENROWSET BULK(Transact-SQL)
- 外部データソースの作成(Transact-SQL)
Azure Arc 環境固有の内容は次の情報となります。
本機能の利用を検討した場合は、上述の情報を一読しておくとよいのではないでしょうか。
使用方法と Azure VM で使用する場合の注意点
Azure Arc で接続している環境で使用する場合、PolyBase からマネージド ID を使用して Azure Storage に接続する の手順を実施することで Azure Storage (or ADLS Gen2) 上のファイルを検索することができます。
「BLOB データ閲覧者」のロールを Managed Identity に付与し、次のようなクエリで設定を行うことができます。
EXECUTE sp_configure 'allow server scoped db credentials', 1;
RECONFIGURE;
GO
CREATE DATABASE SCOPED CREDENTIAL [managed_id]
WITH IDENTITY = 'Managed Identity';
GO
CREATE EXTERNAL DATA SOURCE [my_external_data_source]
WITH (
LOCATION = 'abs://<Storage Account Name>.blob.core.windows.net/<Container Name>'
-- LOCATION = 'adls://<Storage Account Name>dfs.core.windows.net/<Container Name>'
, CREDENTIAL = managed_id
);
GO
SELECT TOP 1
*
FROM
OPENROWSET (
BULK '*.parquet',
DATA_SOURCE = 'my_external_data_source',
FORMAT = 'PARQUET'
) AS T
GO
Azure Arc を使用した場合は、上記のクエリで Managed ID を使用した Polybase のアクセスを実行することができます。
Azure VM で実行した場合の問題 (2025/01/08 時点)
本投稿記載時点では、Azure VM で実行する場合には、上記のクエリの実行だけでは、次のようなエラーが発生します。
Msg 13807, Level 16, State 1, Line 28
Content of directory on path ‘*.parquet’ cannot be listed.
Msg 4860, Level 16, State 7, Line 28
Cannot bulk load. The file "*.parquet" does not exist or you don’t have file access rights.
Azure Storage の監査ログを有効にして情報を確認するとわかるのですが、Azure VM の場合、Managed ID を有効にして上記のクエリを実行するだけでは、「匿名認証」として実行されてしまい、Managed ID を使用したアクセスが行われていない状態となります。
Azure Arc でアクセスできるようにした状態の SQL Server 2025 と「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQLServer\FederatedAuthentication」のレジストリの比較をすると分かるのですが、Azure VM で SQL Server IaaS Agent 拡張機能で、Managed ID を有効にした環境では、次のレジストリの値が設定されていません。
- AADAzureStorageEndPoint (REG_SZ): storage.azure.com
- AADDataLakeEndPoint (REG_SZ): datalake.azure.net
これらのレジストリ値が存在していないため、ストレージにアクセスした際に匿名認証により接続が行われてしまっているようです。
以下のようにレジストリを設定すると、
データアクセス時に OAuth を使用した認証が行われるようになり、正常にクエリを実行することができるようになります。
本投稿記載時点ではレジストリの手動設定が必要となりますが、今後は自動的に設定されるかもしれませんので、Azure VM で動作させる場合の暫定的な対応として、上記のレジストリの設定追加を把握しておくとよいかと。
Azure Arc では接続できたのですが、Azure VM で接続ができず、レジストリの差に気づくまでかなり時間を費やしてしまいました…。