SQL Server 2022 CTP 2.0 時点の情報となり、今後の Preview / 一般提供開始時には変更されている可能性もあります。
SQL Server 2022 の新機能として「オブジェクトストレージ統合」があります。
Analytics の新機能 として、次のように記載されています。
SQL Server 2022 Preview introduces new object storage integration to the data platform, enabling you to integrate SQL Server with S3-compatible object storage, in addition to Azure Storage. The first is backup to URL and the second is Data Lake Virtualization.
Data Lake Virtualization integrates PolyBase with S3-compatible object storage, adds support for to querying parquet files with T-SQL.
機能としては、
- Azure BLOB ストレージ / S3 互換ストレージに対してのバックアップ / リストアサポート
- Azure BLOB ストレージ / S3 互換ストレージ上に格納されているファイルの分析
- OPENROWSET の Parquet ファイルサポート
が該当するはずなのですが、2022 の機能強化 / 変更部分がドキュメントだけでは分かりにくい個所がありますので、本投稿では、SQL Server 2022 のオブジェクトストレージ統合の基本的な内容についてまとめておきたいと思います。
S3 互換ストレージアクセスについては別の投稿でまとめる予定です。
Contents
従来までのオブジェクトストレージ統合
SQL Server 2019 までのバージョンでもオブジェクトストレージ統合は機能として含まれており、PolyBase を使用して実現されていました。2019 までの PolyBase では、次のストレージにアクセスをすることができました。(今回は ODBC を使用したアクセスは除いています)
- Hadoop HDFS
- Azure Blob ストレージ
SQL Server 2019 までの PolyBase では、上記のオブジェクトストレージに対してアクセスを行うことができ、これらのストレージに格納されているデータを「EXTERNAL TABLE」(外部テーブル) を経由して参照することが可能となっていました。(BLOB ストレージについては、2017 から、OPENROWSET でアクセスすることもできていましたが今回はそれは除外しています)
この際アクセスには「hadoop connectivity」の設定が使用され、アクセスについては、Java Hadoop クライアントが使用されて実行されていました。
Azue Blob ストレージへのアクセスについても、Java Hadoop クライアントが利用されており、Azure BLOB に EXTERNAL TABLE でアクセスする場合、EXTERNAL DATA SOURCE の指定は、「TYPE=HADOOP」を指定していました。
また、データアクセスについても PolyBase DMS (mpdwsvc.exe) が使用されており、SQL Server が直接オブジェクトストレージにアクセスするのではなく、PolyBase のエンジンを使用してアクセスをする形が取られていました。
SQL Server 2019 までのオブジェクトストレージ統合は Java Hadoop コネクターの利用を想定したものであり、PolyBase の DMS を使して、SQL Server 外のプロセスと強調することにより実現が行われていました。
SQL Server 2022 での Java Hadoop クライアントの廃止
SQL Server の PolyBase サポートの変更点 や The path forward for SQL Server analytics でアナウンスが行われましたが、SQL Server 2022 では、PolyBase の次の機能が廃止されます。
- PolyBase スケールアウトグループの廃止
- Java Hadoop クライアント (コネクタ) の廃止
PolyBase はスケールアウト構成をとることができる機能となっていましたが、スケールアウト構成は SQL Server 2019 までの機能となり、2022 では廃止されています。そのため、今後の PolyBase ではスケールアップ戦略をとる必要が出てきます。
もう一つ廃止される機能が「Java Hadoop クライアント」です。
前節の「従来までのオブジェクトストレージ統合」で記載していましたが、2019 まではオブジェクトストレージへのアクセスには、「Java Hadoop クライアント + PolyBase DMS」が使用されていました。
SQL Server 2022 では、Java Hadoop クライアントが廃止されたため、アクセス方法と、アクセス可能なオブジェクトストレージが変わります。
オブジェクトストレージへのアクセスについては、SQL Server のプロセスが、各オブジェクトストレージの REST API にアクセスすることで実現されるようになります。
現時点では「Azure BLOB ストレージ」「S3 互換ストレージ」に対してアクセスをすることができ、HDFS との統合を行うための Web HDFS コネクタについては、今後の CTP (CTP 2.0 より後) で導入が計画されています。
Azure Blob ストレージへのアクセス方法の変更
Java Hadoop クライアントの廃止に伴い Azure BLOB ストレージへのアクセス方法も変更となっています。(S3 互換ストレージへのアクセスは 2022 で新しく追加された機能となるので、変更点はありません)
また、バックアップ / リストアのストレージとして、オブジェクトストレージを使用するという機能もありますが、この機能については、変更点は S3 を使用することができるという点になり、それ以外に大きな変更はなさそうなため、本投稿では触れていません。
SQL Server 2019 までのアクセス方法
SQL Server 2019 まで PolyBase で Azure BLOB ストレージにアクセスする場合は、次の設定を行う必要がありました。
- 「polybase enabled」の設定を「1」に指定
- 「hadoop connectivity」の設定を「7」に指定 (Java Hadoop クライアントの接続のデータソースの種類の設定)
- DATABASE SCOPED CREDENTIAL として、BLOB ストレージのアカウント名とアカウントキーを指定
- EXTERNAL DATA SOURCE として、「TYPE=Hadoop」、Location の Prefix として「wasb[s]」(Blob Storage)「abfs[s]」(ADLS Gen2) を使用
- EXTERNAL FILE FORMAT で Parquet がサポートされるが、OPENROWSET では、Parquet がサポートされていない
- SQL Server PolyBase Data Movment Service (DMS) / SQL Server PolyBase エンジン のサービスを使用
SQL Server 2022 からのアクセス方法
SQL Server 2022 からはアクセス方法が一変します。
- 「polybase enabled」の設定を「1」に指定
- DATABASE SCOPED CREDENTIAL として、BLOB ストレージの SAS を指定 (IDENTITY は「SHARED ACCESS SIGNATURE」固定)
- EXTERNAL DATA SOURCE として、「TYPE の設定は不要」となり、Location の Prefix として「abs」(Blob Storage)「adls」(ADLS Gen2) を使用
- EXTERNAL FILE FORMAT / OPENROWSET のどちらでもParquet がサポートされる
- SQL Server PolyBase Data Movment Service (DMS) / SQL Server PolyBase エンジン のサービスは使用しない
というようなアクセス方法となります。本機能は、現時点では PolyBase と呼ばれていますが、以前のバージョンと異なり PolyBase のサービスを使うことなく、オブジェクトストレージにアクセスされています。
機能としては、従来までの PolyBase ではなく Azure SQL Managed Instance によるデータ仮想化 の MI に導入された PolyBase のイメージでいたほうが機能を理解しやすくなります。
雑感
公式なドキュメントで公開されているわけではなく、私が触ってみた中での感想となりますが、SQL Server 2022 で実装されている機能は Synapse SQL で外部テーブルを使用する で解説されている「サーバーレス SQL プール」の「ネイティブ外部テーブル」に近い機能として実装されているのではと思います。
サーバーレス SQL プールのクエリ処理エンジンについては、Polaris として POLARIS: The Distributed SQL Engine in Azure Synapse で論文が公開されています。
最終的なアクセスについては WinHttp.dll 経由で実行されているようですが、その処理の流れまでのコールスタックを確認していると Polaris という処理が散見されます。
また拡張イベントとしては「vdw_」で始まるもので、イベントを検知することができるようなので、Virtual Data Warehouse というような考え方も今後抑えておく必要がありそうですね。
SQL Server 2022 のオブジェクトストレージ統合というと S3 互換ストレージサポートに目が行きがちですが、Azure Blob ストレージへのアクセスについてもいくつかの変更が行われていますので、どのような変更が行われたのかをキャッチアップしておくことは大事ではないでしょうか。