SQL Server 2019 CU12 Polybase外部表查询不遵守REJECT拒绝选项问题
问题原因说明
1. 对REJECT选项的功能理解存在偏差
REJECT选项仅作用于行级数据错误,例如字段值类型不匹配、字段长度溢出、行分隔符/列分隔符解析异常等逐行校验的场景。你遇到的是文件级schema不匹配错误,属于读取器初始化阶段的前置校验逻辑,还未进入逐行读取和拒绝判断的流程,因此REJECT_VALUE阈值配置不生效。
SQL Server 2019 PolyBase的设计逻辑为:扫描LOCATION指定目录下的所有文件时,只要存在任意一个文件的列数与外部表定义的列数不一致,会直接抛出读取器创建失败错误,不会跳过schema不匹配的文件。
2. 潜在配置疏漏
你当前建表语句中指定的FILE_FORMAT = ParquetFileFormat,但测试用的是CSV格式文件,如果你的文件格式定义确实是Parquet格式,这本身也会触发文件格式不兼容的错误。如果实际测试用的是CSV文件,需要替换为对应配置的CSV格式定义,例如包含列分隔符、编码、首行是否为表头的参数。
可行解决方案
- 将不同schema的文件拆分到不同子目录,外部表LOCATION仅指定存放2列CSV文件的路径
- 改用
OPENROWSET(BULK)语法读取目录文件,自定义列映射和错误处理逻辑,过滤出符合预期schema的行数据,示例语法参考:
SELECT * FROM OPENROWSET( BULK '/employee/*.csv', DATA_SOURCE = 'DATA_LAKE', FORMAT = 'CSV', FIRSTROW = 2 -- 根据实际是否有表头调整 ) WITH ( [FirstName] varchar(100) NOT NULL, [LastName] varchar(100) NOT NULL )
内容的提问来源于stack exchange,提问作者Geekn
相关产品推荐
相关产品推荐

