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

Azure Data Factory复制活动:SFTP动态指定前一日文件未生效问题

解决ADF复制活动未按指定日期文件名筛选文件的问题

看起来你遇到的问题是Azure Data Factory复制活动没有仅复制你指定的前一天日期的CSV文件,而是拉取了整个SFTP文件夹的内容。我来帮你梳理下可能的原因和解决步骤:

可能的原因分析

  1. 数据集文件名配置未生效:如果你的SFTP源数据集的文件名字段没有正确绑定参数,或者误使用了通配符(比如*.csv),复制活动会默认匹配所有文件。
  2. 复制活动的复制行为设置错误:如果选了“复制文件夹”而不是“复制文件”,会直接同步整个文件夹的所有内容,忽略文件名参数。
  3. 时区导致的文件名不匹配:你用的utcnow()是UTC时间,如果SFTP上的文件是按本地时间命名的,可能会出现日期偏差,比如当前UTC是10月9日,但本地时间还是10月8日,导致生成的文件名和实际要找的文件不符(不过你说复制了10月9日的文件,这个可能性稍低,但也需要排查)。

分步解决方案

1. 检查SFTP源数据集的参数绑定

打开你的SFTP源数据集:

  • 确认文件名字段是绑定到了数据集参数,而不是硬编码的通配符。比如应该设置为@dataset().FileName,然后在数据集的“参数”页签添加一个名为FileName的字符串参数。
  • 确认文件路径是xyz/test,没有额外的通配符(比如xyz/test/*),否则会匹配路径下所有文件。

2. 验证复制活动的源配置

进入复制活动的“源”选项卡:

  • 确认复制行为选择的是“复制文件”,而不是“复制文件夹”。
  • 在“源数据集”的参数绑定区域,确保FileName参数正确关联到管道的参数值,比如填写@pipeline().parameters.FileName(假设你的管道参数叫FileName)。
  • 确认“文件列表”选项是“从数据集指定的文件/文件夹”,不要选“通配符文件”或“所有文件”。

3. 确认文件名表达式的正确性

你当前用的表达式是:

@concat('auto-miles-per-gallon',formatDateTime(addDays(utcnow(),-1),'yyyyMMdd'),'.csv')
  • 可以在ADF的调试模式下,查看管道运行时的参数值,确认生成的文件名是否是你预期的auto-miles-per-gallon20191008.csv。
  • 如果你的文件是按本地时间命名的(比如北京时间),需要把utcnow()转换为本地时区,避免日期偏差:
    @concat('auto-miles-per-gallon',formatDateTime(addDays(convertTimeZone(utcnow(), 'UTC', 'China Standard Time'),-1),'yyyyMMdd'),'.csv')
    

4. 调试验证

启动管道调试后,查看“输出”选项卡中的源数据集参数,确认传递的文件名是否正确。同时检查SFTP服务器上该文件名是否存在——如果文件不存在,正常情况下复制活动会报错,但如果你的配置有误(比如文件名留空),可能会默认复制所有文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:48:19