PolyBase を使用してデータの接続、クエリ、エクスポートを行う

対象者:SQL Server 2016 (13.x) およびそれ以降のバージョン Azure SQL DatabaseAzure SQL Managed InstanceSQL Database in Microsoft Fabric

データ仮想化 を使用すると、外部データをデータベースに読み込まずに、Transact-SQL (T-SQL) クエリを外部データに対して実行できます。 外部データ ソース、オプションのファイル形式、および外部テーブルを定義し、他のテーブルと同様に SELECT を使用して外部テーブルにクエリを実行します。

このガイドは、次のことに役立ちます。

  • 対応する SQL プラットフォームとバージョンによってサポートされる PolyBase の機能を理解してください。
  • OPENROWSET、外部テーブル、およびデータのクエリまたは取り込みのBULK INSERTを選択します。
  • 一般的なシナリオについては、ステップ バイ ステップのリンクに従ってください。
  • 運用ワークロードのパフォーマンス、トラブルシューティング、ベスト プラクティスを確認します。

プラットフォームのサポート

一般的なユース ケース

次の表では、考えられる使用シナリオについて説明します。

シナリオ 用途
アドホック ファイルの探索 OPENROWSET(BULK ...)
BIやレポートのための再利用可能なファイルクエリ ファイル上の外部テーブル
データベース間クエリ (SQL Server、Oracle、Teradata、MongoDB、ODBC) 外部テーブルを含む PolyBase コネクタ
クエリ結果をファイルにエクスポートする CREATE EXTERNAL TABLE AS SELECT (CETAS)
テーブルへの一括取り込み BULK INSERT または OPENROWSET(BULK ...) と INSERT ... SELECT
  • アドホックファイル探索のために、再利用可能なテーブルを作成せずにファイルを検査するために OPENROWSET(BULK ...) を使いましょう。
  • BIやレポート作成のシナリオで再利用可能なファイルクエリを行う場合、ファイル上の外部テーブルを用いてスキーマを永続化し、クエリ間で結果を共有できます。
  • クロスデータベースクエリの場合は、外部テーブルを持つPolyBaseコネクターを使ってSQL Server、Oracle、Teradata、MongoDB、またはODBCソースにアクセスします。
  • クエリ結果をファイルにエクスポートする場合は、 CREATE EXTERNAL TABLE AS SELECT (CETAS)を使ってParquetやCSVの出力をデータベース外に書き込みます。
  • テーブルへの一括取り込みには、 BULK INSERT または OPENROWSET(BULK ...) を INSERT ... SELECT でデータベーステーブルにファイルデータを読み込みます。

利用可能な機能はどこにありますか?

以下の表は、SQL Server 2019以降、各SQLプラットフォームで利用可能な主要なPolyBaseおよびデータ仮想化機能を示しています。 SQL Server 2016およびSQL Server 2017 on Windowsの機能利用可能性については、PolyBaseの機能と制限を参照してください。 この表を使用して、詳細なガイドを使用する前に、プラットフォームで何ができるかを判断します。

特徴 SQL Server 2019 SQL Server 2022 SQL Server 2025 Azure SQL Database Azure SQL Managed Instance Microsoft Fabric の SQL データベース
外部テーブル はい はい はい はい はい はい
OPENROWSET (BULK) はい 1 はい はい はい はい はい
CETAS (エクスポート) いいえ はい はい いいえ はい いいえ
CSV/区切りファイル はい 2 はい はい はい はい はい
Parquet ファイル いいえ はい はい はい はい はい
Delta Lake テーブル いいえ はい はい いいえ いいえ いいえ
別の SQL Server に接続する はい はい はい いいえ いいえ いいえ
Azure SQL Database または Azure SQL Managed Instance に接続する はい 3 はい 3 はい 3 いいえ いいえ いいえ
Oracle/Teradata/MongoDB への接続 はい はい はい いいえ いいえ いいえ
Azure Blob Storage に接続する はい はい はい はい はい いいえ
ADLS Gen2 に接続する はい 5 はい はい はい はい いいえ
S3 互換ストレージに接続する いいえ はい はい いいえ いいえ いいえ
OneLake に接続する (Fabric) いいえ いいえ いいえ いいえ いいえ はい
プッシュダウン計算 はい はい はい いいえ いいえ いいえ
マネージド ID 認証 いいえ いいえ はい 4 はい はい いいえ

1 SQL Server 2019 (15.x) では、ローカル およびネットワーク ファイル パスの OPENROWSET(BULK...) がサポートされます。 SQL Server 2022 (16.x) 以降のバージョンでは、 OPENROWSET(BULK...) では、 FORMAT = 'PARQUET'、 FORMAT = DELTA、 FORMAT = 'CSV'を使用したクラウド ストレージからの読み取りもサポートされています。

SQL Server 2019 (15.x) での 2 つの CSV サポートには Hadoop が必要です。 SQL Server 2022 (16.x) 以降のバージョンでは、CSV は Hadoop なしでネイティブにサポートされています。

