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

Azure Data Factory删除活动能否用^运算符实现反向通配筛选?

可行解决方案

方案一:Get Metadata + Filter + Delete 批量处理(推荐)

这是ADF原生的高效替代方案,能解决循环逐个删除的高成本问题,步骤如下:

  • 添加Get Metadata活动,关联目标存储路径的数据集,勾选Child items选项,一次性获取路径下所有文件的元数据(包含文件名、路径等信息)。
  • 添加Filter活动,输入源选择Get Metadata的输出:@activity('Get Metadata 1').output.childItems,筛选条件设置为:
    @not(contains(item().name, '2024-04-15'))
    
    这个表达式会筛选出所有文件名不含2024-04-15子串的文件。
  • 添加Delete活动,同样关联目标存储的数据集,切换到文件列表模式,在「文件路径列表」中输入:
    @map(activity('Filter 1').output.value, item().name)
    
    (如果数据集配置的是存储根路径,需要拼接子路径的话,改成@map(activity('Filter 1').output.value, concat('/目标子路径/', item().name)))
    运行管道后,Delete活动会批量删除筛选后的所有文件,全程仅需3个活动,大幅降低成本。

方案二:Azure Function 辅助处理(适合超大量文件)

如果文件量远超1000个,ADF原生活动处理有压力,可以用Azure Function辅助:

  • 用Python或C#编写Function,调用Azure存储SDK(比如Azure.Storage.Blobs),接收存储容器、目标路径、排除子串作为参数。
  • 在Function逻辑中遍历指定路径下的所有文件,筛选出不含目标子串的文件并批量删除。
  • 在ADF中添加Azure Function活动,传入对应的参数触发执行即可。

为什么之前的通配符方案失效?

ADF数据集的通配符仅支持基础的*(匹配任意多字符)、?(匹配单个字符),以及用^^转义实际文件名中的^字符,不支持正则表达式的负向断言等复杂语法,所以你写的``*^(?!.2024-04-15).`会被判定为非法转义,导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:42:16