是否可以在 Azure DataFactory 删除活动的通配符中使用 ^ 运算符?

问题描述 投票:0回答:1

在 Azure DataFactory 中,我想删除特定路径中不包含子字符串(即“2024-04-15”)的所有文件。

我设法通过循环活动来完成此操作,但当特定路径上的文件量很大(大约 1000 个)时,它的成本太高。

因此我想测试通配符,但我一直在尝试对正则表达式使用 not 运算符。

例如,如果我的路径有 3 个文件:

[lorem_2024-04-15.csv, lorem_2024-04-14_test.csv, lorem_2024-04-14.csv]
,我想删除除
lorem_2024-04-15.csv
以外的所有文件。我试过:

Wildcard file name: *^(?!.*2024-04-15).*

但是当尝试预览指向该路径的数据集的数据时:

The escaped character ^( is not recognized for wildcard filter (*, ?). 
If you want to use ^ in file name, specify ^^ to escape. Index: 2.

azure-data-factory wildcard
1个回答
0
投票

我设法通过循环活动来完成此操作,但是当特定路径上的文件量很大(大约 1000 个)时,它的成本太高。

如果您不想使用循环删除所需的文件,可以按照以下步骤操作:

使用数据流在一个文件中列出所有需要删除的文件:

使用通配符路径添加所需的数据集作为数据流的源,并在源设置中添加一列

filename
,如下图:

enter image description here

您将得到如下所示的文件路径:

enter image description here

接下来,使用聚合转换并在 filename 列上使用

groupBy
。在聚合部分中,创建一个新列
filenamecount
并计算样本的文件名 (
count(filename)
) 列。

enter image description here

它将给出所有不同的文件路径及其数量。接下来,使用选择转换并从流中删除额外的

filenamecount
列。

enter image description here

现在,对 filename 列使用

衍生列
转换,并在其中使用表达式
dropLeft(filename,1)
。这将删除每行中的起始
/

enter image description here

现在,使用过滤器转换并使用表达式

not(like(filename, "%2024-04-15%"))
排除包含
2024-04-15
的文件名。

enter image description here

接下来,取另一个

DelimitedText
数据集作为数据流的接收器,并给出文件路径。在这里,请确保删除第一行作为标题复选框。

enter image description here

配置接收器设置,如下所示:

enter image description here

执行数据流后,文件将生成一个filename.csv,其中包含所需的文件路径,如下所示:

enter image description here

在数据流活动之后,添加删除活动,选择数据集,然后选择文件列表并浏览 filename.csv 文件。

enter image description here

执行删除活动后,将删除除包含 2024-04-15 的文件之外的所有文件,如下所示:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.