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

Azure Data Factory复制管道:动态获取今日到达的带昨日日期的文件

在Azure Data Factory中动态获取带昨日日期的文件并复制到Blob

嗨,我来帮你搞定这个ADF里动态定位昨日日期文件的问题!根据你描述的场景——当日收到带昨日日期的TXT文件,要自动复制到Blob,我给你梳理几个关键步骤,都是实际项目里验证过的:

1. 精准生成昨日日期字符串(匹配文件名格式)

首先得生成和文件名完全一致的昨日日期格式(比如你例子里的2018-02-11),这里要注意时区问题,别踩坑:

  • 如果你的系统用UTC时间:直接用这个表达式生成昨日日期:
    @adddays(utcnow(), -1, 'yyyy-MM-dd')
    
  • 如果是中国标准时间(CST),一定要先转换时区再计算,不然UTC凌晨时段本地还是前一天,会导致日期错误:
    @adddays(convertTimeZone(utcnow(), 'UTC', 'China Standard Time'), -1, 'yyyy-MM-dd')
    

2. 拼接出完整的动态文件名

把固定的文件名前缀和生成的日期拼起来,就能得到目标文件的全名了:

@concat('filename_', adddays(convertTimeZone(utcnow(), 'UTC', 'China Standard Time'), -1, 'yyyy-MM-dd'), '.txt')

记得把filename_替换成你实际的文件名前缀哦。

3. 配置复制活动的源数据集

在你的Blob到Blob复制活动里,找到源数据集的配置项:

  • 选择“文件”作为源类型(别选文件夹,不然会复制整个文件夹的内容)
  • 在“文件名”字段,点击「添加动态内容」,粘贴上面的拼接表达式
    这样复制活动运行时,就会自动定位到那个带昨日日期的TXT文件。

4. 结合每日触发计划优化(更可靠)

如果你的管道是每日自动触发的,建议用触发的计划时间来计算日期,比utcnow()靠谱多了——毕竟如果管道运行延迟,utcnow()会变成当前实际时间,可能导致日期偏差:

@adddays(trigger().scheduledTime, -1, 'yyyy-MM-dd')

把这个日期拼到文件名里,就能保证每次触发都精准获取前一天的文件。

关于你提到的“昨日数据切片已运行”的补充

如果你的管道是基于时间切片的(比如做增量复制的切片),那得让切片时间和文件名日期对应上。比如2018-03-12的切片要处理2018-03-11的文件,这时候用切片的windowStart来计算:

@formatDateTime(adddays(pipeline().parameters.windowStart, -1), 'yyyy-MM-dd')

这样就能得到切片对应的昨日日期,完美匹配文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:10:45