ADF管道中ADLS间CSV文件复制数据异常问题排查
ADF复制ADLS文件时数据异常(重复/行数缺失)的排查与解决
核心问题定位
你遇到的问题大概率是Copy Activity未动态绑定当前遍历的文件名,导致每次迭代都读取整个源文件夹的文件并合并写入,同时CSV格式配置不一致导致行数缺失。以下是具体排查和解决步骤:
1. 修正GetMetadata与Foreach的关联
- 确认GetMetadata活动仅获取文件:在
Field list中只勾选Child Items,并确保输出的childItems里仅包含目标CSV文件(无文件夹)。 - 验证Foreach的
Items参数为@activity('GetMetadata').output.childItems,确保遍历的是正确的文件列表。
2. 动态绑定源/目标数据集的文件名
这是解决数据重复的关键:
- 源数据集:进入数据集的
Connection标签,将File name设置为动态内容@item().name,确保每次Copy Activity只读取当前遍历的单个文件,而非整个文件夹的所有文件。 - 目标数据集:同样将
File name设置为动态内容@item().name,保证每个源文件对应写入同名的目标文件,避免覆盖或合并。
3. 统一CSV格式配置
解决行数缺失问题:
- 检查源和目标数据集的CSV格式设置,确保
First row as header选项保持一致(同时开启或关闭)。如果源文件包含表头,开启该选项后,ADF会将第一行识别为表头,不会计入数据行数;若目标数据集未开启,会导致表头被当作数据行,或者丢失一行数据。 - 关闭Copy Activity的
Skip incompatible rows选项(在Settings标签),避免ADF自动跳过行导致行数缺失。
4. 验证Copy Activity的运行细节
- 查看每个Foreach迭代中Copy Activity的运行日志,对比
Source data read和Destination data written的行数,确认与源文件实际行数匹配。 - 关闭Copy Activity的
Recursively选项(源设置中),避免读取源文件夹下的子文件夹内容。
5. 简化方案:直接批量复制(无需遍历)
其实不需要GetMetadata+Foreach的复杂流程,直接用单个Copy Activity即可完成批量复制:
- 源数据集指向
source文件夹,File name设为*(或留空)。 - 目标数据集指向
destination文件夹,Copy behavior选择Preserve hierarchy。 - 该配置会自动复制源文件夹下所有文件到目标文件夹,保持文件名和结构完全一致,避免遍历逻辑带来的错误。
内容的提问来源于stack exchange,提问作者Bindu
相关产品推荐
相关产品推荐

