Azure Data Factory复制多文件到SFTP时按规则重命名的实现问题
Azure Data Factory 存储文件复制到SFTP并按规则重命名实现方案
Get Metadata活动的
Child Items选项仅在关联的数据集指向文件夹时才会显示,若数据集配置为指定单个文件,该选项会自动隐藏。
具体实现步骤
- 步骤1:调整源数据集配置,将Azure Storage对应的源数据集路径设置为待复制文件所在的父文件夹,不指定具体文件名。重新打开Get Metadata活动配置页,即可在字段列表中找到
Child Items选项,勾选后活动运行时会输出该文件夹下所有文件的名称、类型等属性。 - 步骤2:添加For Each活动,在活动的
Items配置栏输入表达式@activity('Get Metadata1').output.childItems,将上一步获取的文件列表作为循环项。可按需勾选「顺序执行」控制文件处理顺序,不勾选则默认并行处理。 - 步骤3:在For Each活动内部添加Copy活动,分别配置源和目标端:
- 源端:沿用调整后的Azure Storage数据集,在源设置的「文件名」栏输入表达式
@item().name,指定每次循环读取当前遍历到的文件 - 目标端:选择已配置的SFTP数据集,在目标设置的「文件名」栏输入动态表达式生成符合规则的新文件名,你提供的命名规则对应的表达式如下:
@concat('PPP.AAA01.TSTCCC1.', if(contains(item().name, 'Data'), 'Data', 'Layout'), '.D', substring(item().name, add(length(item().name), -6), 6))
- 源端:沿用调整后的Azure Storage数据集,在源设置的「文件名」栏输入表达式
替代方案
若调整数据集后仍无法正常使用Get Metadata活动,可使用Lookup活动替代实现文件列表获取:将Lookup活动的源数据集指向存储文件夹,设置为返回所有行,输出结果可直接作为For Each活动的循环项,功能与Get Metadata的Child Items完全一致。
内容的提问来源于stack exchange,提问作者Eric Clinkenbeard
相关产品推荐
相关产品推荐

