我如何获取 ADLS 中的日期文件夹列表并将它们传递给删除 activity?

How do i fetch the list of date folders in ADLS and pass them to delete activity?

我创建了一个只有一个 activity 的 ADF 管道,即删除 activity

下面是我的 ADLS 文件夹,这里 raw 是容器名称

 /raw/2022-05-28/omega/omega3.txt
 /raw/2022-05-28/demo/demo3.txt

/raw/2022-05-29/omega/omega2.txt
/raw/2022-05-29/demo/demo2.txt

/raw/2022-05-30/omega/omega1.txt
/raw/2022-05-30/demo/demo1.txt

我的目的是删除原始容器中除当前日期文件夹之外的所有文件夹

要删除的文件夹如下。

2022-05-28
2022-05-29

所以基本上一旦管道完成,只有以下文件夹和文件需要可用,因为它们属于当前日期

/raw/2022-05-30/omega/omega1.txt
/raw/2022-05-30/demo/demo1.txt

现在这是在做什么

  1. 为 ADLS 创建了一个数据集,并在文件夹中给出了容器名称和 2022-05-28
  2. 使用删除 activity 和 #1 数据集
  3. 创建了一个管道
  4. 运行 通过更改 2022-05-28 和 2022-05-29 的数据集文件夹手动两次管道

我不想像这样进行手动干预,我想根据 ADLS 中的旧文件夹数量自动传递文件夹日期数组,所以我如何获取 ADLS 中的文件夹列表以及如何提取该列表的日期文件夹并将该文件夹日期列表作为数组传递到我的删除管道

你能帮忙吗

由于手动删除每个文件夹改名不太理想,可以使用动态参数我们可以使用Get Metadataactivity来获取文件夹名称,For Each activity 遍历每个文件夹名称,If conditional activity 将文件夹名称与当前日期文件夹进行比较,最后 Delete activity 删除文件夹。

  • 创建一个指向包含所有这些文件夹(原始)的容器的数据集。为此数据集创建一个参数 folder_name 并将其值指定为 @dataset().folder_name

  • 使用Get Metadata activity引用刚刚用字段列表创建的数据集为child items。将 '/' 作为参数 folder_name 的值(我们不需要此 activity 中的动态参数值)。

  • 为每个 activity 创建一个。 get metadata activity 的输出被传递给每个 activity。在 For Each -> Settings 中,将项目字段值指定为 @activity(‘get_foldername’).output.childItems,其中 get_foldername 是获取元数据的名称 activity。

  • 在 For Each -> Activities 下,为此 activity 创建一个 activity。使用 If conditional activity,在活动选项卡下,构建一个表达式, @not(equals(utcNow('yyyy-MM-dd'), item().Name))(如果当前日期文件夹名称不等于每个 activity folder_name)。当这个条件为真时,我们需要执行deleteactivity(create deleteactivity for true case)

  • Deleteactivity中,使用最初创建的数据集,并将folder_name的值作为@item().Name(动态参数)。

发布并运行 管道。它将 运行 成功并删除除具有当前日期的文件夹之外的所有其他文件夹。这样您就可以从容器中删除不属于当前日期的文件夹。