3 SQL Server コネクタ (sqlserver://) を使用します。 データベーススコープ認証情報はSQLエンドポイントを対象とします。 他のSQL Serverインスタンスに接続する際と同じ手順を用いてください。

4 マネージド ID 認証は、Azure Blob Storage (ABS) と ADLS Gen2 に接続するためにサポートされています。 オンプレミスの SQL Server 用の Azure VM 上の Azure Arc 対応 SQL Server または SQL Server が必要です。 Azure SQL Database と Azure SQL Managed Instance でネイティブに使用できます。

5 SQL Server 2019 CU11以降のバージョンは、abfsまたは abfss プレフィックスの付Azure Data Lake Storage Gen2をサポートします。 SQL Server 2022年以降のバージョンでは、adlsの接頭辞を使用してください。

  • 外部テーブルはSQL Server 2019、SQL Server 2022、SQL Server 2025、Azure SQL Database、Azure SQL Managed Instance、Microsoft FabricのSQL Databaseでサポートされています。
  • OPENROWSET (BULK)SQL Server 2019、SQL Server 2022、SQL Server 2025、Azure SQL Database、Azure SQL Managed Instance、およびMicrosoft FabricのSQLデータベースでサポートされています。 SQL Server 2019はローカルおよびネットワークファイルパスをサポートし、2022年以降SQL ServerFORMAT = 'PARQUET'、FORMAT = DELTA、FORMAT = 'CSV'のクラウドストレージの読み込みもサポートしています。
  • CETASエクスポートはSQL Server 2019、Azure SQL Database、Microsoft FabricのSQLデータベースではサポートされていません。 CETASエクスポートはSQL Server 2022、SQL Server 2025、Azure SQL Managed Instanceでサポートされています。
  • CSVおよび区切りファイルは、SQL Server 2019、SQL Server 2022、SQL Server 2025、Azure SQL Database、Azure SQL Managed Instance、およびMicrosoft FabricのSQL Databaseでサポートされています。 SQL Server 2019はCSVサポートのためにHadoopを必要とし、SQL Server 2022以降のバージョンはHadoopなしでネイティブにCSVをサポートしています。
  • ParquetファイルはSQL Server 2019ではサポートされていません。 ParquetファイルはSQL Server 2022、SQL Server 2025、Azure SQL Database、Azure SQL Managed Instance、Microsoft FabricのSQL databaseでサポートされています。
  • Delta Lakeのテーブルは、SQL Server 2019、Azure SQL Database、Azure SQL Managed Instance、またはMicrosoft FabricのSQL Databaseではサポートされていません。 Delta LakeテーブルはSQL Server 2022およびSQL Server 2025でサポートされています。
  • SQL Server 2019、SQL Server 2022、SQL Server 2025では、他のSQL Serverインスタンスへの接続がサポートされています。 Azure SQL Database、Azure SQL Managed Instance、またはMicrosoft FabricのSQLデータベースからは、他のSQL Serverインスタンスへの接続はサポートされていません。
  • SQL Server 2019、SQL Server 2022、SQL Server 2025からSQL Serverコネクターを使用して、Azure SQL DatabaseやAzure SQL Managed Instanceへの接続がサポートされています。 データベーススコープ認証情報はAzure SQL DatabaseまたはAzure SQL Managed Instanceエンドポイントを対象とし、設定手順は他のSQL Serverインスタンスに接続する場合と同じです。 これらの接続は、Azure SQL Database、Azure SQL Managed Instance、またはMicrosoft FabricのSQL Databaseからはサポートされていません。
  • Oracle、Teradata、またはMongoDBへの接続は、SQL Server 2019、SQL Server 2022、SQL Server 2025からサポートされています。 これらの接続は、Azure SQL Database、Azure SQL Managed Instance、またはMicrosoft FabricのSQL Databaseからはサポートされていません。
  • Azure Server 2019、SQL Server 2022、SQL Server 2025、Azure SQL Database、Azure SQL Managed Instance からAzure Blob Storageへの接続がサポートされています。 Microsoft FabricのSQLデータベースからはAzure Blob Storageへの接続がサポートされていません。
  • ADLS Gen2への接続は、CU11以前のSQL Server 2019リリースやMicrosoft FabricのSQLデータベースからの接続をサポートしていません。 ADLS Gen2への接続はSQL Server 2019 CU11から、SQL Server 2022、SQL Server 2025、Azure SQL Database、Azure SQL Managed Instanceでもサポートされています。
  • SQL Server 2019、Azure SQL Database、Azure SQL Managed Instance、Microsoft FabricのSQL Databaseでは、S3互換ストレージへの接続はサポートされていません。 S3互換ストレージへの接続は、SQL Server 2022およびSQL Server 2025からサポートされています。
  • OneLakeへの接続は、Microsoft FabricのSQLデータベースからサポートされています。 SQL Server 2019、SQL Server 2022、SQL Server 2025、Azure SQL Database、Azure SQL Managed InstanceではOneLakeへの接続はサポートされていません。
  • プッシュダウン計算はSQL Server 2019、SQL Server 2022、SQL Server 2025でサポートされています。 Azure SQL Database、Azure SQL Managed Instance、Microsoft FabricのSQLデータベースではプッシュダウン計算はサポートされていません。
  • 管理型ID認証はSQL Server 2019およびSQL Server 2022ではサポートされていません。 管理されたID認証は、SQL Server 2025でAzure Blob StorageおよびADLS Gen2への接続に対応しており、Azure Arc対応のSQL ServerまたはAzure仮想マシン上のSQL Serverが必要です。 マネージドID認証はAzure SQL DatabaseおよびAzure SQL Managed Instanceでもサポートされていますが、Microsoft FabricのSQLデータベースではサポートされていません。

注

SQL Server 2025 (17.x) 以降では、Azure Blob Storage、ADLS Gen2、または S3 互換ストレージ上のデータ ファイル (CSV、Parquet、デルタ) に対してクエリを実行することはネイティブ エンジン機能であり、PolyBase サービスをインストールまたは実行する必要がなくなりました。 RDBMS コネクタ (SQL Server、Oracle、Teradata、MongoDB、ODBC) では、PolyBase サービスをインストールして実行する必要があります。 SQL Server 2025 (17.x) では、以前は Windows でのみ使用できたこれらのコネクタに対する Linux サポートも追加されています。

外部データに対してクエリを実行する

特定のシナリオを選択する前に、外部データのクエリを実行する 3 つの方法を理解してください。

方法 構文 次の場合に使用します。 認証 ポリベースの設置が必要です
OLE DB アドホック クエリ OPENROWSET(provider, connection, query) 永続的なオブジェクトを使用せずに 1 回限りすばやくクエリを実行する場合、または Microsoft Entra ID 認証が必要な場合 SQL 認証、Windows 認証、Microsoft Entra ID (MSOLEDBSQL) いいえ
ファイルに対するアドホッククエリ OPENROWSET(BULK ...) テーブルを作成する前に、ファイル データをすばやく調べるか、スキーマをテストする必要がある SAS トークン、アクセス キー、マネージド ID、Microsoft Entra ID SQL Server 2022: はい 1

SQL Server 2025以降のバージョン:いいえ

Azure SQL Database、Azure SQL Managed Instance、および Fabric の SQL データベース: 組み込み
永続データ コネクタ CREATE EXTERNAL TABLE sqlserver://、oracle://、teradata://など 運用には、定期的なアクセス、ガバナンス、統計、プッシュダウンの計算が必要です SQL 認証のみ はい

1 SQL Server 2022(16.x)でクラウドファイルにアクセスするにはPolyBase機能をインストールする必要がありますが、Azure Blob Storage、ADLS Gen2、S3互換ストレージコネクターはPolyBaseサービスに依存しません。 SQL Server 2025(17.x)以降のバージョンは、PolyBaseサービスのインストールや実行をせずにCSV、Parquet、Deltaをネイティブサポートしています。

  • OLE DBのアドホッククエリは、永続オブジェクトを作成せずにリモートデータソースへの一度きりの迅速なアクセスのために OPENROWSET(provider, connection, query) を使用します。 SQL認証、Windows 認証、またはMSOLEDBSQLと組み合わせたMicrosoft Entra IDを利用できます。 このシナリオではPolyBaseの設置は必要ありません。
  • ファイルに対するアドホッククエリは、ファイルデータを素早く探索したり、テーブルを作成する前にスキーマをテストしたりするために、この OPENROWSET(BULK ...) を使います。 SASトークン、アクセスキー、マネージドアイデンティティ、またはMicrosoft Entra IDを使用できます。 SQL Server 2022はクラウドファイル用のPolyBase機能インストールが必要ですが、PolyBaseサービスは必須ではありません。 SQL Server 2025以降のバージョンでは、クラウドファイルにPolyBaseは必要ありません。 ファイルアドホッククエリはAzure SQL Database、Azure SQL Managed Instance、FabricのSQL Databaseに組み込まれています。
  • 永続的なデータコネクターは、本番ワークロードにおける定期的なアクセス、ガバナンス、統計、プッシュダウン計算のために、sqlserver://、oracle://、teradata://などの場所と共に、CREATE EXTERNAL TABLEを使用します。 SQL認証とPolyBaseサービスが必要です。

意思決定ガイド

シナリオ レコメンデーション
リモートSQLにはMicrosoft Entra ID認証が必要な場合、PolyBaseサービスは避けたい場合もあります。 OPENROWSET(MSOLEDBSQL, ...)(アドホック、永続オブジェクトなし)を使いましょう。
永続的なテーブル、統計、またはリモートデータベースへのプッシュダウン計算が必要です。 PolyBase コネクタ (CREATE EXTERNAL TABLE、sqlserver://、oracle://、teradata://、mongodb://) でodbc://を使用します。 OPENROWSET コネクターをサポートしていません。
新しいファイルを探索したり、スキーマをテストしたりしています。 OPENROWSET(BULK ...)を使いましょう(高速反復、永続オブジェクトなし)。
ファイルデータを変換付きのテーブルに取り込みます。 INSERT ... SELECTからOPENROWSET(BULK ...)を使用します。
多くのユーザーやアプリケーションに対してガバナンスや共有アクセスが必要です。 権限とメタデータを集中管理するために CREATE EXTERNAL TABLE を使いましょう。
あなたはFabricでSQLデータベースを扱っています。 アドホックのOneLakeクエリには OPENROWSET(BULK ...) を、再利用可能なアクセスには外部テーブルを使い、外部ストレージにはOneLakeショートカットをご利用ください。
  • リモートSQLの認証Microsoft Entra IDが必要な場合やPolyBaseサービスを避けたい場合は、永続オブジェクトを使わずにアドホックのリモートクエリに使うOPENROWSET(MSOLEDBSQL, ...)を使いましょう。
  • 永続的なテーブル、統計、またはリモートデータベースへのプッシュダウン計算が必要な場合は、sqlserver://、oracle://、teradata://、mongodb://、odbc://などのPolyBaseコネクタとCREATE EXTERNAL TABLEを組み合わせて使用してください。 OPENROWSET これらのコネクタをサポートしていません。
  • 新しいファイルを探索したりスキーマをテストしたりする場合は、速い反復と永続オブジェクトを使わないために OPENROWSET(BULK ...) を使いましょう。
  • ファイルを変換付きのテーブルに取り込む場合は、OPENROWSET(BULK ...)のINSERT ... SELECTを使いましょう。
  • 多くのユーザーやアプリケーションに対してガバナンスや共有アクセスが必要な場合は、権限やメタデータを集中管理するために権限 CREATE EXTERNAL TABLE を使いましょう。
  • FabricでSQLデータベースを扱う場合は、アドホックのOneLakeクエリにはOPENROWSET(BULK ...)を使い、再利用可能なアクセスには外部テーブルを使い、外部ストレージにはOneLakeショートカットを使いましょう。

シナリオを選択する

3 つの方法を理解したら、次のいずれかのガイドを使用して、特定のユース ケースを実装します。

ファイルのクエリ (Parquet、CSV、またはデルタ)

データが Azure Blob Storage、ADLS Gen2、S3 互換ストレージ、または OneLake 上の Parquet、CSV、または Delta ファイルにある場合は、次のいずれかのガイドに従います。

シナリオ 推奨ガイド プラットフォーム
Parquet または CSV ファイルに対するクイック アドホック クエリ OPENROWSET を使用してください。 外部テーブルは必要ありません SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、Fabric の SQL データベース
永続的なスキーマを使用した Parquet ファイルに対するクエリの繰り返し Parquet で外部テーブルを作成する SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、Fabric の SQL データベース
外部テーブルを使用して CSV ファイルにクエリを実行する 区切りテキストのファイル形式で外部テーブルを作成する SQL Server 2019 (15.x) 以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、Fabric の SQL データベース
Delta Lake テーブルのクエリを実行する を使用して外部テーブルを作成する FILE_FORMAT = DeltaLakeFileFormat SQL Server 2022 (16.x) 以降のバージョン
クエリ結果 を Parquet または CSV ファイルにエクスポートする (CETAS) CREATE EXTERNAL TABLE AS SELECT を使用する SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Managed Instance
  • ParquetやCSVファイルで簡単なアドホッククエリをするには OPENROWSETをご利用ください。 この方法は外部テーブルを必要としません。 SQL Server 2022(16.x)以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、FabricのSQL Database Blockはこのパターンをサポートしています。
  • 永続スキーマを持つParquetファイルに対して繰り返しクエリを行う場合は、Parquetの上に外部テーブルを使いましょう。 SQL Server 2022(16.x)以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、FabricのSQL Database Blockはこのパターンをサポートしています。
  • CSVファイルのクエリでは、区切られたテキスト用のファイル形式を持つ外部テーブルを使いましょう。 SQL Server 2019(15.x)以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、FabricのSQL Database Commandはこのパターンをサポートしています。
  • デルタレイクテーブルでのクエリには、 FILE_FORMAT = DeltaLakeFileFormatの外部テーブルを使用します。 SQL Server 2022(16.x)以降のバージョンはこのパターンをサポートしています。
  • クエリ結果をParquetやCSVファイルにエクスポートする場合は CREATE EXTERNAL TABLE AS SELECTをご利用ください。 SQL Server 2022(16.x)以降のバージョンとAzure SQL Managed Instanceはこのパターンをサポートしています。

次のいずれかのステップ バイ ステップ チュートリアルに従うこともできます。

チュートリアル 説明
SQL Server 2022 の PolyBase の概要 Parquet と CSV、外部テーブル、フォルダ ナビゲーションを用いた OPENROWSET で処理します。
PolyBase を使用して S3 互換オブジェクト ストレージ内の Parquet ファイルを仮想化する SQL Server 2022 (16.x) 以降のバージョンのチュートリアル。
PolyBase を使用して CSV ファイルを仮想化する SQL Server 2022 (16.x) 以降のバージョンのチュートリアル。
PolyBase を使用してデルタ テーブルを仮想化する SQL Server 2022 (16.x) 以降のバージョンのチュートリアル。
Azure SQL Database を使用したデータ仮想化 (プレビュー) Parquet および CSV 用の Azure SQL Database ガイド。
Azure SQL Managed Instance によるデータ仮想化 Parquet、CSV、および CETAS 用の Azure SQL Managed Instance ガイド。
FabricのSQLデータベースにおけるデータ仮想化 OneLake ファイルのための「ファブリック」内のSQLデータベースガイド。

別の SQL Server インスタンス、Azure SQL Database、または SQL Managed Instance に接続する

SQL Server 2019 (15.x) 以降のバージョンでは、PolyBase では、リンク サーバーを使用せずに、別の SQL Server インスタンス、Azure SQL Database、または Azure SQL Managed Instance のテーブルに対してクエリを実行できます。

Important

sqlserver:// コネクタは、Fabric の SQL データベースではサポートされていません。 PolyBase RDBMS コネクタでは、 CREATE DATABASE SCOPED CREDENTIAL を介した SQL 認証が使用され、Microsoft Entra ID、マネージド ID、またはサービス プリンシパル認証はサポートされません。 Fabric の SQL データベースには Microsoft Entra 認証が必要であるため、PolyBase を使用して接続することはできません。

Step 何をすべきか
1. PolyBase をインストールする Windows に PolyBase をインストールするか、Linux に PolyBase をインストールする
2. 資格情報を作成する CREATE DATABASE SCOPED CREDENTIAL とターゲット ログインの使用
3. 外部データ ソースを作成する CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>')
4. 外部テーブルを作成する CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')
5. クエリ SELECT * FROM <external_table>
    1. 外部SQLデータへのアクセスを設定する前に、WindowsまたはLinuxでPolyBaseをインストールしてください。WindowsにPolyBaseをインストールしてください。
    1. CREATE DATABASE SCOPED CREDENTIALを使ってターゲットのログインでデータベーススコープ付きの認証情報を作成し、エンジンがリモートサーバーに認証できるようにします。
    1. リモートSQL Server用の外部データソースを作成し、CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>')を使いましょう。
    1. リモートテーブルを表現するために CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') を使って外部テーブルを作成します。
    1. 外部テーブルには SELECT * FROM <external_table>を使ってクエリします。

ヒント

SQL Server コネクタ (sqlserver://) は、Azure SQL Database と Azure SQL Managed Instance でも機能します。 同じ手順を使い、LOCATIONをAzure SQL DatabaseまたはAzure SQL Managed Instance端点(例:sqlserver://myserver.database.windows.net)に設定します。

詳細なガイドについては、「 SQL Server の外部データにアクセスするように PolyBase を構成する」を参照してください。

Oracle、Teradata、または MongoDB に接続する

SQL Server 2019 (15.x) 以降のバージョンでは、PolyBase ODBC コネクタを使用して Oracle、Teradata、MongoDB、Cosmos DB に対してクエリを実行できます。

データ ソース ガイド 必要条件
Oracle Oracle 上の外部データにアクセスするための PolyBase の構成 SQL Server 2019 (15.x) 以降のバージョン、Oracle クライアント ドライバー
Teradata Teradata 上の外部データにアクセスするための PolyBase の構成 SQL Server 2019 (15.x) 以降のバージョン、Teradata ODBC ドライバー
MongoDB/Cosmos DB MongoDB 上の外部データにアクセスするための PolyBase の構成 SQL Server 2019 (15.x) 以降のバージョン、MongoDB ODBC ドライバー
任意の ODBC ソース ODBC ジェネリック型の外部データにアクセスするための PolyBase の構成 SQL Server 2019 (15.x) 以降のバージョン (Windows)

(SQL Server 2025 (17.x) 以降の Linux)

Azure Blob Storage または ADLS Gen2 に接続する

SQL プラットフォーム 認証オプション ガイド
SQL Server 2022 (16.x) 以降のバージョン SAS トークン、アクセス キー、マネージド ID (SQL Server 2025 (17.x) 以降) Azure Blob Storage の外部データにアクセスするように PolyBase を構成する
SQL Server 2019 (15.x) アクセス キー (Hadoop コネクタ経由) Azure Blob Storage の外部データにアクセスするように PolyBase を構成する
Azure SQL Database SAS トークン、マネージド ID、Microsoft Entra パススルー Azure SQL Database を使用したデータ仮想化 (プレビュー)
Azure SQL Managed Instance SAS トークン、マネージド ID Azure SQL Managed Instance によるデータ仮想化

SQL Server 2022 (16.x) では、URI プレフィックスが変更されました。 SQL Server 2019 (15.x) 以前のバージョンから移行する場合:

  • Azure Blob Storage: wasb[s]:// を次の値に変更する abs://
  • ADLS Gen2: abfs[s]:// を adls:// に変更する

詳細については、「 Azure Blob Storage の外部データにアクセスするように PolyBase を構成する」を参照してください。

S3 互換オブジェクト ストレージに接続する

SQL Server 2022 (16.x) 以降のバージョンでは、Amazon S3、MinIO、Ceph などの S3 互換ストレージがサポートされています。

詳しくは、「S3 互換オブジェクト ストレージの外部データにアクセスするように PolyBase を構成する」をご覧ください。

CREATE EXTERNAL TABLE AS SELECT (CETAS) を使用してデータをエクスポートする

CETAS は、Azure Blob Storage、ADLS Gen2、または S3 互換ストレージの外部ファイル (Parquet または CSV) にクエリ結果をエクスポートします。

SQL プラットフォーム サポートされている エクスポート形式 メモ
SQL Server 2022(16.x)以降のバージョンです。 CETASでADLS Gen2にエクスポートするには、SQL Server 2022 CU5以降のバージョンが必要です。 はい Parquet、CSV サーバー設定が必要です:ポリベースのエクスポートを許可します。
Azure SQL Managed Instance はい Parquet、CSV 既定では無効
Azure SQL Database いいえ なし 該当なし
Fabric の SQL データベース いいえ なし 該当なし
  • SQL Server 2022以降のバージョンはCETASをサポートし、ParquetおよびCSVファイルのエクスポートが可能です。 サーバー設定:polybaseエクスポートを許可する設定が必要です。 CETASのADLS Gen2へのエクスポートは、CU5以前のSQL Server 2022リリースでは利用できません。
  • Azure SQL Managed InstanceはCETASをサポートし、ParquetおよびCSVファイルをエクスポートします。 デフォルトで無効化されたガイダンスは、そのデフォルト状態を説明しています。
  • Azure SQL DatabaseはCETASをサポートしていません。
  • FabricのSQLデータベースはCETASをサポートしていません。

Transact-SQL リファレンスについては、 CREATE EXTERNAL TABLE AS SELECT (CETAS) を参照してください。

簡単スタートの例

例 1: Parquet ファイルに対するアドホック クエリ (OPENROWSET)

外部テーブルは必要ありません。 SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、および Fabric の SQL データベースで動作します。

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

例 2: Azure Blob Storage の CSV 上の外部テーブル

この例は、CSVファイル上の外部テーブルをサポートするすべてのSQLプラットフォームで動作します。

  • 手順 1: データベース マスター キー (DMK) を作成します。 資格情報には SAS トークン シークレットが格納されるため、この手順が必要です。 ただし、マネージデンティティIDやMicrosoft Entra認証を使う場合はこのステップを省略できます。

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  • 手順 2: SAS トークンを使用して資格情報を作成する。 先頭の ?を省略します。

    CREATE DATABASE SCOPED CREDENTIAL MyStorageCred
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         SECRET = '<your_SAS_token>'; -- omit the leading '?'
    
  • 手順 3: 外部データ ソースを作成する。

    CREATE EXTERNAL DATA SOURCE MyAzureStorage
    WITH (
        LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net',
        CREDENTIAL = MyStorageCred
    );
    
  • 手順 4: CSV のファイル形式を作成します。

    CREATE EXTERNAL FILE FORMAT CsvFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"',
            FIRST_ROW = 2
        )
    );
    
  • 手順 5: 外部テーブルを作成します。

    CREATE EXTERNAL TABLE dbo.SalesExternal
    (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer NVARCHAR (100)
    )
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/data/sales/',
        FILE_FORMAT = CsvFormat
    );
    
  • 手順 6: 外部テーブルに対してクエリを実行します。

    SELECT *
    FROM dbo.SalesExternal
    WHERE OrderDate >= '2025-01-01';
    

