如何在Azure Data Factory的两个复制活动间传递动态文件名?
在Azure Data Factory中复用动态生成的文件名
有两种可靠的方法可以避免重复生成文件名导致的不一致问题,具体如下:
方法1:用管道变量提前存储文件名(推荐)
这种方式最可控,全程复用同一个预先生成的文件名:
- 打开管道的「变量」面板,新建一个字符串类型的变量,命名为
DynamicFileName - 在第一个Copy活动之前,添加一个「Set Variable」活动,将文件名表达式赋值给变量:
值:
@concat('parking_', formatDateTime(utcnow(), 'yyyy-MM-ddTHH:mm'), '.json') - 修改第一个Copy活动的接收器文件名,改为引用变量:
@variables('DynamicFileName') - 第二个Copy活动的源数据集,同样用
@variables('DynamicFileName')指定要读取的文件名
方法2:读取第一个Copy活动的输出属性
如果不想额外添加Set Variable活动,可以直接读取第一个Copy活动执行后返回的实际写入文件名:
- 保持第一个Copy活动的原有文件名表达式不变
- 第二个Copy活动的源数据集文件名,使用表达式引用第一个活动的输出:
若为单文件写入,用:
@activity('你的第一个Copy活动名称').output.writeFiles[0].name
部分场景下也可以用:@activity('你的第一个Copy活动名称').output.firstRow.fileName
注:可先测试运行一次管道,查看第一个Copy活动的「输出」面板,确认具体的属性路径
两种方法的优势
不管用哪种方式,都能确保两个活动使用完全相同的文件名,彻底避免因两次调用utcnow()的时间差(哪怕是1分钟)导致的文件找不到问题。
内容的提问来源于stack exchange,提问作者tsorn
相关产品推荐
相关产品推荐

