共用方式為


OPENROWSET BULK (Transact-SQL)

適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft Fabric SQL 資料庫中Microsoft網狀架構倉儲中的 SQL 分析端點

OPENROWSET 式會從一或多個檔案讀取資料,並將內容傳回為資料列集。 視服務而定,檔案可能會儲存在 Azure Blob 儲存體、Azure Data Lake 儲存體、內部部署磁碟、網路共用等中。您可以讀取各種檔案格式,例如文字/CSV、Parquet 或 JSON 行。

OPENROWSET 式可以在查詢的 子句中 FROM 參考,就像是數據表名稱一樣。 它可用來讀取陳述式中的SELECT資料,或更新陳述 UPDATEINSERTDELETEMERGECTAS式中的CETAS目標資料。

  • OPENROWSET(BULK) 是為從外部資料檔案讀取資料而設計的。
  • OPENROWSET without BULK 是為從另一個資料庫引擎讀取而設計的。 如需詳細資訊,請參閱 OPENROWSET (Transact-SQL)。

這篇文章和 中 OPENROWSET(BULK) 設定的論點因平台而異。

其他平台上類似範例的詳細數據和連結:

Transact-SQL 語法慣例

語法

針對 SQL Server、Azure SQL 資料庫、Fabric 中的 SQL 資料庫,以及 Azure SQL 管理實例:

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

Arguments

選項的 BULK 自變數可大幅控制開始和結束讀取數據的位置、如何處理錯誤,以及如何解譯數據。 例如,您可以指定將資料檔讀取為 varbinaryvarcharnvarchar 類型的單列、單欄資料列集。 預設行為將在接下來的引數描述中加以描述。

如需如何使用選項 BULK 的相關資訊,請參閱本文稍後的 備註 一節。 如需選項所需權限 BULK 的相關資訊,請參閱本文稍後的 權限 一節。

如需準備大容量導入數據的資訊,請參閱 準備大容量匯出或匯入的數據。

批量“data_file_path

資料檔的路徑或 URI,其資料將被讀取並傳回為列集。

URI 可以參考 Azure Data Lake 記憶體或 Azure Blob 記憶體。 要讀取和傳回數據做為數據列集之數據檔的 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 儲存體
  • s3://<ip-address>:<port>/<file path> 存取 S3 相容儲存

Note

本文和支援的 URI 模式在不同平台上有所不同。 如需 Microsoft Fabric Data Warehouse 中可用的 URI 模式, 請在版本下拉式清單中選取 [Fabric]。

從 SQL Server 2017 (14.x) 開始, data_file 可以位於 Azure Blob 儲存體中。 如需範例,請參閱大量存取 Azure Blob 儲存體 中的數據範例。

  • https://<storage>.blob.core.windows.net/<container>/<file path> 以存取 Azure Blob 儲存體或 Azure Data Lake 儲存體
  • 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

Note

本文和支援的 URI 模式在不同平台上有所不同。 針對 SQL Server、Azure SQL 資料庫和 Azure SQL 受控執行個體中可用的 URI 模式,請 在版本下拉式清單中選取產品

URI 可以包含 * 字元以符合任何字元序列,允許 OPENROWSET 與 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 可參照的儲存類型如下表所示:

版本 內部部署 Azure 儲存體 Fabric 中的 OneLake S3 谷歌雲 (GCS)
SQL Server 2017 (14.x)、SQL Server 2019 (15.x) Yes Yes
SQL Server 2022 (16.x) Yes Yes Yes
Azure SQL Database Yes
Azure SQL 受控執行個體 Yes
Azure Synapse Analytics 中的無伺服器 SQL 集區 Yes Yes
Microsoft Fabric 倉儲和 SQL 分析端點 Yes Yes 是的,使用 OneLake in Fabric的快捷鍵 是的,使用 OneLake in Fabric的快捷鍵
Microsoft Fabric 中的 SQL 資料庫 是的,使用 OneLake in Fabric的快捷鍵 Yes 是的,使用 OneLake in Fabric的快捷鍵 是的,使用 OneLake in Fabric的快捷鍵