例 3: 別の SQL Server のテーブルに対してクエリを実行する

この例は、SQL Server 2019 (15.x) 以降のバージョンで動作します。

  • 手順 1: データベース マスター キーを作成する (資格情報にパスワードが格納されるため必要)。

    CREATE MASTER KEY ENCRYPTION
    BY PASSWORD = '<password>';
    
  • 手順 2: リモート SQL Server インスタンスの資格情報を作成します。

    CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred
    WITH IDENTITY = 'remote_user',
         SECRET = '<password>';
    
  • 手順 3: 外部データ ソースを作成します。

    CREATE EXTERNAL DATA SOURCE RemoteSqlServer
    WITH (
        LOCATION = 'sqlserver://remote-server.contoso.com',
        PUSHDOWN = ON,
        CREDENTIAL = RemoteSqlCred
    );
    
  • 手順 4: 外部テーブル ( LOCATION の 3 部構成の名前) を作成します。

    CREATE EXTERNAL TABLE dbo.RemoteCustomers
    (
        CustomerId INT,
        CustomerName NVARCHAR (200)
            COLLATE SQL_Latin1_General_CP1_CI_AS
    )
    WITH (
        DATA_SOURCE = RemoteSqlServer,
        LOCATION = 'SalesDB.dbo.Customers'
    );
    
  • 手順 5: サーバー間でクエリを実行する。

    SELECT c.CustomerName,
           s.Amount
    FROM dbo.RemoteCustomers AS c
         INNER JOIN dbo.LocalSales AS s
             ON c.CustomerId = s.CustomerId;
    

