適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
Microsoft Fabric の SQL データベース
OPENROWSET関数は、1 つまたは複数のファイルからデータを読み取り、その内容を行セットとして返します。 サービスによっては、ファイルがAzure Blob Storage、Azure Data Lakeストレージ、オンプレミスディスク、ネットワーク共有などに保存されている場合があります。 テキストやCSV、Parquet、JSON行など、さまざまなファイル形式を読むことができます。
クエリのFROM節にあるOPENROWSET関数は、テーブル名のように参照できます。
SELECT文のデータを読み取ったり、UPDATE、INSERT、DELETE、MERGE、CTAS、CETAS文のターゲットデータを更新したりするために使えます。
- 外部データファイルからデータを読み取るために
OPENROWSET(BULK)を使いましょう。 -
OPENROWSETを使わずに別のデータベースエンジンから読み込むBULKを使えばいいです。 詳細については、 OPENROWSET (Transact-SQL) を参照してください。
Tip
この記事とOPENROWSET(BULK)構文は、SQL データベース エンジンのプラットフォームによって異なります。
Microsoft Fabric Data Warehouse構文については、バージョンのドロップダウンリストでFabric Data Warehouseを選択します。
他のプラットフォームでの同様の例の詳細とリンク:
- Azure SQL Database での
OPENROWSETの詳細については、「Azure SQL Database を 使用したデータ仮想化」を参照してください。 - Azure SQL Managed Instance での
OPENROWSETの詳細については、「Azure SQL Managed Instance を 使用したデータ仮想化」を参照してください。 - Azure Synapse のサーバーレス SQL プールの詳細と例については、「 Azure Synapse Analytics でサーバーレス SQL プールを使用して OPENROWSET を使用する方法を参照してください。
- Azure Synapse の専用 SQL プールでは、
OPENROWSET関数はサポートされていません。
構文
SQL Server、Azure SQL Database、Fabric 内の SQL データベース、Azure SQL Managed Instance:
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
FORMATFILE = 'format_file_path' |
FORMATFILE_DATA_SOURCE = 'data_source_name' |
SINGLE_BLOB |
SINGLE_CLOB |
SINGLE_NCLOB |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
ERRORFILE_DATA_SOURCE = 'data_source_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ] |
ROWS_PER_BATCH = rows_per_batch
Fabric Data Warehouse の構文
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
ESCAPECHAR = 'escape_char' |
HEADER_ROW = [true|false] |
PARSER_VERSION = 'parser_version' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ROWS_PER_BATCH = rows_per_batch
一部の OPENROWSET オプションは形式固有で、他のオプションは汎用です。 たとえば、行区切り記号とフィールド区切り記号は区切りテキスト (CSV/TSV) に対してのみ意味がありますが、DATA_SOURCEや MAXERRORS などのオプションはすべての形式に適用されます。 以下の表は、最も一般的なフォーマットでサポートされているオプションをまとめたものです。
| オプション | CSV(1.0) | CSV(2.0) | PARQUET | JSONL |
|---|---|---|---|---|
| DATA_SOURCE、ROWS_PER_BATCH、MAXERRORS | Supported | Supported | Supported | Supported |
| ERRORFILE、ERRORFILE_DATA_SOURCE、FORMATFILE、FORMATFILE_DATA_SOURCE | Supported | Supported | サポートされていません | Supported |
| CODEPAGE、DATAFILETYPE | Supported | Supported | サポートされていません | Supported |
| ファーストロー | Supported | Supported | サポートされていません | Supported |
| ROWTERMINATOR、FIELDTERMINATOR、FIELDQUOTE、ESCAPECHAR | Supported | Supported | サポートされていません | サポートされていません |
| PARSER_VERSION | Supported | Supported | サポートされていません | サポートされていません |
| ラストロー | Supported | サポートされていません | サポートされていません | サポートされていません |
| HEADER_ROW | サポートされていません | Supported | サポートされていません | サポートされていません |
| SINGLE_BLOB、SINGLE_CLOB、SINGLE_NCLOB | サポートされていません | サポートされていません | サポートされていません | サポートされていません |
Arguments
BULK オプションの引数を使用すると、データの読み取りを開始および終了する場所、エラーに対処する方法、およびデータの解釈方法を大幅に制御できます。 たとえば、データ ファイルを varbinary、 varchar、または nvarchar 型の単一行、単一列の行セットとして読み取るように指定できます。 既定の動作については、後の引数の説明を参照してください。
BULK オプションの使用方法については、この記事で後述する「解説」セクションを参照してください。
BULKオプションに必要な権限については、この記事の後半の権限セクションをご覧ください。
一括インポート用にデータを準備する方法については、「 一括エクスポートまたは一括インポート用のデータの準備を参照してください。
BULK
OPENROWSETデータファイルのパス(URI)は、行セットとして読み返されます。
URI は、Azure Data Lake Storage または Azure Blob Storage を参照できます。 データが読み取られ、行セットとして返されるデータ ファイルの URI。
サポートされているパス形式は次のとおりです。
-
<drive letter>:\<file path>ローカル ディスク上のファイルにアクセスするには -
\\<network-share\<file path>ネットワーク共有上のファイルにアクセスするには -
adls://<container>@<storage>.dfs.core.windows.net/<file path>Azure Data Lake Storage にアクセスするには -
abs://<storage>.blob.core.windows.net/<container>/<file path>Azure Blob Storage にアクセスするには -
s3://<ip-address>:<port>/<file path>s3 互換ストレージにアクセスするには
Note
この記事とサポートされている URI パターンは、プラットフォームによって異なります。 Microsoft Fabric Data Warehouseで利用可能なURIパターンについては、バージョンドロップダウンリストでFabric Data Warehouseを選択してください。
SQL Server 2017 (14.x) 以降では、 data_file を Azure Blob Storage に格納できます。 例については、「 Azure Blob Storage のデータへの一括アクセスの例を参照してください。
-
https://<storage>.blob.core.windows.net/<container>/<file path>Azure Blob Storage または Azure Data Lake Storage にアクセスするには -
https://<storage>.dfs.core.windows.net/<container>/<file path>Azure Data Lake Storage にアクセスするには -
abfss://<container>@<storage>.dfs.core.windows.net/<file path>Azure Data Lake Storage にアクセスするには -
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/<file path>- Microsoft FabricでOneLakeにアクセスする
Azure Data Lake Storage Gen2に保存されたデータにアクセスする際は、Blobエンドポイントの代わりに abfss://<container>@<storage>.dfs.core.windows.net/<file path> または https://<storage>.dfs.core.windows.net/<container>/<file path> URI形式を使用してください。 両者とも階層的な名前空間(HNS)を完全にサポートしており、これによりディレクトリの意味論、最適化されたファイル操作、POSIXスタイルのアクセス制御リスト(ACL)が可能になります。
対照的に、 blob 端点は階層的な名前空間の特徴を公開せず、すべてのパスをフラットオブジェクトキーとして扱います。 これにより、パフォーマンス低下、ディレクトリの挙動制限、Azure Data Lake Storage Gen2のファイルシステムのセマンティクスを期待するエンジンとの互換性の欠如が生じる可能性があります。
Note
この記事とサポートされている URI パターンは、プラットフォームによって異なります。 SQL Server、Azure SQL Database、および Azure SQL Managed Instance で使用できる URI パターンについては、 バージョンのドロップダウン リストから製品を選択します。
URIは任意の文字列にマッチさせるために * 文字を含めることができ、 OPENROWSET URIに対してパターンマッチが可能です。 また、URIは /** で終わり、すべてのサブフォルダを再帰的に通過できるようにします。 SQL Server では、この動作は SQL Server 2022 (16.x) 以降で使用できます。
例えば次が挙げられます。
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<scheme:>//pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);
以下の表は、URIが参照可能なストレージタイプを示しています。
| バージョン | On-premises | Azure Storage | Fabricの OneLake | S3 | Google Cloud(GCS) |
|---|---|---|---|---|---|
| SQL Server 2017 (14.x)、SQL Server 2019 (15.x) | イエス | イエス | いいえ | いいえ | いいえ |
| SQL Server 2022 (16.x) | イエス | イエス | いいえ | イエス | いいえ |
| Azure SQL Database | いいえ | イエス | いいえ | いいえ | いいえ |
| Azure SQL Managed Instance | いいえ | イエス | いいえ | いいえ | いいえ |
| Azure Synapse Analytics のサーバーレス SQL プール | いいえ | イエス | イエス | いいえ | いいえ |
| Microsoft Fabric の Microsoft Fabric Warehouse と Microsoft Fabric の SQL 分析エンドポイント | いいえ | イエス | イエス | はい、OneLake in Fabricのショートカットを使っています | はい、OneLake in Fabricのショートカットを使っています |
| Microsoft Fabric の SQL データベース | いいえ | はい、OneLake in Fabricのショートカットを使っています | イエス | はい、OneLake in Fabricのショートカットを使っています | はい、OneLake in Fabricのショートカットを使っています |
OPENROWSET(BULK)を使って、Microsoft FabricのOneLakeに保存されたファイル、特にFabric LakehouseのFilesフォルダから直接データを読み取ることができます。 この機能により、ADLS Gen2やBlob Storageなどの外部ステージアカウントの必要性がなくなり、Fabric権限を用いてワークスペース制御されたSaaSネイティブの取り込みが可能になります。 この機能では、次の機能がサポートされます。
- Lakehouses の
Filesフォルダーからの読み取り - ワークスペースからウェアハウスへの読み込み (同じテナント内)
- Microsoft Entra ID を使用したネイティブ ID の適用
COPY INTOとOPENROWSET(BULK)の両方に適用される制限を確認してください。
DATA_SOURCE
DATA_SOURCE は、データ ファイル パスのルートの場所を定義します。 これにより、 BULK パス内の相対パスを利用できます。
CREATE EXTERNAL DATA SOURCEでデータソースを作成します。
ルートロケーションに加えて、その場所にあるファイルにアクセスするためのカスタム認証情報を定義することも可能です。
例えば次が挙げられます。
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<scheme:>//pandemicdatalake.blob.core.windows.net/public')
GO
SELECT *
FROM OPENROWSET(
BULK '/curated/covid-19/bing_covid-19_data/latest/*.parquet',
DATA_SOURCE = 'root'
);
ファイル形式のオプション
CODEPAGE
データ ファイル内のデータのコード ページを指定します。
CODEPAGE は、文字値が 127 以上または 32 未満の char、 varchar、または テキスト 列がデータに含まれている場合にのみ関連します。 有効な値は ACP、 OEM、 RAW、または特定のコードページです。
| CODEPAGE 値 | Description |
|---|---|
ACP |
char、varchar、またはテキスト データ型の列を ANSI/Microsoft Windows コード ページ (ISO 1252) から SQL Server コード ページに変換します。 |
OEM (既定値) |
char、varchar、またはテキスト データ型の列をシステム OEM コード ページから SQL Server コード ページに変換します。 |
RAW |
コード ページの変換は行われません。 これは最も高速なオプションです。 |
| Integer | データ ファイルの文字データのエンコードに使用されているソースのコード ページを示します (例 : 850)。 |
Important
SQL Server 2016 (13.x) より前のバージョンでは、コード ページ 65001 (UTF-8 エンコード) はサポートされていません。
CODEPAGE は Linux でサポートされているオプションではありません。
Note
フォーマット ファイルの各列に対して照合順序名を指定することをお勧めします (65001 オプションを照合順序/コード ページ仕様よりも優先する場合を除く)。
DATAFILETYPE
OPENROWSET(BULK)はシングルバイト(ASCII、UTF8)またはマルチバイト(UTF16)のファイルを読み取ることを指定しています。 有効な値は char と widechar です。
DATAFILETYPE 値 |
すべてのデータが示す形式 |
|---|---|
| char (既定値) | 文字形式。 詳細については、「 文字形式を使用してデータをインポートまたはエクスポートする」を参照してください。 |
| widechar | Unicode 文字。 詳細については、「 Unicode 文字形式を使用したデータのインポートまたはエクスポート」を参照してください。 |
FORMAT
参照されるファイルの形式を指定します。次に例を示します。
SELECT *
FROM OPENROWSET(BULK N'<data-file-path>',
FORMAT='CSV') AS cars;
有効な値は、バージョンに応じて、'CSV' ( RFC 4180 標準に準拠したコンマ区切り値ファイル)、'PARQUET'、'DELTA' (バージョン 1.0)、および 'JSONL' です。
| バージョン | CSV | PARQUET | DELTA | JSONL |
|---|---|---|---|---|
| SQL Server 2017 (14.x)、SQL Server 2019 (15.x) | イエス | いいえ | いいえ | いいえ |
| SQL Server 2022 (16.x) 以降のバージョン | イエス | イエス | イエス | いいえ |
| Azure SQL Database | イエス | イエス | イエス | いいえ |
| Azure SQL Managed Instance | イエス | イエス | イエス | いいえ |
| Azure Synapse Analytics のサーバーレス SQL プール | イエス | イエス | イエス | いいえ |
| Microsoft Fabric の Microsoft Fabric Warehouse と Microsoft Fabric の SQL 分析エンドポイント | イエス | イエス | いいえ | イエス |
| Microsoft Fabric の SQL データベース | イエス | イエス | いいえ | いいえ |
Important
OPENROWSET関数は、改行で区切られた JSON 形式のみを読み取ることができます。
改行文字はJSON文書間の区切りとして使われなければならず、JSON文書の中央に置くことはできません。
パス内のファイル拡張子が.csv、.tsv、.parquet、.parq、.jsonl、.ldjson、.ndjsonで終わる場合は、FORMATオプションを指定する必要はありません。 例えば、 OPENROWSET(BULK) 関数は以下の例の拡張に基づいてフォーマットがパーケットであることを認識しています。
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
ファイル パスが次のいずれかの拡張子で終わらない場合は、次のように FORMATを指定する必要があります。
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='PARQUET'
)
FORMATFILE
フォーマット ファイルの完全パスを指定します。 SQL Server では、次の 2 種類のフォーマット ファイルがサポートされます: XML と非 XML。
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'D:\XChange\test-csv.csv',
FORMATFILE= 'D:\XChange\test-format-file.xml'
)
結果セット内の列タイプを定義するにはフォーマットファイルが必要です。 唯一の例外は SINGLE_CLOB、 SINGLE_BLOB、または SINGLE_NCLOBを指定する場合で、この場合はフォーマットファイルは必要ありません。
フォーマットファイルの詳細については、「Use a format file to bulk import data(SQL Server)」をご覧ください。
2017 SQL Server(14.x)からは、format_file_pathがAzure Blob Storageに移行できるようになります。 例については、「 Azure Blob Storage のデータへの一括アクセスの例を参照してください。
FORMATFILE_DATA_SOURCE
FORMATFILE_DATA_SOURCE は、フォーマット ファイル パスのルートの場所を定義します。 このデータソースを使えば、 FORMATFILE オプションで相対パスを利用できます。
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '//pandemicdatalake/public/curated')
GO
SELECT *
FROM OPENROWSET(
BULK '//pandemicdatalake/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
FORMATFILE = 'covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt',
FORMATFILE_DATA_SOURCE = 'root'
);
CREATE EXTERNAL DATA SOURCEでフォーマットファイルデータソースを作成します。 ルートロケーションに加えて、その場所にあるファイルにアクセスするためのカスタム認証情報を定義することも可能です。
テキスト/CSV オプション
ROWTERMINATOR
char データ ファイルと widechar データ ファイルに使用する行ターミネータを指定します。次に例を示します。
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWTERMINATOR = '\n'
);
既定の行ターミネータは、\r\n (改行文字) です。 詳細については、「 フィールドターミネータと行ターミネータを指定する」を参照してください。
FIELDTERMINATOR
char および widechar データ ファイルに使用するフィールド ターミネータを指定します。次に例を示します。
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDTERMINATOR = '\t'
);
既定のフィールド ターミネータは , (コンマ) です。 詳細については、「 フィールドターミネータと行ターミネータの指定」を参照してください。 たとえば、タブ区切りのデータをファイルから読み取る場合は、次のようにします。
フィールドクォート
SQL Server 2017 (14.x) 以降、この引数は、次のニューヨークの例のように、CSV ファイルの引用符文字として使用される文字を指定します。
Empire State Building,40.748817,-73.985428,"20 W 34th St, New York, NY 10118","\icons\sol.png"
Statue of Liberty,40.689247,-74.044502,"Liberty Island, New York, NY 10004","\icons\sol.png"
このオプションの値として指定できるのは 1 文字だけです。 指定しない場合、" 標準で定義されている引用符文字として引用符文字 () が使用されます。
FIELDTERMINATOR文字 (コンマなど) はフィールド引用符内に配置でき、FIELDQUOTE文字で囲まれたセルでは通常の文字と見なされます。
たとえば、前のニューヨークのサンプル CSV データセットを読み取るには、 FIELDQUOTE = '"'を使用します。 アドレス フィールドの値は、 " (引用符) 文字内のコンマで複数の値に分割されず、1 つの値として保持されます。
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDQUOTE = '"'
);
PARSER_VERSION
対象: Fabricデータウェアハウスのみ
ファイルの読み取り時に使用するパーサーのバージョンを指定します。 現在サポートされている CSV パーサーのバージョンは 1.0 と 2.0 です。
- PARSER_VERSION = 「1.0」
- PARSER_VERSION = 「2.0」
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='CSV',
PARSER_VERSION = '2.0'
)
CSVパーサーバージョン2.0はパフォーマンス最適化されたデフォルトの実装ですが、バージョン1.0で利用可能なすべてのレガシーオプションやエンコーディングをサポートしているわけではありません。 OPENROWSETを使用すると、Fabric Data Warehouseはバージョン1.0のみをサポートするオプションを使うと自動的にバージョン1.0にフォールバックします。バージョンが明示的に指定されていなくてもです。 場合によっては、パーサーバージョン2.0で報告されたサポートされていない特徴によるエラーを解決するために、バージョン1.0を明示的に指定する必要があるかもしれません。
CSV パーサー バージョン 1.0 の詳細:
- 次のオプションはサポートされていません。HEADER_ROW。
- 既定のターミネータは、
\r\n、\n、\rです。 - 行ターミネータとして
\n(改行) を指定すると、自動的に\r(復帰) 文字が付加され、結果として行ターミネータが\r\nされます。
CSV パーサー バージョン 2.0 の詳細:
- すべてのデータ型がサポートされているわけではありません。
- 列の最大長は 8,000 文字です。
- 行の最大サイズの上限は 8 MB です。
- 次のオプションはサポートされていません:
DATA_COMPRESSION。 - 引用符で囲まれた空の文字列 ("") は、空の文字列として解釈されます。
- DATEFORMAT SET その選択肢は認められません。
-
日付データ型でサポートされている形式:
YYYY-MM-DD -
時刻データ型でサポートされている形式:
HH:MM:SS[.fractional seconds] -
datetime2 データ型でサポートされている形式:
YYYY-MM-DD HH:MM:SS[.fractional seconds] - 既定のターミネータは
\r\nと\nです。
ESCAPE_CHAR
ファイル内のエスケープに使用される文字と、ファイル内のすべての区切り記号値を指定します。次に例を示します。
Place,Address,Icon
Empire State Building,20 W 34th St\, New York\, NY 10118,\\icons\\sol.png
Statue of Liberty,Liberty Island\, New York\, NY 10004,\\icons\\sol.png
エスケープ文字の後にそれ自体以外の値、またはいずれかの区切り記号の値が続く場合は、その値を読み取るときにエスケープ文字が削除されます。
ESCAPECHAR パラメーターは、FIELDQUOTEが有効かどうかに関係なく適用されます。 引用文字をエスケープするために使用されることはありません。 引用文字は、別の引用文字でエスケープする必要があります。 引用符文字は、値が引用符文字でカプセル化されている場合にのみ、列値内に表示できます。
次の例では、コンマ (,) と円記号 (\) がエスケープされ、 \, および \\として表されます。
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ESCAPECHAR = '\'
);
HEADER_ROW
CSV ファイルに、他のデータ行と共に返してはならないヘッダー行を含めるかどうかを指定します。 ヘッダーを含む CSV ファイルの例を次の例に示します。
Place,Latitude,Longitude,Address,Area,State,Zipcode
Empire State Building,40.748817,-73.985428,20 W 34th St,New York,NY,10118
Statue of Liberty,40.689247,-74.044502,Liberty Island,New York,NY,10004
既定値は FALSE です。 Fabric Data Warehouseで PARSER_VERSION='2.0' サポートされています。
TRUE場合、列名は引数に従って最初の行FIRSTROW読み取られます。
TRUEとスキーマがWITHを使用して指定されている場合、列名のバインドは序数位置ではなく列名によって行われます。
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
HEADER_ROW = TRUE
);
エラー処理オプション
エラーファイル
形式エラーがあり、OLE DB 行セットに変換できない行を収集するときに使用するファイルを指定します。 該当する行は、データ ファイルからこのエラー ファイルに "そのまま" コピーされます。
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<error-file-path>'
);
エラー ファイルはコマンドの実行開始時に作成されます。 ファイルが既に存在する場合は、エラーが発生します。 さらに、拡張子 .ERROR.txt の制御ファイルが作成されます。 このファイルにはエラー ファイルの各行の参照と、エラーの診断が含まれています。 エラーが修正されると、データを読み込むことができます。
SQL Server 2017 (14.x) 以降では、error_file_path は Azure Blob Storage に格納することができます。
ERRORFILE_DATA_SOURCE_NAME
SQL Server 2017 (14.x) 以降では、この引数は、インポート中に見つかったエラーを含むエラー ファイルの場所を指す名前付き外部データ ソースです。
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<root-error-file-path>')
GO
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<relative-error-file-path>',
ERRORFILE_DATA_SOURCE = 'root'
);
詳細については、「 CREATE EXTERNAL DATA SOURCE (Transact-SQL)」を参照してください。
MAXERRORS
フォーマット ファイルで定義されている構文エラーまたは不適合行の最大数を指定します。これは、 OPENROWSET が例外をスローする前に発生する可能性があります。
MAXERRORSに達するまで、OPENROWSETは不適切な行を無視し、読み込まず、無効な行を 1 つのエラーとしてカウントします。
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
MAXERRORS = 0
);
maximum_errorsの既定値は 10 です。
Note
MAX_ERRORS は、 CHECK 制約や money およびbigint データ型の変換には適用されません。
データ処理オプション
ファーストロー
読み込み開始行の行番号を指定します。 既定値は 1 です。 この値は指定されたデータファイルの最初の行を示します。 行番号は行ターミネータの数をカウントして決定されます。
FIRSTROW は 1 から始まります。
ラストロー
読み込み終了行の行番号を指定します。 既定値は 0 です。 この値は指定されたデータファイルの最後の行を示します。
ROWS_PER_BATCH
データ ファイル内にあるデータ行の概算数を指定します。 この値は推定値であり、実際の行数の近似値 (1 桁以内) である必要があります。 既定では、 ROWS_PER_BATCH はファイルの特性 (ファイルの数、ファイル サイズ、返されるデータ型のサイズ) に基づいて推定されます。
ROWS_PER_BATCH = 0の指定は、ROWS_PER_BATCHを省略する場合と同じです。 例えば次が挙げられます。
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWS_PER_BATCH = 100000
);
ORDER ( { column [ ASC |DESC ] } [ ,... n ] [ UNIQUE ] )
データ ファイル内のデータの並べ替え方法を指定するオプションのヒント。 既定では、一括操作はデータ ファイルが並べ替えられていないことを前提に実行されます。 クエリ オプティマイザーが順序を利用して、より効率的なクエリ プランを生成できる場合、パフォーマンスが向上する可能性があります。 次の一覧は、並べ替えを指定する場合に役立つ可能性がある例を示しています。
- クラスター化インデックスを持ち、クラスター化インデックス キーで行セット データが並べ替えられているテーブルに行を挿入する場合。
- 行セットを別のテーブルに結合するとき、並べ替え列と結合列が一致する場合。
- 並べ替え列で行セット データを集約する場合。
- 並べ替え列と結合列が一致するクエリの
FROM句で、行セットをソース テーブルとして使用します。
UNIQUE
データ ファイルに重複するエントリがないことを指定します。
データファイルの実際の行が指定された順序に従ってソートされていなかったり、 UNIQUE のヒントや重複キーが存在すると指定した場合、エラーが返されます。
ORDERを使う場合は列のエイリアスが必要です。 列のエイリアスリストは、 BULK 節がアクセスする派生テーブルを参照しなければなりません。
ORDER節で指定した列名は、この列の別名リストを指します。 大きな値型(varchar(max)、nvarchar(max)、varbinary(max)、xml)や大きなオブジェクト(LOB)型(テキスト、ntext、画像)の列を指定することはできません。
コンテンツ オプション
SINGLE_BLOB
varbinary(max)型の単一行の単一列行セットとしてdata_fileの内容を返します。
Important
XMLデータをインポートするには、SINGLE_CLOBやSINGLE_NCLOBではなくSINGLE_BLOBオプションのみを使います。なぜなら、すべてのWindowsエンコーディング変換をサポートしているのはSINGLE_BLOBだからです。
SINGLE_CLOB
data_fileをASCIIとして読み取り、現在のデータベースの照合を用いてvarchar(max)型の単一行・単一列の行セットとして内容を返します。
SINGLE_NCLOB
data_fileをUnicodeとして読み込み、現在のデータベースの照合を使ってnvarchar(max)型の単一行・単一列行セットとして内容を返します。
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
WITH schema
WITH スキーマは、OPENROWSET関数の結果セットを定義する列を指定します。 リターン OPENROWSET すべての列の列定義を含み、基礎となるファイルの列を結果セット内の列にバインドするマッピングルールを概説しています。
次に例を示します。
-
country_region列はvarchar(50)型を持ち、同じ名前の基礎列を参照しています。 -
date列はCSVやParquetの列、または異なる物理名を持つJSONLプロパティを参照します。 -
cases列はファイルの3番目の列を参照しています。 -
fatal_cases列は入れ子にされたParquetプロパティまたはJSONLサブオブジェクトを参照します。
SELECT *
FROM OPENROWSET(<...>)
WITH (
country_region varchar(50), --> country_region column has varchar(50) type and referencing the underlying column with the same name
[date] DATE '$.updated', --> date is referencing a CSV/Parquet column or JSONL property with a different physical name
cases INT 3, --> cases is referencing third column in the file
fatal_cases INT '$.statistics.deaths' --> fatal_cases is referencing a nested Parquet property or JSONL sub-object
);
<Column_name>
結果の行セットで OPENROWSET 返される列の名前です。
OPENROWSET 同じ名前の基礎ファイル列からこの列のデータを読み込みますが、 <column_path> や <column_ordinal>でオーバーライドしない限り。 列名は列 名識別子のルールに従う必要があります。
<column_type>
結果セット内の列の T-SQL 型。
OPENROWSET 結果を返す際に基礎ファイルからこのタイプに変換します。 詳細については、「 Fabric Warehouse のデータ型」を参照してください。
<column_path>
Parquet などの複合型の入れ子になったフィールドを参照するために使用されるドット区切りのパス ( $.description.location.latなど)。
<column_ordinal>
これは、列の物理的インデックスを表し、その列が WITH 節の列に写るものです。
Permissions
外部データソースで OPENROWSET を使用するには、以下の権限が必要です:
-
ADMINISTER DATABASE BULK OPERATIONSまたは ADMINISTER BULK OPERATIONS
次の T-SQL の例では、プリンシパルに ADMINISTER DATABASE BULK OPERATIONS を許可します。
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];
ターゲットストレージアカウントがプライベートであれば、コンテナまたはストレージアカウントレベルでプリンシパルにStorage Blobデータリーダー の役割(またはそれ以上の役割)のメンバーシップを割り当てる必要があります。
Remarks
SELECTで使うFROM節はテーブル名の代わりにOPENROWSET(BULK...)を呼び出せ、完全なSELECT機能を持つことができます。OPENROWSETでBULKオプションを使用するには、FROM句に相関名を指定する必要があります。これは範囲変数または別名とも呼ばれます。AS <table_alias>を追加しなければ、エラーメッセージ491が表示されます:「from節のバルク行セットに対して相関名を指定する必要があります。」列のエイリアスを指定することもできます。 列のエイリアスリストを指定していない場合、フォーマットファイルには列名が必要です。 列エイリアスを指定すると、フォーマットファイル内の列名が上書きされます。 例えば次が挙げられます。
FROM OPENROWSET(BULK...) AS table_aliasFROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
SELECT...FROM OPENROWSET(BULK...)ステートメントは、データをテーブルにインポートせずに、ファイル内のデータに対してクエリを直接実行します。SELECT...FROM OPENROWSET(BULK...)文は、formatファイルを使って列名やデータ型を指定することで、バルクカラムエイリアスを一覧化できます。
-
OPENROWSET(BULK...)をINSERT文やMERGE文のソーステーブルとして使うことで、データファイルからテーブルに一括インポートできます。 詳細については、「BULK INSERTまたは OPENROWSET(BULK...) を使用してデータをSQL Serverにインポートする」を参照してください。 -
INSERT文でOPENROWSET BULKオプションを使うと、BULK節はテーブルヒントをサポートしています。TABLOCKなどの通常のテーブル ヒントに加えて、BULK句では、次の特殊なテーブル ヒントを使用できます:IGNORE_CONSTRAINTS(CHECKおよびFOREIGN KEY制約のみ無視します)、IGNORE_TRIGGERS、KEEPDEFAULTS、KEEPIDENTITY。 詳細については、「テーブル ヒント (Transact-SQL)」を参照してください。 -
INSERT...SELECT * FROM OPENROWSET(BULK...)ステートメントの使用方法については、「データの一括インポートと一括エクスポート (SQL Server)」をご覧ください。 バルクインポートで実行される行挿入操作がトランザクションログに記録されるタイミングについては、「 最小限のログ・インバーク・インポートのPrerequisites」を参照してください。 - 完全なリカバリーモデルで
OPENROWSET (BULK ...)データをインポートすると、ログの最適化はできません。
Note
OPENROWSETを使用する場合は、SQL Server が偽装をどのように処理するかを理解することが重要です。 セキュリティ上の考慮事項については、「BULK INSERT または OPENROWSET(BULK...)を使ってデータをSQL Serverにインポートする」を参照してください。
Microsoft Fabric Data Warehouse、以下の表はサポートされている機能をまとめています。
| Feature | Supported | 利用できません |
|---|---|---|
| ファイル形式 | Parquet、CSV、JSONL | Delta、Azure Cosmos DB、JSON、リレーショナル データベース |
| Authentication | Entra ID/SPNパススルー、パブリックストレージ | SAS/SAK、SPN、マネージド アクセス |
| Storage | Azure Blob Storage、Azure Data Lake Storage、Microsoft Fabric の OneLake | |
| Options | の完全/絶対 URI のみ OPENROWSET |
OPENROWSETの相対 URI パスDATA_SOURCE |
| Partitioning | クエリで filepath() 関数を使用できます。 |
SQLCHAR、SQLNCHAR、または SQLBINARY データの一括インポート
OPENROWSET(BULK...) 特に指定しない場合、 SQLCHAR、 SQLNCHAR、または SQLBINARY の最大データ長が8,000バイトを超えないと仮定しています。 もしLOBデータフィールドにvarchar(max)、nvarchar(max)、またはvarbinary(max)のいずれかのオブジェクトが8,000バイトを超えるものを含むデータをインポートする場合、データフィールドの最大長さを定義したXMLフォーマットファイルを使う必要があります。 最大長さを指定するには、フォーマットファイルを編集して MAX_LENGTH 属性を宣言します。
Note
自動的に生成されるフォーマット・ファイルは、LOB フィールドの長さまたは最大長を指定しません。 ただし、手作業でフォーマット ファイルを編集して長さまたは最大の長さを指定できます。
SQLXML ドキュメントの一括エクスポートまたは一括インポート
SQLXML データを一括エクスポートまたは一括インポートする場合、フォーマット ファイルのデータ型には次のいずれかを使用します。
| データの種類 | Effect |
|---|---|
SQLCHAR または SQLVARYCHAR |
データは、クライアント コード ページまたは照合順序によって暗黙的に示されるコード ページで送信されます。 |
SQLNCHAR または SQLNVARCHAR |
データは Unicode として送られます。 |
SQLBINARY または SQLVARYBIN |
データは変換なしで送られます。 |
ファイル メタデータ関数
時には、結果セット内の特定の行に対応するファイルやフォルダのソースを知る必要があるかもしれません。
関数 filepath や filename を使ってファイル名や結果セット内のパスを返すことができます。 または、ファイル名やフォルダパスに基づいてデータをフィルタリングすることもできます。 以下のセクションでは、簡単な説明とサンプルを掲載しています。
ファイル名関数
この関数は行のファイル名を返します。
リターンデータ型は nvarchar(1024)です。 最適なパフォーマンスのために、ファイル名関数の結果を適切なデータ型に必ずキャストしてください。 文字データ型を使う場合は、適切な長さを使うようにしてください。
以下のサンプルは2017年後半のNYCイエロータクシーのデータファイルを読み取り、ファイルあたりの乗車回数を返します。 クエリの OPENROWSET 部分は、どのファイルを読み取るかを指定します。
SELECT
nyc.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=2017/month=9/*.parquet',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT='PARQUET'
) nyc
GROUP BY nyc.filename();
以下の例は、WHERE節の filename() を使ってファイルを読み取るためのフィルタリング方法を示しています。 クエリの OPENROWSET 部分でフォルダ全体にアクセスし、 WHERE 節でファイルをフィルタリングします。
結果は前の例と同じです。
SELECT
r.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2)
WITH (C1 varchar(200) ) AS [r]
WHERE
r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
r.filename()
ORDER BY
[filename];
ファイルパス関数
この関数は、完全なパスまたはパスの一部を返します:
- パラメータなしで
filepath関数を呼び出すと、行が発信するファイルパス全体を返します。 - パラメータで
filepath関数を呼び出すと、パラメータで指定された位置のワイルドカードと一致するパスの部分を返します。 例えば、パラメータ値が1の場合、最初のワイルドカードと一致するパスの部分を返します。
filepath関数の返還データ型はnvarchar(1024)です。 最適なパフォーマンスを得るためには、 filepath 関数の結果を適切なデータ型に必ずキャストしてください。 文字データ型を使う場合は、適切な長さを使うようにしてください。
以下のサンプルは、2017年最後の3か月間のNYCイエロータクシーのデータファイルを読み取っています。 ファイルパスごとの乗車回数を返します。 クエリの OPENROWSET 部分は、どのファイルを読み取るかを指定します。
SELECT
r.filepath() AS filepath
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
以下の例は、WHERE節の filepath() を使ってファイルを読み取るためのフィルタリング方法を示しています。
クエリの OPENROWSET 部分でワイルドカードを使い、 WHERE 節でファイルをフィルタリングできます。 結果は前の例と同じになります。
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_*-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Examples
このセクションでは、 OPENROWSET BULK 構文の使用方法を示す一般的な例を示します。
A. OPENROWSETを使ってファイルをvarbinary(max)列にまとめてデータBULK INSERT
適用対象: SQL Server のみ。
次の例では、デモンストレーション用の小さなテーブルを作成し、Text1.txt ルート ディレクトリにある C: という名前のファイルから varbinary(max) 列にファイル データを挿入します。
CREATE TABLE myTable (
FileName NVARCHAR(60),
FileType NVARCHAR(60),
Document VARBINARY(MAX)
);
GO
INSERT INTO myTable (
FileName,
FileType,
Document
)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
*
FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_BLOB
) AS Document;
GO
B. フォーマット ファイルで OPENROWSET BULK プロバイダーを使用してテキスト ファイルから行を取得する
適用対象: SQL Server のみ。
次の例では、フォーマット ファイルを使用して、タブ区切りのテキスト ファイル values.txt から行を取得します。このテキスト ファイルには次のデータが含まれます。
1 Data Item 1
2 Data Item 2
3 Data Item 3
フォーマット ファイル values.fmt では、values.txt の列が次のように表されています。
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
このクエリは、そのデータを取得します。
SELECT a.* FROM OPENROWSET(
BULK 'C:\test\values.txt',
FORMATFILE = 'C:\test\values.fmt'
) AS a;
C. フォーマット ファイルとコード ページを指定する
適用対象: SQL Server のみ。
次の例は、フォーマット ファイルとコード ページの両方のオプションを同時に使用する方法を示しています。
INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
BULK N'D:\data.csv',
FORMATFILE = 'D:\format_no_collation.txt',
CODEPAGE = '65001'
) AS a;
D. フォーマット ファイルを使用して CSV ファイルからデータにアクセスする
適用対象: SQL Server 2017 (14.x) 以降のバージョンのみ。
SELECT * FROM OPENROWSET(
BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW = 2,
FORMAT = 'CSV'
) AS cars;
E. フォーマット ファイルなしで CSV ファイルからデータにアクセスする
適用対象: SQL Server のみ。
SELECT * FROM OPENROWSET(
BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14\MSSQL\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'SELECT * FROM E:\Tlog\TerritoryData.csv'
);
Important
ODBC ドライバーは 64 ビットである必要があります。 Windows で ODBC データ ソースへの接続 (SQL Server インポートおよびエクスポート ウィザード) アプリケーションの [ドライバー] タブを開き、これを確認します。 32ビットの Microsoft Text Driver (*.txt, *.csv) は64ビット版の sqlservr.exeでは動作しません。
F. Azure Blob Storage に格納されているファイルからデータにアクセスする
適用対象: SQL Server 2017 (14.x) 以降のバージョンのみ。
SQL Server 2017 (14.x) 以降のバージョンでは、次の例では、Azure ストレージ アカウント内のコンテナーと、共有アクセス署名用に作成されたデータベース スコープ資格情報を指す外部データ ソースを使用しています。
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoices',
SINGLE_CLOB
) AS DataFile;
資格情報と外部データ ソースの構成を含む完全な OPENROWSET 例については、「 Azure Blob Storage のデータへの一括アクセスの例を参照してください。
G. Azure Blob Storage に格納されているファイルからテーブルにインポートする
以下の例では、OPENROWSETコマンドを使って、SASキーを作成したAzure BlobストレージのCSVファイルからデータを読み込む方法を示しています。 Azure Blobのストレージ場所を外部データソースとして設定します。 このプロセスには、ユーザーデータベース内のマスターキーを使って暗号化された共有アクセス署名(SAS)を使用するデータベーススコープ認証情報が必要です。
-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
-- Optional: a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
-- Make sure that you don't have a leading ? in the SAS token, and that you
-- have at least read permission on the object that should be loaded srt=o&sp=r,
-- and that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/curriculum',
-- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
CREDENTIAL = MyAzureBlobStorageCredential
);
INSERT INTO achievements
WITH (TABLOCK) (
id,
description
)
SELECT * FROM OPENROWSET(
BULK 'csv/achievements.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FORMATFILE = 'csv/achievements-c.xml',
FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;
H. 外部ソースにマネージド ID を使う
適用対象: Azure SQL Managed Instance と Azure SQL Database
以下の例はマネージドIDを使って認証情報を作成し、外部ソースを作成し、その外部ソースにホストされたCSVからデータを読み込みます。
まず資格情報を作成し、BLOB ストレージを外部ソースとして指定します。
CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';
CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
CREDENTIAL = sampletestcred
);
次に、BLOB ストレージ上でホストされている CSV ファイルからデータを読み込みます。
SELECT * FROM OPENROWSET(
BULK 'Test - Copy.csv',
DATA_SOURCE = 'SampleSource',
SINGLE_CLOB
) as test;
I. OPENROWSET を使用して、S3 互換オブジェクト ストレージを使用して複数の Parquet ファイルにアクセスする
適用対象: SQL Server 2022 (16.x) 以降のバージョン。
以下の例は、異なる場所から複数のParquetファイルにアクセスし、すべてS3互換のオブジェクトストレージに保存されています。
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO
CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
LOCATION = 's3://10.199.40.235:9000/movies',
CREDENTIAL = s3_dsc
);
GO
SELECT * FROM OPENROWSET(
BULK (
'/decades/1950s/*.parquet',
'/decades/1960s/*.parquet',
'/decades/1970s/*.parquet'
),
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_eds'
) AS data;
J. OPENROWSET を使用して Azure Data Lake Gen2 から複数の Delta テーブルにアクセスする
適用対象: SQL Server 2022 (16.x) 以降のバージョン。
この例では、データ テーブル コンテナーの名前は Contoso で、Azure Data Lake Gen2 ストレージ アカウントにあります。
CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';
CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = delta_storage_dsc
);
SELECT *
FROM OPENROWSET(
BULK '/Contoso',
FORMAT = 'DELTA',
DATA_SOURCE = 'Delta_ED'
) AS result;
K. OPENROWSET を使用してパブリック匿名データセットのクエリを実行する
次の例では、公開されている NYC 黄色のタクシー乗車レコードのオープン データ セットを使用します。
最初にデータ ソースを作成します。
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
名前パターンに一致するフォルダー内 .parquet 拡張子を持つすべてのファイルに対してクエリを実行します。
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
A. Azure Blob Storage から Parquet ファイルを読み取る
次の例では、Parquet ファイルから 100 行を読み取る方法を確認できます。
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
B. カスタム CSV ファイルを読み取る
以下の例では、ヘッダー行と行とフィールドを区切る明確に指定された終端文字を持つCSVファイルから行を読み取る方法が見られます。
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
HEADER_ROW = TRUE,
ROW_TERMINATOR = '\n',
FIELD_TERMINATOR = ',');
C. ファイルの読み取り中にファイル列スキーマを指定する
次の例では、 OPENROWSET 関数が返す行のスキーマを指定します:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet')
WITH (
updated DATE
,confirmed INT
,deaths INT
,iso2 VARCHAR(8000)
,iso3 VARCHAR(8000)
);
D. パーティション・データ・セットの読み取り
以下の例では、 filepath() 関数を使ってマッチしたファイルパスからURIの部分を読み取っています。
SELECT TOP 10
files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://<storage account>.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';
E. JSONL ファイルの読み取り中にファイル列スキーマを指定する
次の例では、 OPENROWSET 関数の結果として返される行のスキーマを明示的に指定する方法を確認できます。
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.dfs.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl')
WITH (
country_region varchar(50),
date DATE '$.updated',
cases INT '$.confirmed',
fatal_cases INT '$.deaths'
);
JSONL ファイルの場合、列名がプロパティ内の列の物理名と一致しない場合は、型定義の後の JSON パスで物理名を指定できます。 複数のプロパティを使用できます。 たとえば、parquet 複合型または JSON サブオブジェクトで入れ子になったプロパティを参照 $.location.latitude 。
その他の例
A. OPENROWSETを使ってFabric LakehouseからCSVファイルを読み取ってください
この例では、OPENROWSETを使ってFabric Lakehouse上のCSVファイルを読み取っています。 ファイル名は customer.csv で、 Files/Contoso/ フォルダに保存されます。 データソースやデータベースのスコープ認証情報を提供しないため、Fabric SQLデータベースはEntra IDのコンテキストを使って認証します。
SELECT * FROM OPENROWSET
( BULK ' abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/customer.csv'
, FORMAT = 'CSV'
, FIRST_ROW = 2
) WITH
(
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR(50),
Gender NVARCHAR(10),
Title NVARCHAR(10),
GivenName NVARCHAR(100),
MiddleInitial VARCHAR(2),
Surname NVARCHAR(100),
StreetAddress NVARCHAR(200),
City NVARCHAR(100),
State NVARCHAR(100),
StateFull NVARCHAR(100),
ZipCode NVARCHAR(20),
Country_Region NCHAR(2),
CountryFull NVARCHAR(100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR(100),
Company NVARCHAR(100),
Vehicle NVARCHAR(100),
Latitude DECIMAL(10,6),
Longitude DECIMAL(10,6) ) AS DATA
B. OPENROWSETを使ってFabric Lakehouseからファイルを読み込み、新しいテーブルにデータを挿入します
この例では、 OPENROWSET を使って store.parquetという名前のParquetファイルからデータを読み込みます。 その後、 INSERT を使って新しいテーブルにデータを追加します。 Store。 パーケットファイルはFabric Lakehouseに設置されています。 データソースやデータベースの範囲認証情報を提供しないため、FabricのSQLデータベースはEntra IDのコンテキストを使って認証します。
SELECT *
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS dataset;
-- insert into new table
SELECT *
INTO Store
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS STORE;
その他の例
OPENROWSET(BULK...)の使用を示すその他の例については、次の記事を参照してください。
- データの一括インポートと一括エクスポート (SQL Server)
- XML ドキュメントの一括インポートと一括エクスポートの例 (SQL Server)
- データの一括インポート時の ID 値の保持 (SQL Server)
- 一括インポート中の NULL または既定値の保持 (SQL Server)
- データの一括インポートでのフォーマット ファイルの使用 (SQL Server)
- 文字形式を使用したデータのインポートまたはエクスポート (SQL Server)
- フォーマット ファイルを使用したテーブル列のスキップ (SQL Server)
- フォーマット ファイルを使用したデータ フィールドのスキップ (SQL Server)
- フォーマット ファイルを使用したテーブル列とデータ ファイル フィールドのマッピング (SQL Server)
- Azure SQL Managed Instances で OPENROWSET を使用してデータ ソースにクエリを実行する
- フィールドターミネータと行ターミネータを指定する (SQL Server)