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

如何用Azure Data Factory复制活动迁移ADLS Gen1到Gen2时批量重命名文件夹?

在Azure Data Factory中实现Gen1到Gen2的文件夹结构转换(y=yyyy/m=MM/d=dd → yyyy/MM/dd)

要实现从Gen1的y=2022/m=08/d=01结构迁移到Gen2的2022/08/01结构,核心是利用ADF的动态内容提取日期片段,再配合批量遍历逻辑覆盖全年日期,具体步骤如下:

1. 基础配置:源与目标数据集

  • 源数据集(Gen1):
    配置文件夹路径为通配符格式y=*/m=*/d=*,开启递归选项,确保能读取目标文件夹下的所有文件。如果需要精确控制,也可以通过参数化路径配合后续循环使用。
  • 目标数据集(Gen2):
    暂不固定文件夹路径,后续在复制活动中用动态内容生成目标路径。

2. 批量遍历所有日期文件夹

要覆盖全年所有月份和日期,需要先获取Gen1中所有符合结构的文件夹,再逐个处理:

  • 添加Get Metadata活动:
    数据源选择Gen1数据集,路径设置为包含所有y=*文件夹的根目录,勾选子项选项,用于获取所有日期层级的文件夹列表。
  • 添加For Each活动:
    输入设置为@activity('Get Metadata').output.childItems,勾选Sequential(可选,避免并发过高导致的资源限制),循环遍历每个日期文件夹。

3. 复制活动中动态生成目标路径

在For Each活动内部添加Copy Data活动,配置如下:

  • 源设置:
    文件夹路径设为@item().name(item()代表Get Metadata返回的单个文件夹对象,name属性即为y=2022/m=08/d=01格式的路径),保持递归开启。

  • 目标设置:
    文件夹路径使用动态内容生成,推荐两种简洁方式:
    方式一:字符串替换法(最直观)

    @replace(replace(replace(item().name, 'y=', ''), 'm=', ''), 'd=', '')
    

    该逻辑会把路径中的y=、m=、d=逐一替换为空,直接得到2022/08/01。

    方式二:拆分截取法(更灵活,适合格式调整)

    @concat(
        split(item().name, '/')[0].substring(2),
        '/',
        split(item().name, '/')[1].substring(2),
        '/',
        split(item().name, '/')[2].substring(2)
    )
    

    通过split按/拆分路径,再用substring(2)截取等号后的日期片段,最后拼接成目标路径。

  • 覆盖设置:
    在复制活动的设置选项卡中勾选覆盖,确保目标已有文件会被更新。

4. 特殊场景处理

如果源文件夹存在单数字月份/日期(如m=8而非m=08),可以用formatNumber函数补零,确保目标路径格式统一:

@concat(
    split(item().name, '/')[0].substring(2),
    '/',
    formatNumber(int(split(item().name, '/')[1].substring(2)), '00'),
    '/',
    formatNumber(int(split(item().name, '/')[2].substring(2)), '00')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:36