例 4: CETAS を使用して Parquet に結果をエクスポートする

SQL Server 2022 (16.x) 以降のバージョンの Azure SQL Managed Instance で動作します。

  • 手順 1: CETAS を有効にする (SQL Server のみ)。

    EXECUTE sp_configure 'allow polybase export', 1;
    RECONFIGURE;
    
  • 手順 2: 資格情報とデータ ソースを作成する (前の例から再利用)。

  • 手順 3: Parquet エクスポート用のファイル形式を作成する。

    CREATE EXTERNAL FILE FORMAT ParquetFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
  • 手順 4: クエリ結果をエクスポートする。

    CREATE EXTERNAL TABLE dbo.Sales2025Export
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/exports/sales_2025.parquet',
        FILE_FORMAT = ParquetFormat
    ) AS
    SELECT *
    FROM Sales.Orders
    WHERE OrderDate >= '2025-01-01';
    

PolyBase の T-SQL 構成要素

シナリオを実装する前に、PolyBase で使用される主要な T-SQL オブジェクトとその組み合わせについて理解してください。

PolyBase Transact-SQL オブジェクトとそのリレーションシップを示す図。

認証 (データベース マスター キー、資格情報) からデータ ソースとファイル形式、クエリ メソッド (外部テーブル、OPENROWSET、 BULK INSERT、CETAS) までの PolyBase T-SQL オブジェクトとそのリレーションシップを示す図。

  • 外部データソースの構文については CREATE EXTERNAL DATA SOURCEを参照してください。
  • 外部ファイル形式の構文については、 CREATE EXTERNAL FILE FORMATを参照してください。
  • 外部テーブル構文については、 CREATE EXTERNAL TABLEを参照してください。
  • アドホックのデータアクセス構文については 、OPENROWSETを参照してください。
  • CETASの構文については、CREATE EXTERNAL TABLE AS SELECT(CETAS)を参照してください。

すべてのオブジェクトの完全な Transact-SQL リファレンスについては、「 PolyBase Transact-SQL リファレンス」を参照してください。

Important

外部ファイル形式のデータ型マッピングを確認します。 外部ファイル形式を作成するか、 OPENROWSETを使用してファイルにクエリを実行すると、PolyBase はソース データ型 (Parquet、CSV、Delta、Oracle、Teradata、MongoDB) を SQL Server データ型に自動的にマップします。 型の不一致は、サイレント切り捨て、精度の低下、またはクエリ エラーを引き起こす可能性があります。 たとえば、Parquet DECIMAL(38,18) は DECIMAL(18,0)にマップされます。 外部テーブル列または WITH 句を定義する前に、マッピング テーブルを確認します。 完全なリファレンスについては、「 PolyBase を使用した型マッピング」を参照してください。

