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

Azure Data Factory中SFTP二进制复制如何保留原文件名?

解决Azure Data Factory复制文件保留原文件名的方案

核心思路

要保留原文件名,需先获取源文件的名称信息,再动态传递到接收端(Sink)的数据集配置中——直接用通配符批量复制时,ADF默认会生成随机文件名,无法保留原名。

具体步骤

1. 添加Get Metadata活动

  • 在管道中新增Get Metadata活动,关联复制活动所用的源数据集(保持源的通配符*.json配置,用于匹配所有目标文件)。
  • 在Get Metadata的字段列表里勾选Child items,以此获取所有匹配文件的详细信息(包含文件名)。

2. 添加For Each活动

  • 将Get Metadata活动的输出作为For Each的循环输入,设置循环项表达式为:@activity('Get Metadata活动名称').output.childItems。
  • 开启For Each的Sequential(顺序执行)选项,避免并发操作导致的文件冲突。

3. 在For Each内部配置复制活动

  • 源数据集调整:修改源数据集的文件名属性,用动态表达式绑定当前循环的文件名:@item().name。
  • Sink数据集调整:修改Sink数据集的文件路径,指定test子文件夹+原文件名,表达式为:@concat('test/', item().name)。
  • 注意:Sink数据集的文件名不要设置固定值或通配符,完全通过动态表达式绑定原文件名。

4. 变量配置(可选,替代直接引用item())

如果之前尝试用变量但操作有误,可按以下方式调整:

  • 定义字符串类型变量currentFileName。
  • 在For Each内新增Set Variable活动,将变量值设为@item().name。
  • 复制活动的Sink文件路径引用该变量:@concat('test/', variables('currentFileName'))。

关键配置代码示例

Get Metadata活动输出结构(供参考)

{
    "childItems": [
        {
            "name": "sample1.json",
            "type": "File"
        },
        {
            "name": "sample2.json",
            "type": "File"
        }
    ]
}

For Each循环项表达式

@activity('Get Metadata').output.childItems

Sink数据集文件路径表达式

@concat('test/', item().name)

常见误区

  • 直接用复制活动批量复制(源用通配符)时,Sink默认生成随机文件名,必须通过循环逐个复制才能保留原名。
  • 动态表达式需确保语法正确,item()仅在For Each循环内部有效,外部无法引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:33:10