你可以直接 OPENROWSET(BULK) 從 Microsoft Fabric 中 OneLake 儲存的檔案讀取資料,特別是從 Fabric Lakehouse 的 Files 資料夾 讀取資料。 這不需要外部預備帳戶 (例如 ADLS Gen2 或 Blob 儲存體),並使用 Fabric 許可權啟用工作區控管的 SaaS 原生擷取。 此功能支援:

  • 從 Lakehouse 中的資料夾讀取Files
  • 相同租用戶內的工作區到倉儲載入
  • 使用 Microsoft Entra ID 的原生身分識別強制執行

請參閱適用於 和 COPY INTOOPENROWSET(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 只有在資料包含字元值大於 127 或小於 32 的 charvarchartext 直欄時才相關。 有效值為 'ACP'、'OEM'、'RAW' 或 'code_page':

CODEPAGE 值 Description
ACP charvarchar文字 資料類型的資料行從 ANSI/Microsoft Windows 字碼頁 (ISO 1252) 轉換為 SQL Server 字碼頁。
OEM (預設值) charvarchar文字 資料類型的資料行從系統 OEM 字碼頁轉換為 SQL Server 字碼頁。
RAW 不進行字碼頁之間的轉換。 這是最快的選項。
code_page 指出在哪一個來源字碼頁,將資料檔中的字元資料加以編碼;例如 850。

Important

SQL Server 2016 (13.x) 之前的版本不支援字碼頁 65001 (UTF-8 編碼) 。 CODEPAGE Linux 上不支持的選項。

Note

除非您希望 65001 選項的優先順序高於定序/字碼頁指定值,否則建議您在格式檔案中指定每個資料行的定序名稱。

DATAFILETYPE

指定應該 OPENROWSET(BULK) 讀取單位元組 (ASCII、UTF8) 或多位元組 (UTF16) 檔案內容。 有效值為 charwidechar

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) Yes
SQL Server 2022 (16.x) 及更新版本 Yes Yes Yes
Azure SQL Database Yes Yes Yes
Azure SQL 受控執行個體 Yes Yes Yes
Azure Synapse Analytics 中的無伺服器 SQL 集區 Yes Yes Yes
Microsoft Fabric 倉儲和 SQL 分析端點 Yes Yes Yes
Microsoft Fabric 中的 SQL 資料庫 Yes Yes

Important

OPENROWSET 函式只能讀取 換行換欄的 JSON 格式。 換行字元必須用作 JSON 文件之間的分隔符號,且不能放在 JSON 文件的中間。

如果路徑中的副檔名以 、 、 FORMAT.csv.tsv.parquet.parq.jsonl、 或 結尾.ldjson,則不需要指定選項。.ndjson 例如,函 OPENROWSET(BULK) 式知道格式是根據下列範例中的副檔名為基礎的 parquet:

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'
)

格式檔案

指定格式檔的完整路徑。 SQL Server 支援兩種類型的格式檔案:XML 和非 XML。

SELECT TOP 10 *
FROM OPENROWSET(
      BULK 'D:\XChange\test-csv.csv',
      FORMATFILE= 'D:\XChange\test-format-file.xml'
)

您必須使用格式檔,才能定義結果集中的資料行類型。 唯一的例外狀況是指定 、 SINGLE_CLOBSINGLE_BLOBSINGLE_NCLOB,在此情況下,不需要格式檔案。

如需格式檔案的相關信息,請參閱 使用格式檔案大容量導入資料 (SQL Server)

從 SQL Server 2017 (14.x) 開始,format_file_path可以在 Azure Blob 儲存體 中。 如需範例,請參閱大量存取 Azure Blob 儲存體 中的數據範例。

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 選項

行終結者

指定要用於 charwidechar 資料檔的資料列終止字元,例如:

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    ROWTERMINATOR = '\n'
);

預設資料列結束字元是 \r\n (新行字元)。 如需詳細資訊,請參閱 指定字段和數據列終止符

FIELDTERMINATOR

指定要用於 charwidechar 資料檔的欄位終止符,例如:

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    FIELDTERMINATOR = '\t'
);

預設欄位終止符為 , (逗號)。 如需詳細資訊,請參閱 指定欄位和列終止字元。 例如,若要從檔案讀取定位點分隔的資料:

FIELDQUOTE = 「field_quote'

從 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"

