如何在Azure Data Factory复制活动中传递基于日期的动态文件名?
基于当前日期从SFTP复制ZIP文件的正确做法
为啥会失败
从错误提示能看出来,你写的日期表达式没被正确解析,导致SFTP找不到对应的文件,大概率是这俩问题:要么日期格式和实际文件名完全不匹配,要么变量/表达式的写法不符合工具要求。
一步步解决
1. 先确认文件命名规则
先盯死SFTP上ZIP文件的命名格式,比如是data_20240520.zip(年月日连写无分隔符)还是data_2024-05-20.zip(带横杠),必须保证你生成的日期字符串和这个格式完全一致,差一个字符都不行。
2. 用对应工具的正确写法生成日期文件名
根据你使用的工具,选对应的表达式写法:
- Azure Data Factory:在文件名栏使用动态内容,输入
concat('data_', formatDateTime(utcNow(), 'yyyyMMdd'), '.zip');如果文件是按本地时间命名,把utcNow()替换为convertTimeZone(utcNow(), 'UTC', 'Asia/Shanghai')(替换为你的实际时区) - WinSCP脚本:直接用内置时间变量,比如
get /remote/folder/data_%TIMESTAMP#yyyyMMdd%.zip /local/save/path/ - SSIS:新建字符串变量,表达式写
"data_" + (DT_WSTR,4)YEAR(GETDATE()) + RIGHT("0" + (DT_WSTR,2)MONTH(GETDATE()),2) + RIGHT("0" + (DT_WSTR,2)DAY(GETDATE()),2) + ".zip",再在SFTP源组件中引用该变量
3. 配置正确的SFTP路径
确保SFTP的完整路径无误,比如/sftp/backup/data_20240520.zip,不要遗漏文件夹层级,同时注意SFTP路径通常区分大小写,文件夹和文件名的拼写必须准确。
4. 验证表达式生成结果
先在工具内测试日期表达式的输出结果,和SFTP上实际存在的文件名对比,确认两者完全一致,包括大小写、分隔符等细节。
5. 检查权限与路径有效性
确认你的SFTP账号拥有目标文件夹的读取权限,避免因权限不足导致文件查找失败;同时再次核对路径,排除拼写错误。
避坑要点
- 不要直接在文件名输入框中手写未解析的函数,必须通过工具自带的动态变量/表达式功能插入日期逻辑
- 注意时区差异:如果文件是按本地日期命名,不要用UTC时间生成日期字符串,否则会出现日期不匹配的情况
- 严格匹配日期格式:文件用
yyyy-MM-dd格式就不要生成yyyyMMdd,格式差异会直接导致找不到文件
内容的提问来源于stack exchange,提问作者gaurav sharma
相关产品推荐
相关产品推荐

