如何在Azure Data Factory 2中处理双竖线分隔符
解决Azure Data Factory处理双竖线分隔文件的导入问题
这个坑我之前帮客户踩过——Azure Data Factory的内置TextFormat压根不支持多字符的列分隔符,这就是你设置"columnDelimiter": "||"后所有行都报“不兼容”的核心原因。别着急,不用修改原始输入文件也能解决,给你两个靠谱的方案:
方案1:用数据流(Data Flow)处理(推荐)
这是最灵活也最省心的方法,步骤很清晰:
- 新建一个数据流,添加源数据集指向你的双竖线分隔文件。注意:数据集的
format里不用设置columnDelimiter,让ADF把整行数据当作一个字符串列读进来就行。 - 加一个派生列转换,用
split函数把整行拆分成数组:
这里的split(toString(RowData), '||')RowData是源数据里那个整行的列名,你可以根据实际情况替换。 - 再添加一个拆分列转换,选择刚才生成的数组列,按数组索引拆分出单独的列(比如索引0对应Column1,索引1对应Column2)。
- 最后用接收器把处理好的数据写入Azure SQL DB,记得做好列映射。
方案2:复制活动+临时字符替换(适合不想用数据流的场景)
如果你的场景不适合用数据流,也可以用这个变通方法:
- 在输入数据集的
format配置里,把columnDelimiter设为一个原始文件中绝对不存在的单字符,比如~或者♦这种特殊符号。 - 在复制活动的映射界面,给每个目标列设置表达式,先替换分隔符再拆分:
这里的split(replace(toString(sourceColumn), '||', '~'), '~')[0]~就是你刚才指定的单字符分隔符,每个目标列对应数组的不同索引([0]对应Column1,[1]对应Column2,以此类推)。
为什么你之前的尝试没用?
- 不指定
columnDelimiter时,ADF默认把整行当作一列,这是正常的默认行为; - 用Unicode写法
\u007C\u007C也没用,因为TextFormat只识别单字符分隔符,多字符不管怎么转义都不支持; - 换成单竖线能正常工作,就是因为单字符符合
TextFormat的要求。
测试的时候建议先用小文件验证逻辑,确保拆分后的列和SQL表的结构完全对应,避免出现列数不匹配的问题。
内容的提问来源于stack exchange,提问作者Ilse
相关产品推荐
相关产品推荐

