Azure Data Factory复制CSV至SQL时添加额外列遇错求助
问题解决步骤
1. 修复CSV列解析错误(核心问题)
报错的直接原因是CSV里的cast/crew列包含嵌套JSON,JSON中的逗号被默认当成列分隔符,导致解析出的列数远超预期。解决方式:
- 打开ADLS Gen2源数据集的Delimited Text格式配置:
- 设置Text qualifier为
"(双引号),确保CSV中包含嵌套JSON的列是用双引号包裹的(若原CSV未添加,需先处理文件或导出时补充)。 - 确认Column count设置为CSV实际的列数(比如SQL表列数减去新增的2列,假设是3列则填3)。
- 若CSV里的JSON有转义需求,可设置Escape character为
\。
- 设置Text qualifier为
- 配置完成后点击数据集的Preview,确认所有列能正确识别,无列被拆分的情况。
2. 正确添加额外列并完成映射
方式一:通过Source的Additional columns添加
在Copy Activity的Source标签页,点击Additional columns添加两行:
- 第一行:列名填
pipelineid,值填表达式@pipeline().PipelineId - 第二行:列名填
source_filename,值填表达式@split(pipeline().parameters.filePath, '/')[sub(length(split(pipeline().parameters.filePath, '/')),1)](若通过参数传递文件路径),或直接用@dataset().FileName(单文件数据集场景) - 切换到Copy Activity的Mapping标签页,确保新增的两列与目标SQL表的
pipelineid、source_filename列正确映射,其余CSV列也对应到目标表的对应列。
方式二:直接在Sink映射中赋值(更直观)
无需在Source里加额外列,直接在Copy Activity的Mapping标签页操作:
- 找到目标表的
pipelineid列,点击映射值输入框,选择Add dynamic content,输入@pipeline().PipelineId - 找到
source_filename列,同样添加动态内容,比如@activity('Copy Data').Input.FileName(获取当前复制的文件名) - 确保其他CSV列与目标表列一一映射。
3. 验证并调试
- 保存配置后触发管道调试,若仍有错误,检查:
- 目标SQL表的列类型是否与源CSV列匹配(比如嵌套JSON列需设为
NVARCHAR(MAX)) - 列映射是否完全对应,无遗漏或多余项
- 目标SQL表的列类型是否与源CSV列匹配(比如嵌套JSON列需设为
内容的提问来源于stack exchange,提问作者CM379
相关产品推荐
相关产品推荐