只能將單一字元指定為此選項的值。 如果未指定,則會使用引號字元 (") 作為 RFC 4180 標準中定義的引號字元。 字 FIELDTERMINATOR 元 (例如逗號) 可以放在欄位引號內,而且會被視為以字元換 FIELDQUOTE 行的儲存格中的一般字元。

例如,若要讀取先前的紐約範例 CSV 資料集,請使用 FIELDQUOTE = '"'。 地址欄位的值將保留為單一值,而不是透過(引號)字元內 " 的逗號分割成多個值。

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    FIELDQUOTE = '"'
);

PARSER_VERSION = 『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,以解決解析器 2.0 版本回報的不支援功能所造成的錯誤。

CSV 解析器 1.0 版細節:

  • 不支援下列選項:HEADER_ROW。
  • 預設終止字元為 \r\n\n\r
  • 如果您指定 \n (換行符) 作為列終止字元,則會自動以 (回車符) 字元為 \r 前綴,這會導致列終止字元 為 \r\n

CSV 解析器 2.0 版細節:

  • 並非所有資料類型都受支援。
  • 字元直欄長度上限為 8000。
  • 列大小限制上限為 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 = 「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 = { TRUE |FALSE }

指定 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。 支援於 PARSER_VERSION='2.0' Fabric Data Warehouse。 如果 ,將 TRUE根據參數從 FIRSTROW 第一行讀取列名。 如果使用 TRUE指定 和 schema,則WITH會依直欄名稱來完成,而不是序數位置來完成資料行名稱的繫結。

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    HEADER_ROW = TRUE
);

錯誤處理選項

錯誤檔案 = 'file_name'

指定用來收集格式錯誤且無法轉換成 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 儲存體中。

錯誤檔案_資料來源

從 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 = maximum_errors

指定語法錯誤或不符合格式數據列的數目上限,如格式檔案中所定義,這可能會在擲回例外狀況之前 OPENROWSET 發生。 直到 MAXERRORS 到達為止, OPENROWSET 會忽略每個不正確的數據列,而不是載入它,並將不正確的數據列計算為一個錯誤。

SELECT *
FROM OPENROWSET(
    BULK '<data-file-path>',
    MAXERRORS = 0
);

maximum_errors的預設值為 10。

Note

MAX_ERRORS 不適用於條件約束,也不適用於 CHECK 轉換 moneybigint 資料類型。

資料處理選項

第一列 = first_row

指定要載入之第一個資料列的號碼。 預設值為 1。 這表示指定之資料檔中的第一個資料列。 資料列號碼是由計算資料列結束字元所決定。 FIRSTROW 是以1為基礎。

最後一列 = last_row

指定要載入之最後一個資料列的號碼。 預設值為 0。 這表示指定的資料檔中的最後一個資料列。

ROWS_PER_BATCH = rows_per_batch

指定資料檔案中資料列的近似數目。 此值是估計值,應該是實際列數的近似值 (在一個數量級內)。 根據預設,根據檔案特性估計 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 |描述 ] } [ ,... n ] [ 獨特 ] )

選擇性提示,指定如何排序數據檔中的數據。 依預設,大量作業會假設資料檔沒有排序。 如果查詢優化器可以利用順序來產生更有效率的查詢計劃,效能可能會改善。 下列清單提供指定排序可能很有説明的範例:

  • 將資料列插入具有叢集索引的資料表中,其中的資料列集資料會根據叢集索引鍵來排序。
  • 將資料列集與另一個資料表聯結,其中的排序資料行和聯結資料行會相符。
  • 依據排序資料行彙總資料列集資料。
  • 使用數據列集做為查詢子句中的 FROM 源數據表,其中排序和聯結數據行相符。

UNIQUE

指定資料檔案沒有重複的專案。

如果數據檔中的實際數據列未根據指定的順序排序,或 UNIQUE 指定提示且存在重複索引鍵,則會傳回錯誤。

使用 時 ORDER 需要數據行別名。 數據行別名清單必須參考 子句所存取 BULK 的衍生數據表。 子句中指定的 ORDER 數據行名稱會參考此數據行別名清單。 無法指定大型值類型 (varchar(max)nvarchar(max)、varbinary(max)xml) 和大型物件 (LOB) 類型 (textntextimage) 資料行。

內容選項

SINGLE_BLOB

data_file 的內容傳回為 varbinary(max) 類型的單列、單欄資料列集。

Important

