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

使用ADF Copy命令替换CSV带引号字符串内的多余双引号

ADF Copy命令处理CSV嵌套双引号替换方案

针对你用ADF Copy命令处理超100万条记录的CSV文件(路径SFTP→ADLS→数据库),需要替换字符串字段内的多余双引号为竖线(|)的需求,以下是不依赖Python/Databricks/JSON的原生ADF解决方案:

核心前提设置

先确保CSV数据集的转义配置正确:在SFTP/ADLS的CSV数据集设置中,将转义字符设为"(双引号),这样ADF能正确识别字符串内部的""为转义双引号,而非字段边界。


方法1:Copy Activity派生列(轻量处理)

适合字段结构固定的场景,直接在Copy映射中处理:

  • 进入Copy Activity的「映射」界面,导入完整架构。
  • 对每个字符串类型字段(原数据中被双引号包裹的字段),添加派生列,使用以下表达式:
    iif(columnName == '""', '""', replace(columnName, '""', '|'))
    
    这个表达式会跳过空值字段(原数据中""),仅替换字符串内部的""为|。
  • 数值字段和空值字段保持原样,无需修改。

方法2:Data Flow批量替换(适合复杂字段结构)

如果字段较多或结构易变,用ADF原生Data Flow处理(不属于Databricks/Python范畴):

  1. 创建Data Flow,源连接SFTP的CSV文件,确保「引号转义」已开启。
  2. 添加「替换值」转换:
    • 选择所有字符串类型字段作为目标列;
    • 设置查找值为"(Data Flow会自动把CSV中的""解析为单个");
    • 替换值设为|;
    • 附加条件:仅当字段非空时执行替换,表达式为:
      iif(!isEmpty($$), replace($$, '"', '|'), $$)
      
  3. 将处理后的数据输出到ADLS或直接写入数据库。

正则替换方案(针对全文件处理)

如果之前正则尝试失败,可使用匹配字符串内部双引号的正则,在源的「附加设置」中配置全文件替换:

  • 查找正则:""(?=(?:[^"]*"[^"]*")*[^"]*$)
  • 替换为:|
    这个正则会精准匹配字符串内部的""(通过检查后续引号数量为偶数,判断当前双引号处于字段内部),不会影响字段边界的引号或空值字段。

数据示例验证

原数据:

1,"abc","Class (""G"") as agreed , with new Value x",7004,"rec"
2,"prq","Promoting ""Junior"" to Senior, showing good results","",x

处理后结果:

1,"abc","Class (|G|) as agreed , with new Value x",7004,rec
2,"prq","Promoting |Junior| to Senior, showing good results","",x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:35:24