如何在ADF中向Gen2 CSV写入数据时过滤{CR}字符
解决方案:ADF CopyData 处理CR字符过滤与多格式文件输出
一、过滤源字符串中的CR字符
针对源字段含有的CR(\r)字符,可通过两种方式处理:
1. 源查询直接处理(适用于SQL类数据源)
如果源是数据库,直接在查询语句中替换CR字符,以SQL Server为例:
SELECT REPLACE(target_string_column, CHAR(13), '') AS cleaned_column, other_required_columns FROM your_source_table
CHAR(13)对应CR字符,用空字符串替换即可完成过滤。
2. 数据流(Data Flow)清洗(兼容多数据源)
若源查询无法直接处理,或需要更复杂的清洗逻辑,用数据流实现:
- 添加Derived Column转换,对目标字段编写表达式:
replace(target_string_column, '\r', '')
- 清洗完成后,将数据流接入CopyData活动写入Gen2。
二、确保输出CSV使用LF作为行分隔符
在Gen2目标数据集的配置中:
- 选择CSV格式后,进入「格式设置」
- 将「行分隔符」设置为
\n(LF) - 同步确认列分隔符等其他格式参数符合需求
三、生成多种不同行格式的文件
根据场景选择两种实现方式:
1. 多分支CopyData并行处理
若各格式的数据源逻辑相似,仅输出字段/格式不同:
- 添加Foreach活动,遍历预先定义的格式配置数组(例如包含字段列表、输出路径、格式参数的JSON)
- 每个Foreach分支内配置独立的CopyData活动:
- 源端:用动态内容
@item().column_list构建字段查询 - 目标端:通过
@item().output_path动态设置输出路径,同时配置对应格式的行/列分隔符等参数
- 源端:用动态内容
2. 数据流分路输出多文件
若需从同一份清洗后的数据生成多格式文件:
- 在数据流中添加Conditional Split转换(或直接分路),按格式规则拆分数据
- 每个分路后接入Sink转换,分别配置不同的Gen2输出路径与CSV格式参数
- 管道中用Execute Data Flow活动运行该数据流,一次性生成所有格式文件
注意事项
- CR过滤验证:抽取少量数据后,用Notepad++等工具查看是否仍存在
\r字符 - 动态参数管理:所有动态配置的参数(如字段列表、输出路径)需提前在管道参数中定义,避免硬编码
- 性能优化:大数据量并行处理时,需注意Gen2的写入并发限制,避免触发限流
内容的提问来源于stack exchange,提问作者BauV
相关产品推荐
相关产品推荐

