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

仅用复制活动迁移Azure SQL至Snowflake遇分隔符异常求助

解决Azure SQL通过ADF复制活动迁移至Snowflake的分隔符冲突问题

问题背景

  • 迁移流程:通过Azure Data Factory(ADF)的Lookup活动读取元数据表(存储源/目标架构、表名映射),再用For Each活动循环执行两次复制活动,实现Azure SQL → Azure Blob Storage → Snowflake的数据迁移
  • 核心报错:Found character C instead of delimiter ‘,’,尝试更换多种分隔符但数据本身包含这些字符,且因存储账户(West US2)与Snowflake账户(East US2)跨区域限制,无法编写Snowflake脚本预处理

可行解决方案

方案1:带字段引号的CSV文件格式(Snowflake端配置)

利用Snowflake的CSV文件格式特性,通过引号包裹含分隔符的字段规避冲突:

  1. 在Snowflake中创建带引号规则的文件格式(若无法执行SQL,可通过ADF可视化配置对应参数):
CREATE OR REPLACE FILE FORMAT QUOTED_CSV
TYPE = CSV
FIELD_DELIMITER = ','
QUOTE = '"' -- 用双引号包裹所有字符串字段
ESCAPE = '"' -- 转义字段内部的双引号
SKIP_HEADER = 1
TRIM_SPACE = TRUE;
  1. ADF配置同步调整:
    • Azure SQL → Blob的复制活动:在Sink设置中开启「Quote all string columns」,确保所有字符串字段被双引号包裹
    • Blob → Snowflake的复制活动:在Sink的「文件格式」选项中选择上述创建的QUOTED_CSV,或直接在ADF中配置对应引号、分隔符参数

方案2:改用Parquet半结构化格式

完全规避分隔符问题,同时提升跨区域传输效率:

  1. Azure SQL → Blob的复制活动:将Sink的文件格式设置为Parquet
  2. Blob → Snowflake的复制活动:使用Snowflake的Parquet文件格式:
CREATE OR REPLACE FILE FORMAT PARQUET_FORMAT
TYPE = PARQUET
COMPRESSION = SNAPPY;

Parquet为二进制列存格式,数据结构自包含,无需考虑分隔符,且压缩后体积更小,适合跨区域迁移场景

方案3:使用罕见自定义分隔符

如果必须保留CSV格式,选择数据中绝对不存在的罕见字符作为分隔符(如^或|):

  1. Snowflake端创建对应文件格式:
CREATE OR REPLACE FILE FORMAT CUSTOM_DELIM_CSV
TYPE = CSV
FIELD_DELIMITER = '^'
SKIP_HEADER = 1;
  1. ADF两次复制活动统一配置:
    • Azure SQL → Blob的复制活动:在Sink中设置分隔符为^
    • Blob → Snowflake的复制活动:关联上述自定义分隔符的文件格式

关键注意事项

  • 确保ADF中两次复制活动的文件格式参数(分隔符、引号规则、压缩方式等)完全匹配
  • 若无法执行Snowflake SQL脚本,可直接在ADF的Snowflake复制活动「Sink」选项中,通过可视化界面配置文件格式的所有参数,无需编写SQL
  • Parquet格式无需手动映射Schema,ADF会自动处理字段对应关系

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:40:29