如何使用 foreach activity 检查文件夹中是否存在多个文件?

How to check IF several files exist in a folder with foreach activity?

更新

我正在 Azure Blob 存储容器中上传 2 个文件(每个文件每周都有相同的文件名)。

只有这两个文件存在,我才想执行另一个管道。

所以我想做的是:

  1. 在 Azure blob 存储容器中创建一个空文件夹
  2. 上传这两个文件到这个文件夹
  3. 检查此文件夹是否存在以执行主管道。每个文件有两个触发器,我想用第二个触发器我会找到两个文件。 a) 获取元数据 activity b) Foreach activity c) If 条件:检查两个特定文件是否存在
  4. 如果它们存在,我将这两个文件移动到另一个文件夹并执行另一个管道。这样我就可以将文件夹留空以供下次上传。

这两个文件将始终具有相同的名称。示例:file_1.csv 和 file_2.csv

但我不知道这在技术上是否可行,以及在每个步骤中要做什么,我能做什么?

如果您只想检查文件是否存在以及文件的名称,Get Metadata activity 将 return 您在 [=12] 中添加的 Arguments 的值=].

例如,ExistsChild items 参数的输出低于 return。

现在,仅在 Foreach activity 中,您可以使用 Foreach activity -> Settings 选项卡 Item 中的动态表达式捕获 Child items 值领域。

使用下面的表达式:

@activity('Get Metadata1').output.childItems

使用 ForEach activity 中的 IF Condition activity 而不是单独使用。并且根据子字段名称,您可以在 IF Condition activity.

内进一步分配 True 和 False 条件下的任务

这就是我要滚动它的方式。该体系结构是二进制 AND 的改编,即当 A 和 B 都为真时,则执行某些操作。现在,由于每个 A 和 B 都是独立的事件,并且一个可以先于另一个发生,我们需要在执行该过程之前等待另一个事件。

所以这里有两种方法:

#1

  • 您只有 file_2.csv 触发 ADF 管道。
  • 在 ADF 中以 UNTIL activity 开始;在此 运行 中等待 activity 说一分钟,然后 运行 GMD 抓取子项目,然后 运行 过滤 activity 以检查 file_1.csv 存在于子项数组中。如果是,则设置一个变量,直到条件
  • 编写您的处理逻辑,因为现在两个文件都可用

如果我们知道两个文件将在一段时间内彼此到达,则此方法很好。但是,当说已经过去 20 分钟而没有第二个文件到达时,我会加入一个逻辑来打破并错误地结束管道。

#2

  • 你可以通过 blob 事件触发文件名。请参阅 link 了解如何使用 @triggerBody().fileName 完成。所以对这两个文件都有触发器。
  • 接下来我会将此文件移动到一个新文件夹中。但在我这样做之前,我会检查目标文件夹中已经存在的文件数。如果它是 0 那么我的新文件将添加 file1- 前缀。 file1-原始文件名。如果目标已经有 1 个文件,则前缀为 file2-.
  • 在目标文件夹上有一个触发器,如果​​文件前缀为 file2- 则触发。在这个新的触发管道中编写您的处理代码。