我們建議您只使用 SINGLE_BLOB 選項匯入 XML 數據,而不是 SINGLE_CLOBSINGLE_NCLOB,因為只 SINGLE_BLOB 支援所有 Windows 編碼轉換。

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 結構描述

WITH 架構會指定定義 OPENROWSET 函式結果集的數據行。 其中包含將傳回結果之每個數據行的數據行定義,並概述將基礎檔案數據行系結至結果集中數據行的對應規則。

在以下範例中:

  • country_region 列具有 varchar(50) 類型,並引用具有相同名稱的基礎列
  • 資料 date 行參考具有不同實體名稱的 CSV/Parquet 資料行或 JSONL 屬性
  • cases 欄引用檔案中的第三欄
  • 資料 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>

將在結果數據列集中傳回的數據行名稱。 除非由 <column_path><column_ordinal>覆寫,否則此數據行的數據會從具有相同名稱的基礎檔案數據行讀取。 資料行的名稱必須遵循 資料行名稱識別碼的規則

<column_type>

結果集中數據行的 T-SQL 類型。 當 OPENROWSET 傳回結果時,基礎檔案中的值會轉換成此類型。 如需詳細資訊,請參閱 Fabric Warehouse 中的資料類型

<column_path>

點分隔路徑(例如 $.description.location.lat),用來參考 Parquet 等複雜類型的巢狀欄位。

<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>];

如果目標記憶體帳戶是私人的,主體也必須在容器或記憶體帳戶層級指派記憶體 Blob 數據讀取者 角色(或更高層級)。

Remarks

  • FROM搭配 SELECT 使用的 子句可以呼叫 OPENROWSET(BULK...) ,而不是具有完整SELECT功能的數據表名稱。

  • 具有 OPENROWSET 選項的 BULKFROM 子句中需要一個相互關聯名稱,又稱為範圍變數或別名。 無法在錯誤訊息 491 中新增 AS <table_alias> 結果:「必須在 from 子句中為大量資料列集指定相互關聯名稱。」

  • 您可以指定資料行別名。 如果未指定數據行別名清單,格式檔案必須具有數據行名稱。 指定資料行別名會覆寫格式檔中的資料行名稱,例如:

    • FROM OPENROWSET(BULK...) AS table_alias
    • FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
  • SELECT...FROM OPENROWSET(BULK...) 陳述式會直接查詢檔案中的資料,而不將資料匯入資料表中。

  • SELECT...FROM OPENROWSET(BULK...)陳述式可以使用格式檔案來指定資料行名稱,以及資料類型,以列出大量資料行別名。

  • 在 or OPENROWSET(BULK...) 陳述式中INSERT大量用作MERGE來源表格,可將資料從資料檔案匯入資料表。 如需詳細資訊,請參閱 使用 BULK INSERT 或 OPENROWSET(BULK...) 將數據匯入 SQL Server
  • OPENROWSET BULK當 選項與語句搭配INSERT使用時,BULK子句支持數據表提示。 除了一般的資料表提示 (例如 TABLOCK) 之外,BULK 子句也接受下列特殊化資料表提示:IGNORE_CONSTRAINTS (僅忽略 CHECKFOREIGN KEY 限制式)、IGNORE_TRIGGERSKEEPDEFAULTSKEEPIDENTITY。 如需詳細資訊,請參閱資料表提示 (Transact-SQL)
  • 如需如何使用 INSERT...SELECT * FROM OPENROWSET(BULK...) 陳述式的資訊,請參閱資料的大量匯入及匯出 (SQL Server)。 如需了解大量匯入作業中執行的資料列插入發生時如何記錄到交易記錄的資訊,請參閱大量匯入採用最低限度記錄的必要條件
  • 使用 完整恢復模式匯入數據時, 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 EntraID/SPN 傳遞、公用儲存體 SAS/SAK、SPN、受控存取
Storage Azure Blob Storage, Azure Data Lake Storage, OneLake in Microsoft Fabric
Options 中只有完整/絕對 URI OPENROWSET 中的 OPENROWSET相對 URI 路徑, DATA_SOURCE
Partitioning 您可以在查詢中使用 filepath() 函式。

大容量導入 SQLCHAR、SQLNCHAR 或 SQLBINARY 數據