いつ CREATE MASTER KEYが必要ですか?

データベース マスター キー (DMK) は、 CREATE MASTER KEY 構文を使用して作成されます。 DMK は、データベース スコープの資格情報内に格納されているシークレットを暗号化します。 資格情報にシークレット値が含まれている場合、つまりパスワード、トークン、またはアクセス キーを格納する場合にのみ必要です。

  • DMK が必要です (資格情報にはシークレットが格納されます)。

    認証の種類 IDENTITY 値 シークレットがある Dmk
    SAS トークン 'SHARED ACCESS SIGNATURE' はい 必須
    S3 アクセス キー 'S3 ACCESS KEY' はい 必須
    SQL ログイン/基本認証 '<username>' はい 必須
    ストレージ アカウント アクセス キー '<storage_account_name>' はい 必須
    • SASトークン認証は IDENTITY = 'SHARED ACCESS SIGNATURE' を使用し、秘密の値を保存するため、データベースのマスターキーが必要です。
    • S3アクセスキーの認証情報は IDENTITY = 'S3 ACCESS KEY' を使用し、秘密の値を保存するため、データベースのマスターキーが必要です。
      • SQLログインや基本的な認証認証は IDENTITY = '<username>' を使用し、秘密値を保存するため、データベースのマスターキーが必要です。
    • ストレージアカウントアクセスキーの認証情報は IDENTITY = '<storage_account_name>' を使用し、秘密の値を保存するため、データベースのマスターキーが必要です。
  • DMK は必要ありません (シークレットは格納されません)。

    認証の種類 IDENTITY 値 シークレットがある Dmk
    マネージド ID 'Managed Identity' いいえ 必須ではない
    Microsoft Entra ID 'User Identity' または 'Managed Identity' いいえ 必須ではない
    • マネージドID認証は IDENTITY = 'Managed Identity' を使い、秘密を保存しないため、データベースのマスターキーを必要としません。
    • Microsoft Entra ID認証はIDENTITY = 'User Identity'またはIDENTITY = 'Managed Identity'を使い、秘密を保存しないため、データベースのマスターキーを必要としません。

ヒント

CREATE DATABASE SCOPED CREDENTIALステートメントに秘密情報が含まれていなければ、DMKは必要ありません。 マネージド ID と Microsoft Entra ID 認証は、プラットフォームへの信頼を委任します。 データベースにはパスワードやトークンは格納されません。

例:

このクエリ例では、DMK が必要です (資格情報は SAS トークンを格納します)。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '<your_SAS_token>';

このクエリ例では、DMK は必要ありません (マネージド ID、シークレットなし)。

CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';

このクエリ例では、DMK は必要ありません (Microsoft Entra パススルー、シークレットなし)。

CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';

OPENROWSET および外部テーブルを使用したリモート データ アクセス

SQL Server には、リモート データのクエリを実行するための 3 つの異なるアプローチが用意されています。 構文、認証、アーキテクチャの違いを理解している場合は、適切なアプローチを選択できます。

方法 構文 接続先 認証 PolyBase サービス プラットフォーム
OLE DB クエリ OPENROWSET(provider, connection, query) MSOLEDBSQL、SQLOLEDB、またはその他のプロバイダーを介した OLE DB ソース SQL 認証、Windows 認証、Microsoft Entra ID (MSOLEDBSQL) いいえ SQL Server (サポートされているすべてのバージョン)
SQL Server 2022(16.x)およびSQL Server 2019(15.x)におけるファイルクエリ OPENROWSET(BULK ...) ローカル ディスク、ネットワーク、またはクラウド上のファイル (Azure BLOB、ADLS、S3、OneLake) SAS トークン、アクセス キー、マネージド ID、Microsoft Entra ID クラウド 1はイエス、ローカルはノー SQL Server 2022(16.x)およびSQL Server 2019(15.x)
SQL Server 2025(17.x)以降のバージョンにおけるファイルクエリ OPENROWSET(BULK ...) ローカル ディスク、ネットワーク、またはクラウド上のファイル (Azure BLOB、ADLS、S3、OneLake) SAS トークン、アクセス キー、マネージド ID、Microsoft Entra ID いいえ SQL Server 2022 (16.x) 以降のバージョン、Azure SQL Database、Azure SQL Managed Instance、Fabric の SQL データベース
PolyBase コネクタ CREATE EXTERNAL TABLEとCREATE EXTERNAL DATA SOURCEを使用して、sqlserver://、oracle://、teradata://、mongodb://、odbc:// リモート SQL Server、Oracle、Teradata、MongoDB、ODBC ソース SQL 認証のみ はい SQL Server 2019 (15.x) 以降のバージョン (Windows);SQL Server 2025 (17.x) 以降のバージョン (Linux)

1 SQL Server 2022(16.x)でクラウドファイルにアクセスするには、PolyBase機能をインストールする必要があります。

  • OLE DBクエリは、MSOLEDBSQL、SQLOLEDB、または他のプロバイダーを通じて、サポートされているすべてのSQL Serverバージョンで任意のOLE DBソースに接続するためにOPENROWSET(provider, connection, query)を使用します。 これらはSQL認証、Windows 認証、MSOLEDBSQLでMicrosoft Entra IDをサポートしており、PolyBaseサービスのインストールは不要です。
  • ファイルクエリは、OPENROWSET(BULK ...)を使ってローカルディスク、ネットワーク共有、またはAzure Blob Storage、ADLS、S3、OneLakeなどのクラウドストレージ上のファイルを、SASトークン、アクセスキー、マネージドアイデンティティ、またはMicrosoft Entra IDを使って読み込みます。 これらはSQL Server 2005以降のバージョンでローカルおよびネットワークファイル、SQL Server 2022(16.x)以降のクラウドファイル、Azure SQL Database、Azure SQL Managed Instance、FabricのSQL Databaseでサポートされています。 SQL Server 2022(16.x)以降のバージョンでは、ローカルファイルやクラウドファイルに対してファイルクエリはPolyBaseサービスを必要としません。
  • PolyBaseコネクターは、CREATE EXTERNAL DATA SOURCEとCREATE EXTERNAL TABLEを使用し、sqlserver://、oracle://、teradata://、mongodb://、またはodbc://場所を使って、リモートSQL Server、Oracle、Teradata、MongoDB、またはODBCソースに接続します。 これらはSQL Server 2019(15.x)以降のWindowsおよびLinuxのSQL Server 2025(17.x)以降のバージョンでSQL認証とPolyBaseサービスを必要とします。 詳細については、「 CREATE EXTERNAL DATA SOURCE (Transact-SQL)」を参照してください。

各アプローチを使用するタイミング

次の場合に OLE DB OPENROWSET を使用します。

  • 永続オブジェクトを作成せずに、OLE DB OPENROWSET を使い、一回限りのクイッククエリを行ってください。
  • MSOLEDBsqlを使ったMicrosoft Entra IDまたはマネージドID認証にはOLE DBOPENROWSETを使用してください。
  • PolyBaseのサービス依存を避けるためにOLE DB OPENROWSET を使いましょう。
  • OLE DB OPENROWSET を使って、OLE DBプロバイダーを持つ任意のデータソースに接続してください。

ファイル OPENROWSET(BULK) を使用して、次の場合に使用します。

  • ファイル OPENROWSET(BULK ...) はアドホックなファイル探索やスキーマ発見に使います。
  • テーブル定義にコミットする前に、ファイル OPENROWSET(BULK ...) を使って素早く変換やプレビューを行ってください。
  • キャスト、フィルタリング、計算されたカラムなど、柔軟なインラインカラム変換にはファイル OPENROWSET(BULK ...) を活用してください。
  • 頻繁に変わらず永続的なメタデータを必要としないデータにはファイル OPENROWSET(BULK ...) を使いましょう。

