如何使用 foreach activity 检查文件夹中是否存在多个文件?
How to check IF several files exist in a folder with foreach activity?
更新
我正在 Azure Blob 存储容器中上传 2 个文件(每个文件每周都有相同的文件名)。
只有这两个文件存在,我才想执行另一个管道。
所以我想做的是:
- 在 Azure blob 存储容器中创建一个空文件夹
- 上传这两个文件到这个文件夹
- 检查此文件夹是否存在以执行主管道。每个文件有两个触发器,我想用第二个触发器我会找到两个文件。
a) 获取元数据 activity
b) Foreach activity
c) If 条件:检查两个特定文件是否存在
- 如果它们存在,我将这两个文件移动到另一个文件夹并执行另一个管道。这样我就可以将文件夹留空以供下次上传。
这两个文件将始终具有相同的名称。示例:file_1.csv 和 file_2.csv
但我不知道这在技术上是否可行,以及在每个步骤中要做什么,我能做什么?
如果您只想检查文件是否存在以及文件的名称,Get Metadata activity
将 return 您在 [=12] 中添加的 Arguments
的值=].
例如,Exists
和 Child 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- 则触发。在这个新的触发管道中编写您的处理代码。
更新
我正在 Azure Blob 存储容器中上传 2 个文件(每个文件每周都有相同的文件名)。
只有这两个文件存在,我才想执行另一个管道。
所以我想做的是:
- 在 Azure blob 存储容器中创建一个空文件夹
- 上传这两个文件到这个文件夹
- 检查此文件夹是否存在以执行主管道。每个文件有两个触发器,我想用第二个触发器我会找到两个文件。 a) 获取元数据 activity b) Foreach activity c) If 条件:检查两个特定文件是否存在
- 如果它们存在,我将这两个文件移动到另一个文件夹并执行另一个管道。这样我就可以将文件夹留空以供下次上传。
这两个文件将始终具有相同的名称。示例:file_1.csv 和 file_2.csv
但我不知道这在技术上是否可行,以及在每个步骤中要做什么,我能做什么?
如果您只想检查文件是否存在以及文件的名称,Get Metadata activity
将 return 您在 [=12] 中添加的 Arguments
的值=].
例如,Exists
和 Child items
参数的输出低于 return。
现在,仅在 Foreach activity 中,您可以使用 Foreach activity
-> Settings
选项卡 Item
中的动态表达式捕获 Child items
值领域。
使用下面的表达式:
@activity('Get Metadata1').output.childItems
使用 ForEach activity
中的 IF Condition activity
而不是单独使用。并且根据子字段名称,您可以在 IF Condition activity
.
这就是我要滚动它的方式。该体系结构是二进制 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- 则触发。在这个新的触发管道中编写您的处理代码。