OPENROWSET(BULK...)假設如果未指定,則 、 或 SQLCHAR 數據的最大長度SQLNCHARSQLBINARY不會超過 8,000 個字節。 如果要匯入的資料位於包含任何超過 8,000 位元組之 varchar(max)、nvarchar(max)varbinary(max) 物件的 LOB 資料欄位中,您必須使用定義資料欄位長度上限的 XML 格式檔案。 若要指定最大長度,請編輯格式檔案,並宣告 MAX_LENGTH 屬性。

Note

自動產生的格式檔案不會指定 LOB 字段的長度或長度上限。 但是,您可以編輯格式檔案,並手動指定長度或最大長度。

大量匯出或是匯入 SQLXML 文件

若要大量匯出或匯入 SQLXML 資料,請在格式檔案中使用下列其中一種資料類型。

數據類型 Effect
SQLCHARSQLVARYCHAR 數據會在用戶端代碼頁或定序所隱含的代碼頁中傳送。
SQLNCHARSQLNVARCHAR 以 Unicode 格式傳送這份資料。
SQLBINARYSQLVARYBIN 資料被傳送時未經任何轉換。

檔案中繼資料函式

有時候,你可能需要知道哪個檔案或資料夾來源對應結果集中的特定列。

你可以使用函式 filepathfilename 並且回傳檔案名稱和/或結果集中的路徑。 或者你可以用它們根據檔案名稱和/或資料夾路徑來篩選資料。 在接下來的章節中,你會看到簡短的說明,並附有範例。

檔名功能

此函式會回傳該列所屬的檔名。

回傳資料類型為 nvarchar(1024)。 為了達到最佳效能,請務必將檔名函式的結果投射到適當的資料型態。 如果你使用字元資料型別,請確保使用適當的長度。

以下範例讀取了 2017 年最後三個月的紐約市黃計程車資料檔案,並回傳每個檔案的搭乘次數。 查詢的部分 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();

以下範例展示了如何 filename() 利用 WHERE 子句來篩選待讀檔案。 它會存取查詢部分的整個資料夾 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];

檔案路徑函數

此函式回傳完整路徑或路徑的一部分:

  • 當呼叫時未設定參數,會回傳資料列所屬的完整檔案路徑。
  • 當以參數呼叫時,會回傳與參數中指定位置萬用卡相符的路徑部分。 例如,參數值 1 會回傳與第一個萬用卡相符的路徑部分。

回傳資料類型為 nvarchar(1024)。 為了最佳效能,必須將函式結果 filepath 鑄造為適當的資料型別。 如果你使用字元資料型別,請確保使用適當的長度。

以下範例為2017年最後三個月的紐約市黃計程車資料檔案。 它會回傳每個檔案路徑的騎乘次數。 查詢的部分 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;

以下範例展示了如何 filepath() 利用 WHERE 子句來篩選待讀檔案。

你可以在查詢部分使用萬用字元 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) 數據行

適用於: 僅限 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。

下列範例會利用一個格式檔,從 Tab 鍵分隔的文字檔 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 儲存體 上的檔案存取數據

適用於: 僅限 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 儲存體 中的數據範例。

G. 從儲存在 Azure Blob 儲存體 上的檔案匯入數據表

下列範例示範如何使用 OPENROWSET 命令,從您建立 SAS 金鑰的 Azure Blob 記憶體位置中的 csv 檔案載入數據。 Azure Blob 儲存體位置已設定為外部資料來源。 這需要使用在使用者資料庫中以主要金鑰加密的共用存取簽章來進行資料庫範圍認證。

-- 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. 針對外部來源使用受控識別

適用於: Azure SQL 受控執行個體和 Azure SQL 資料庫

下列範例會使用受控識別建立認證、建立外部來源,然後從裝載於外部來源的 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 記憶體讀取 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 路徑中指定實體名稱。 您可以使用多個屬性。 例如, $.location.latitude 參照 parquet 複雜類型或 JSON 子物件中的巢狀內容。

其他範例

A. 使用 OPENROWSET 從 Fabric Lakehouse 讀取 CSV 檔案

在此範例中,OPENROWSET將用來讀取儲存在資料夾下方customer.csv的 Fabric Lakehouse 上一個名為 Files/Contoso/的 CSV 檔案。 由於沒有提供資料來源及資料庫範圍認證,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 parquet 檔案位於 Fabric Lakehouse,因為沒有提供DATA_SOURCE及資料庫範圍的憑證,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...)的更多範例,請參閱下列文章: