You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure Data Factory加载SQL Server数据到Snowflake报错如何解决

问题根因

你的推测完全准确,这个报错是Snowflake解析ADF生成的中间暂存文本文件时,字段引用规则和实际内容不匹配导致的行解析错位,不是真的缺失换行符。报错里明确指向第7个字段也就是NewValue列,核心原因就是该列中存在未被正确转义的双引号,导致解析器误判字段边界,本该在单列内的内容被识别成多列,遍历到字符'C'的位置时没找到预期的行尾分隔符\r\n就抛出错误。

原始报错信息参考:

ErrorCode=UserErrorOdbcOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ERROR [22000] Found character 'C' instead of record delimiter '\r\n'
File '93fcbeba-41f7-4824-b8f6-eda4c2965e00/SnowflakeImportCopyCommand/data_93fcbeba-41f7-4824-b8f6-eda4c2965e00_fa1577fb-8544-44a6-8a60-65bd8b2419c5.txt', line 48, character 39
Row 1 starts at line 2, column "myTable"["$7":7]

排查步骤
  • 定位出错原始内容:根据报错给出的文件路径,找到ADF复制活动使用的中间暂存存储里的对应txt文件,直接跳转到第48行第39个字符的位置,就能看到触发错误的具体特殊字符,90%以上概率是未转义的半角双引号。
  • 核对ADF复制活动配置:重点检查Snowflake接收器的文件格式设置项,确认是否默认使用双引号作为字段包裹符、是否配置了对应的特殊字符转义规则、是否显式指定了字段分隔符和换行符。
  • 回溯源表数据:到SQL Server源表中查询对应批次的NewValue字段值,确认是否存在半角双引号、字段分隔符(如逗号)、嵌入式换行符这类会干扰文本解析的特殊字符。
可落地方案

按优先级从高到低选择:

  • 优先方案(零代码改造成本最低):直接调整ADF Snowflake接收器的文件格式参数
    显式指定换行符为\r\n、字段分隔符为实际使用的分隔符(如逗号),将字段引用符设置为NONE,或者将转义字符配置为双引号(对应Snowflake端ESCAPE = '"'规则,即字段内的双引号用两个连续双引号转义),不要使用默认的自动识别格式规则。
  • 稳定性最高方案:将ADF复制活动的中间暂存文件格式从默认CSV改为Parquet。Parquet是二进制结构化格式,不存在文本转义问题,从根源上规避引号、换行符、特殊字符导致的解析错位,尤其适合OldValue、NewValue这类存储变更日志、长文本内容的字段。
  • 临时兜底方案:如果暂时无法调整复制活动配置,可以在源端抽取时对特殊字符做预处理,比如在SQL查询语句中用REPLACE(NewValue, '"', '""')对双引号做预转义,临时解决解析问题。
注意事项
  • 存储操作日志、变更记录的文本字段非常容易混入各类特殊字符,用CSV作为中转格式时必须显式指定所有格式参数,依赖自动识别规则大概率会遇到解析错误。
  • 报错信息中标记的column "myTable"["$7":7]就是指第7个字段解析异常,和你最初的判断完全一致。

内容的提问来源于stack exchange,提问作者Bilal Shafqat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:18:22