Azure Synapse无服务器SQL Pool读取CSV遇Unexpected Token错误求助
解决Synapse无服务器SQL池OPENROWSET解析CSV的转义字符问题
问题根源
你的CSV文件存在两个关键格式细节导致解析失败:
- 字段分隔符是逗号加空格(
,),而非单纯逗号,默认配置会把空格误判为字段内容的一部分,引发解析异常 - 第三行的
\""是用反斜杠转义双引号,需要明确指定转义字符,同时配合正确的字段引号规则
修正后的查询语句
SELECT TOP 5 * FROM OPENROWSET( BULK 'https://*******/empl.csv', FORMAT = 'CSV', PARSER_VERSION = '2.0', FIRSTROW = 2, -- 跳过表头行 FIELDTERMINATOR = ', ', -- 匹配CSV实际的分隔符(逗号+空格) FIELDQUOTE = '"', -- 指定字段包裹符为双引号 ESCAPECHAR = '\' -- 指定转义字符为反斜杠 ) AS data
参数说明
FIELDTERMINATOR = ', ':精准匹配CSV中字段间的分隔符,避免空格被误解析为字段内容FIELDQUOTE = '"':明确解析规则,字段值由双引号包裹,遇到双引号时结合转义字符处理ESCAPECHAR = '\':指定反斜杠为转义字符,让\"被解析为单个双引号FIRSTROW = 2:跳过第一行表头,防止表头被当作数据行解析
进阶:指定列结构(可选)
如果需要更精准的列映射和类型定义,可添加WITH子句:
SELECT TOP 5 * FROM OPENROWSET( BULK 'https://*******/empl.csv', FORMAT = 'CSV', PARSER_VERSION = '2.0', FIELDTERMINATOR = ', ', FIELDQUOTE = '"', ESCAPECHAR = '\' ) WITH ( empl_code INT, name VARCHAR(50), u_version VARCHAR(10) ) AS data
执行后即可得到你期望的解析结果:
| empl_code | name | u_version |
|---|---|---|
| 123 | JOE SMITH | ! |
| 124 | DAVE SMITH | M |
| 125 | BRIAN SMITH | " |
内容的提问来源于stack exchange,提问作者robertsmithfromthecure
相关产品推荐
相关产品推荐