CREATE EXTERNAL TABLEで PolyBase コネクタを使用すると、次のことが行われます。

  • PolyBaseコネクターを CREATE EXTERNAL TABLE で使用し、複数のユーザーやアプリケーションがアクセスできる永続的かつ再利用可能なテーブル定義を保存しましょう。
  • 統計やクエリプランの最適化が必要な本番ワークロードには、PolyBaseコネクターと CREATE EXTERNAL TABLE を使いましょう。
  • OracleやSQL Serverなどのリモートソースへのプッシュダウン計算には、CREATE EXTERNAL TABLE付きのPolyBaseコネクタを使用してください。
  • 共有ガバナンスとセキュリティのために、CREATE EXTERNAL TABLE と共に PolyBase コネクタを使用します。テーブルの作成後、ユーザーに必要なのは SELECT 権限のみです。
  • リモートソースにSQL認証がある場合は、 CREATE EXTERNAL TABLE でPolyBaseコネクターを使用してください。

OPENROWSET (OLE DB) - アドホック リモート クエリ (PolyBase サービスは必要ありません)

OLE DB 形式の OPENROWSET は、OLE DB プロバイダーを介してリモート データ ソースに接続し、パススルー クエリを実行して、結果を行セットとして返します。 これは、リンク サーバーに代わる 1 回限りのアドホックな代替手段です。 永続的なメタデータは作成されません。 この構文では PolyBase サービスは必要ありません。また、クラウド ファイルや外部データ ソースもサポートされていません。

この例のクエリは、OLE DB (PolyBase ではなく) 経由でリモート SQL Server に接続します。

SELECT *
FROM OPENROWSET (
    'MSOLEDBSQL',
    'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
    'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);

OPENROWSET(BULK) - ファイル ベースのクエリ (PolyBase)

BULKのOPENROWSET形式は、ファイルから直接データを読み取ります。 SQL Server 2019 (15.x) 以前のバージョンでは、ローカルまたは UNC ファイル パスから読み取り、フォーマット ファイルが必要です。 SQL Server 2022 (16.x) 以降のバージョンでは、パラメーターとDATA_SOURCE パラメーターを使用してFORMATから読み取ることができます。 このアプローチは、データ仮想化に使用される PolyBase 統合バージョンです。

PolyBase とデータ仮想化のコンテキストでは、このガイドがOPENROWSETを参照する場合は、外部ファイルに対してクエリを実行するためのOPENROWSET(BULK ...)句を含むFORMAT構文を意味します。

例:

このクエリ例では、Azure Blob Storage (SQL Server 2022 以降のバージョン) から Parquet ファイルを読み取ります。

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'data/sales/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET'
) AS [result];

このクエリ例では、インライン パス (Azure SQL Database、Azure SQL Managed Instance) を使用して Parquet ファイルを読み取ります。

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

OPENROWSET と外部テーブルのどちらを使用するべきか

OPENROWSET(BULK ...)テーブルと外部テーブルの両方で、T-SQL を使用して外部データのクエリを実行できますが、さまざまなユース ケース向けに設計されています。 次の表は、シナリオに適したアプローチを決定するのに役立つ主な違いをまとめたものです。

能力 OPENROWSET(BULK ...) 外部テーブル
Purpose アドホック探索と 1 回限りのクエリ 永続的で再利用可能なテーブル定義
データベースに格納されているメタデータ No. クエリの実行後に何も保存されない Yes. テーブル定義、データ ソース、およびファイル形式はデータベース オブジェクトとして格納されます
スキーマ定義 ファイル (Parquet) から自動的に推論されるか、 WITH 句を使用してインラインで指定されます CREATE EXTERNAL TABLE ステートメントで明示的に定義されている
アクセス許可 ADMINISTER BULK OPERATIONS または ADMINISTER DATABASE BULK OPERATIONS が必要となります 作成したら、テーブルに対する標準の SELECT アクセス許可で十分です
計算列 Yes. SELECTリストに式と計算列を追加します。filename()やfilepath()などのメタデータ関数は、ここでしか使用できません。 No. 固定列リスト;ビューまたは外部テーブルを読み取るクエリで変換を実行する
統計 Azure SQL Managed Instance:sys.sp_create_openrowset_statisticsを使った手動の単一列統計。 OPENROWSET の手動統計を参照してください。

SQL Server 2022 (16.x) 以降、Azure SQL Database、Fabric の SQL データベース: 述語に対する統計の自動作成 手動OPENROWSET統計はSQL Serverではサポートされていません。
すべてのプラットフォームでの完全な CREATE STATISTICS サポートに加えて、SQL Server 2022 (16.x) 以降のバージョンでの自動作成。 外部テーブルの手動統計の作成を参照してください。
プッシュダウン 制限付きサポート。 エンジンはフィルターをファイル スキャンにプッシュダウンする可能性がありますが、リモート RDBMS ソースへのプッシュダウンはありません Yes. RDBMS コネクタのプッシュダウン計算をサポートします (SQL Server、Oracle、Teradata、MongoDB)
最適な用途 データ探索、スキーマ検出、プロトタイプ作成クエリ、1 回限りのデータ読み込み、柔軟な変換 運用ワークロード、繰り返しクエリ、ユーザー間の共有アクセス、ダッシュボード、レポート
  • OPENROWSET(BULK ...) アドホックな探索や一度きりのクエリに最適ですが、外部テーブルは永続的で再利用可能なテーブル定義に適しています。
  • OPENROWSET(BULK ...) クエリ実行後にデータベースにメタデータを保存しませんが、外部テーブルはテーブルの定義、データソース、ファイル形式をデータベースオブジェクトとして保存します。
  • OPENROWSET(BULK ...) Parquetファイルからスキーマを自動的に導き出すか、 WITH 節でスキーマをラインに定義しますが、外部テーブルは CREATE EXTERNAL TABLE 文でスキーマを明示的に定義します。
  • OPENROWSET(BULK ...) ADMINISTER BULK OPERATIONSまたはADMINISTER DATABASE BULK OPERATIONSが必要ですが、外部テーブルはテーブルが存在すると標準SELECT権限のみでユーザーがクエリ可能です。
  • OPENROWSET(BULK ...) クエリや filename() や filepath()などのメタデータ関数で計算された列をサポートしていますが、外部テーブルは固定された列リストを持ち、ビューや外部テーブルを読み込むクエリでの変換が必要です。
  • OPENROWSET(BULK ...)統計のサポートは限定的です。Azure SQL Managed Instancesys.sp_create_openrowset_statisticsは単一列統計に使用できますが、2022年(16.x)以降のバージョンSQL Server、Azure SQL Database、FabricのSQLデータベースでは述語に関する統計を自動的に作成できます。 FabricのSQL Server、Azure SQL Database、SQLデータベースでは手動OPENROWSET統計はサポートされていません。 外部テーブルはすべてのプラットフォームでフルの CREATE STATISTICS 機能をサポートし、SQL Server 2022(16.x)以降のバージョンでは自動統計、Azure SQL Database、Fabric のSQLデータベースもサポートします。 OPENROWSET の手動統計および外部テーブルの手動統計の作成をご覧ください。
  • OPENROWSET(BULK ...) プッシュダウンは限定的で、リモートRDBMSソースへのプッシュダウンはできませんが、RDBMSコネクタのプッシュダウン計算は外部テーブルでサポートされています。
  • OPENROWSET(BULK ...) データ探索、スキーマ発見、プロトタイピング、ワンタイムロード、柔軟な変換に最適ですが、外部テーブルは本番作業、繰り返しクエリ、共有アクセス、ダッシュボード、レポートに最適です。

柔軟性が必要な場合は OPENROWSET を使用する

OPENROWSETを使用して、永続的なオブジェクトを作成せずに、ファイルの探索、さまざまなスキーマのテスト、計算列と変換の追加を行います。 たとえば、ファイル パスを列として抽出したり、データ型をインラインでキャストしたり、1 つのクエリで計算式をフィルター処理したりすることができます。

このクエリ例には、計算列と変換が含まれています。

SELECT result.filename() AS [FileName],
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       CAST (OrderDate AS DATE) AS OrderDate,
       Amount,
       OrderDate
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';

