在专用SQL Pool中使用OPENROWSET函数时遭遇语法错误
解决专用SQL Pool中OPENROWSET语法错误问题
问题原因
专用SQL Pool(原Azure SQL数据仓库)不支持OPENROWSET函数,这是出现语法错误的根本原因。该函数仅在Azure SQL数据库、SQL Server等其他SQL产品中可用。
替代解决方案
针对读取ADLS Gen2中CSV文件的场景,推荐使用外部表或COPY INTO语句实现需求,以下是具体步骤:
方案1:创建外部表读取CSV
- 创建外部文件格式
CREATE EXTERNAL FILE FORMAT CsvFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', FIRST_ROW = 2 -- 若CSV包含表头则设为2,无表头设为1 ) );
- 创建匹配CSV结构的外部表
CREATE EXTERNAL TABLE dbo.External_CSV_Data ( id INT, name VARCHAR(100), age INT ) WITH ( LOCATION = 'blob.csv', DATA_SOURCE = anubhav, FILE_FORMAT = CsvFormat );
- 查询外部表数据
SELECT TOP 100 * FROM dbo.External_CSV_Data;
方案2:使用COPY INTO直接导入本地表
若无需保留外部表,可直接将CSV数据导入到本地表:
- 创建本地目标表
CREATE TABLE dbo.Local_CSV_Data ( id INT, name VARCHAR(100), age INT );
- 执行数据导入
COPY INTO dbo.Local_CSV_Data (id, name, age) FROM 'abfss://adls-container-1998@adlsaccount1998.dfs.core.windows.net/Folder1/blob.csv' WITH ( CREDENTIAL = credanubhav, FILE_TYPE = 'CSV', FIRSTROW = 2 -- 根据是否有表头调整参数 );
- 查询本地表数据
SELECT TOP 100 * FROM dbo.Local_CSV_Data;
额外注意事项
- 确保专用SQL Pool已启用PolyBase支持(默认已启用),且之前配置的数据库主密钥、数据库范围凭据、外部数据源均有效。
- 若CSV存在特殊格式(如多行字段、自定义分隔符),需对应调整外部文件格式的参数。
内容的提问来源于stack exchange,提问作者Anubhav
相关产品推荐
相关产品推荐

