使用OPENROWSET读取本地Parquet文件时遇加载库失败及路径支持问题
问题描述
尝试执行以下SQL语句读取本地Parquet文件:
SELECT * FROM OPENROWSET( BULK 'H:\Linolium\somename.parquet', FORMAT = 'PARQUET') AS data;
执行后出现错误:
Could not load external library 'E:\DB\MSSQL16.SQL2022\MSSQL\Binn\extractors\ParquetReaderExtractor.dll'.
使用的SQL Server版本:
Microsoft SQL Server 2022 (RTM-CU18) (KB5050771) - 16.0.4185.3 (X64)
未安装Polybase或Azure扩展,咨询这是不支持功能、存在bug还是缺少组件?安装Polybase后,又出现新错误:
Connector prefix 'SomePath\small.parquet' is not supported for specified FORMAT 'PARQUET'.
尝试UNC路径和驱动器路径均出现相同错误。
问题分析与解决
第一个错误:无法加载ParquetReaderExtractor.dll
- SQL Server 2022中,用
OPENROWSET直接读取Parquet格式文件必须依赖Polybase组件,未安装时系统缺少解析Parquet的必要库文件,这是功能依赖要求,并非bug。
第二个错误:路径前缀不支持
安装Polybase后仍报错,是因为Parquet这类外部数据源不能直接通过本地路径传入BULK参数,需要借助外部数据源对象来引用,操作步骤如下:
- 启用Ad Hoc分布式查询(若未启用):
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
- 创建指向本地文件目录的外部数据源:
CREATE EXTERNAL DATA SOURCE LocalParquetSource WITH ( LOCATION = 'FILE:///H:/Linolium/', TYPE = FILE_SYSTEM );
- 通过外部数据源读取Parquet文件:
SELECT * FROM OPENROWSET( BULK 'somename.parquet', DATA_SOURCE = 'LocalParquetSource', FORMAT = 'PARQUET' ) AS data;
- 注意事项:
- 路径统一使用正斜杠
/,避免反斜杠转义问题 - SQL Server服务账户需拥有目标文件目录的读取权限
- 若用UNC路径,将
LOCATION设置为FILE:///\\servername\sharename\格式
- 路径统一使用正斜杠
内容的提问来源于stack exchange,提问作者siggemannen
相关产品推荐
相关产品推荐