ヒント

filepath()およびfilename()関数は、Azure SQL Database、Azure SQL Managed Instance、および SQL Server 2022 (16.x) 以降のバージョンで使用できます。 ファイル パスの一部をフィルター処理し (パーティションの削除)、ソース ファイル名を列として公開することができます。外部テーブルでは直接はできません。

永続化とガバナンスが必要な場合に外部テーブルを使用する

複数のユーザーまたはアプリケーションが同じ外部データに対して繰り返しクエリを実行する必要がある場合は、外部テーブルを使用します。 スキーマ、データ ソース、および資格情報を 1 回定義し、データベースに格納します。 コンシューマーは、テーブル SELECT アクセス許可のみを必要とします。

外部テーブルでは 統計もサポートされています。統計は、クエリ オプティマイザーが、より優れた実行プランを構築するために使用します。 統計は手動で作成することも、エンジンで自動的に作成することもできます (SQL Server 2022 (16.x) 以降のバージョン)。

このクエリ例では、クエリ プランを改善するために、外部テーブルに統計を作成します。

CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;

両方の方法の統計の詳細については、「 PolyBase のパフォーマンスに関する考慮事項 - 統計」を参照してください。

BULK INSERT VS. OPENROWSET(BULK): どれを使用する必要がありますか?

BULK INSERTとOPENROWSET(BULK ...)の両方で、基になる同じ一括読み込みエンジンを使用して、ファイルから SQL Server にデータをインポートします。 ただし、構文、柔軟性、結果でできることは異なります。 次の表に主要な相違点を示します。

注

スタンドアロンのBULK INSERT文はFabricのSQLデータベースではサポートされていません。 データを取り込むには、OneLakeに対して INSERT ... SELECT with OPENROWSET(BULK ...) を使いましょう。

能力 BULK INSERT OPENROWSET(BULK ...)
基本的な目的 ファイルからターゲット テーブルに直接データを読み込む またはSELECT ステートメントで使用するINSERT ... SELECTを返します。
使用パターン スタンドアロン ステートメント: BULK INSERT <table> FROM '<file>' クエリ内で使用する必要があります: SELECT * FROM OPENROWSET(BULK ...) または INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)
ターゲット テーブルが必要ですか? Yes. 常にテーブルに直接書き込む No. 任意の場所に挿入せずにそこから SELECT したり、任意のテーブルまたは一時テーブルに挿入したりできます。
読み込み中の列変換 制限付きサポート。 データはファイルからテーブルへ、そのままの状態で流れ込みます (マッピングはファイルのフォーマットや列の順序によって制御されます)。 完全なサポート。 式、CAST、WHERE フィルター、JOIN その他のテーブル、および計算列を周囲の環境に追加できます SELECT
表のヒント WITH句には、BATCHSIZE、CHECK_CONSTRAINTS、FIRE_TRIGGERS、KEEPIDENTITY、KEEPNULLS、TABLOCKなどのサポートが含まれています INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...)構文を使用してテーブル ヒントをサポートします
ラージ オブジェクト (LOB) の単一値インポート サポートしていません Yes. ファイル全体を 1 つの SINGLE_BLOB、または SINGLE_CLOB 値としてインポートするSINGLE_NCLOB、、をサポートします
ファイルの書式設定 Yes. (XML および XML 以外) を介してサポートされます Yes. サポート対象 (XML および XML 以外)
クラウドファイルアクセス DATA_SOURCESQL Server 2017(14.x)以降のバージョン、Azure SQL Database、Azure SQL Managed InstanceでAzure Blob Storageをサポートしています。 SQL Server 2019 CU11以降のアップデートもADLS Gen2をサポートしています。 S3互換ストレージはサポートされていません。 DATA_SOURCESQL Server 2017(14.x)以降のバージョンでAzure Blob Storageをサポートし、SQL Server 2019 CU11以降のバージョンでADLS Gen2を、SQL Server 2022(16.x)以降のバージョンでS3互換ストレージをサポートします。 Azure SQL Database と Azure SQL Managed Instance は Azure Blob Storage と ADLS Gen2 をサポートします。 FabricのSQLデータベースはOneLakeおよびOneLakeショートカットを通じて外部ストレージをサポートしています。
Parquet または Delta ファイル サポートされていません。 CSV/区切りテキストのみ Yes. 2022 SQL Server(16.x)以降のバージョンでは、Azure SQL Managed Instance、Azure SQL DatabaseFORMAT = 'PARQUET'とFORMAT = 'DELTA'をサポートしています。FabricではSQLデータベースはFORMAT = 'PARQUET'をサポートしていますが、DELTAはサポートしていません。 詳細については、 OPENROWSET BULK (Transact-SQL) を参照してください。
必要なアクセス許可 ADMINISTER BULK OPERATIONS または ADMINISTER DATABASE BULK OPERATIONS、およびターゲット テーブルの INSERT ADMINISTER BULK OPERATIONS または ADMINISTER DATABASE BULK OPERATIONS
最小ログ記録 Yes. TABLOCK によるシンプルまたはバルク ログ方式の復旧モデルでサポートされています Yes. INSERT ... SELECTとTABLOCKを一緒に使用する場合にサポートされます
  • BULK INSERT ファイルから直接ターゲットテーブルにデータを読み込み、 OPENROWSET(BULK ...) は SELECT 文や文 INSERT ... SELECT で使える行セットを返します。
  • BULK INSERT は独立した文であり、 OPENROWSET(BULK ...) は SELECT * FROM OPENROWSET(BULK ...) や INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)のようなクエリ内で使用されなければなりません。
  • BULK INSERT は常に対象テーブルに直接書き込みますが、OPENROWSET(BULK ...) は、どこにも挿入せずにファイルから SELECT することも、任意のテーブルまたは一時テーブルに挿入することもできます。
  • BULK INSERT データがファイルからテーブル as-isへ流れ、マッピングはフォーマットファイルまたは列順序によって制御されるため、カラム変換のサポートは限定的です。 OPENROWSET(BULK ...) 式、 CAST、 WHERE フィルター、 JOIN、そして周囲の SELECTの計算された列をサポートしています。
  • BULK INSERTでは、CHECK_CONSTRAINTS、FIRE_TRIGGERS、KEEPIDENTITY、KEEPNULLS、TABLOCK、WITH、およびその他のヒントにBATCHSIZE句を使用します。 OPENROWSET(BULK ...) は INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) を使用してテーブル ヒントをサポートします。
  • BULK INSERT 大きなオブジェクトの単一値インポートをサポートしていません。 OPENROWSET(BULK ...) SINGLE_BLOB、SINGLE_CLOB、SINGLE_NCLOBをサポートし、それぞれ1つのvarbinary(max)、varchar(max)、またはnvarchar(max)の値としてファイル全体をインポートできます。
  • BULK INSERTとOPENROWSET(BULK ...)の両方でXMLおよび非XML形式のファイルをサポートしています。
  • BULK INSERTでのクラウドファイルアクセスについては、DATA_SOURCEパラメータがSQL Server 2017(14.x)以降のバージョン、Azure SQL Database、Azure SQL Managed InstanceでAzure Blob Storageをサポートしています。 2019 SQL Server CU11以降のアップデートはADLS Gen2もサポートしていますが、BULK INSERTS3互換ストレージには対応していません。 OPENROWSET(BULK ...) については、DATA_SOURCE は SQL Server 2017 (14.x) 以降で Azure Blob Storage、SQL Server 2019 CU11 以降で ADLS Gen2、SQL Server 2022 (16.x) 以降で S3 互換ストレージをサポートしています。 Azure SQL Database と Azure SQL Managed Instance は Azure Blob Storage と ADLS Gen2 をサポートします。 FabricのSQLデータベースはOneLakeおよびOneLakeショートカットを通じて外部ストレージをサポートしています。
  • BULK INSERT ParquetやDeltaファイルをサポートしず、CSVまたは区切られたテキストのみに対応しています。 OPENROWSET(BULK ...)SQL Server 2022(16.x)以降のバージョン、Azure SQL Database、Azure SQL Managed InstanceでFORMAT = 'PARQUET'およびFORMAT = 'DELTA'をサポートしています。 FabricのSQLデータベースはFORMAT = 'PARQUET'をサポートしていますが、FORMAT = 'DELTA'はサポートしていません。 詳細については、 OPENROWSET BULK (Transact-SQL) を参照してください。
  • BULK INSERT ターゲットテーブルには ADMINISTER BULK OPERATIONS または ADMINISTER DATABASE BULK OPERATIONS と INSERT の許可が必要ですが、 OPENROWSET(BULK ...) は ADMINISTER BULK OPERATIONS または ADMINISTER DATABASE BULK OPERATIONSが必要です。
  • BULK INSERT は、シンプル復旧モデルまたは一括ログ復旧モデルでは、TABLOCK を使用した最小限のログ記録をサポートします。 OPENROWSET(BULK ...) INSERT ... SELECTやTABLOCKと併用した場合、ログ記録を最小限に抑えることができます。

選択するタイミング BULK INSERT

BULK INSERTは、ファイルからテーブルへの読み込みが簡単で、インポート中にデータを変換、フィルター処理、結合する必要がない場合に使用します。 CSV またはその他の区切りファイルには、より単純な構文が使用されます。

このクエリ例では、Azure Blob Storage からテーブルに直接 CSV ファイルを読み込みます。

BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);

このクエリ例では、列マッピング用のフォーマット ファイルを含むローカル ファイルを読み込みます。

BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
    FORMATFILE = 'C:\Data\products.fmt',
    FIRSTROW = 2,
    TABLOCK
);

OPENROWSET(BULK) を選択するタイミング

次の条件のうち 1 つ以上が必要な場合は、 OPENROWSET(BULK ...) を使用します。

  • テーブルを作らずにファイルデータのクエリやプレビューに使う OPENROWSET(BULK ...) 。
  • インポート時に OPENROWSET(BULK ...) を使ってデータを変換、フィルタリング、または結合してください。
  • ParquetやDeltaファイルは OPENROWSET(BULK ...) で読み込みましょう。これらのフォーマットは BULK INSERT サポートしていません。
  • OPENROWSET(BULK ...)を使って、SINGLE_BLOB、SINGLE_CLOB、またはSINGLE_NCLOBの1つのLOB値としてファイル全体をインポートできます。

このクエリ例では、データをどこにも挿入せずに、Azure Blob Storage の CSV ファイルをプレビューします。

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ','
) AS src;

このクエリ例では、変換とフィルター処理を使用してデータを挿入します。

INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
       Amount * 1.1, -- Apply a 10% markup
       UPPER(Customer)
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2
) WITH (
    InvoiceDate VARCHAR (10),
    Amount DECIMAL (18, 2),
    Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;

このクエリ例では、Parquet ファイルを読み込みます ( BULK INSERTではできません)。

INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
    BULK 'data/invoices/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET') AS src;

このクエリ例では、XML ファイル全体を 1 つの varbinary(max) 値としてインポートします。

INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
    BULK 'C:\Data\catalog.xml',
    SINGLE_BLOB
) AS x;

ヒント

1 つの方法は、OPENROWSET(BULK ...)内のSELECTから始めてファイル データを探索して検証し、変換が必要ない場合は最終的な運用負荷のBULK INSERTに切り替える方法です。 Parquet または Delta のサポートまたはインライン フィルター処理が必要な場合は、 OPENROWSETを使用してください。

詳細については、次の関連ガイドを参照してください。

便利なメタデータ関数

OPENROWSETテーブルや外部テーブルを使って外部ファイルをクエリする際は、組み込みの関数や手続きを使ってファイルのメタデータを検査し、スキーマを発見し、パーティション認識クエリを実装してください。

filepath() と filename()

filepath()関数とfilename()関数は、結果セット内の各行のファイル パスまたはファイル名の一部を返します。 これらは特に次の場合に役立ちます。

  • パーティションの削除: フォルダー セグメント (年/月/日のパーティションなど) をフィルター処理して、エンジンがすべてをスキャンするのではなく、一致するファイルのみを読み取るようにします。

  • ソース メタデータの公開: クエリ結果に元のファイル名またはパスを列として含めます。これは、監査やデバッグに役立ちます。

Function 返品 例
filename() 各行のソース ファイルのファイル名 (拡張子を含む) sales_2025_01.parquet
filepath(N) パスのワイルドカード (*) の BULK番目のフォルダー セグメント。N は 1 から始まります パス sales/2025/01/*.parquetの場合、 filepath(1) は 2025を返し、 filepath(2) は戻ります 01

適用対象: Azure SQL Database、Azure SQL Managed Instance、SQL Server 2022 (16.x) 以降のバージョン、Fabric の SQL データベース。

このクエリ例では、パーティションの削除に filepath() を使用し、ソース ファイルを識別するための filename() を使用します。 /2025/ フォルダーの下にあるファイルのみを読み取り、/06/サブフォルダーの下にあるファイルのみを読み取ります。

SELECT result.filename() AS SourceFile,
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025' 
      AND result.filepath(2) = '06';

ヒント

サブクエリや CTE ではなく、filepath()句にWHERE フィルターを配置します。 フィルターが WHERE 句にある場合、エンジンはファイル スキャン レベルでパーティションの削除を実行できるため、I/O が大幅に削減されます。

sp_describe_first_result_set - OPENROWSET の列型を確認します

Parquet ファイルで OPENROWSET を使用すると、エンジンは列データ型を自動的に推論します (スキーマ推論)。 推論される型は、必要以上に大きくなる可能性があります。 たとえば、Parquet メタデータには最大長が含まれていないため、多くの場合、文字列は varchar(8000) として推論されます。 この選択により、パフォーマンスが低下し、より多くのメモリが消費される可能性があります。

クエリを終了するsp_describe_first_result_setに、を使用して推論されたスキーマを検査します。 推論された型が表示されたら、 WITH 句でより狭い型を指定してパフォーマンスを向上させます。

  • 手順 1: 推論されたスキーマを調べます。

    EXECUTE sp_describe_first_result_set N'
    SELECT *
    FROM OPENROWSET(
        BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'',
        FORMAT = ''PARQUET''
    ) AS result';
    

    出力には、各列の名前、推論されたデータ型、最大長、有効桁数、および小数点以下桁数が表示されます。 varchar(8000) となっていて、varchar(100) で十分な場合は、それに置き換えてください。

  • 手順 2: パフォーマンスを向上させるには、明示的な型を使用します。

    SELECT TOP 100 *
    FROM OPENROWSET (
        BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
        FORMAT = 'PARQUET'
    ) WITH (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer VARCHAR (100) -- much narrower than the inferred varchar(8000)
    ) AS result;
    

スキーマ推論は Parquet ファイルでのみ機能します。 CSV ファイルの場合は、常に WITH 句 ( OPENROWSETの場合) または CREATE EXTERNAL TABLE ステートメントで列定義を指定します。 sp_describe_first_result_setはFabric手続きにおける一般的なSQL Server、Azure SQL Database、Azure SQL Managed Instance、SQLデータベースですが、特にOPENROWSETクエリに特に役立ちます。 詳細については、 sp_describe_first_result_setをご覧ください。

パフォーマンス、トラブルシューティング、ベスト プラクティス

データ仮想化を実装したら、次のガイドを使用してパフォーマンスを最適化し、問題を診断し、運用環境の準備を確認します。

面積 [アーティクル] 詳細情報
PolyBase のパフォーマンス SQL Server 用 PolyBase のパフォーマンスに関する考慮事項 統計、プッシュダウン、並列処理、およびメモリ管理
プッシュダウン計算 PolyBase でのプッシュダウン計算 リモート ソースにプッシュする操作を指定します
プッシュダウンが発生したかどうかを確認する方法 外部プッシュダウンが発生した場合の確認方法 クエリ プランと DMV
Troubleshooting PolyBase の監視とトラブルシューティング よくあるエラーと解決方法
Kerberos 接続 PolyBase Kerberos の接続性のトラブルシューティング
よくある質問 PolyBase に関してよく寄せられる質問
エラーと解決策 PolyBase エラーと考えられる解決策