嵌套在 Azure 数据工厂 V2 中的每个活动

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

我尝试使用两个 forEach 活动来迭代文件夹的子文件夹,并使用参数来获取子文件夹的元数据。我有 forEach1 和 forEach2 及其自己的项目数组。在第二个 for 循环中,我需要在 Metada 活动中组合两个 for 循环的 item() 来访问我的数据集,例如 @item1()@item2()。这可能吗?

enter image description here

azure azure-data-factory
3个回答
9
投票

不允许嵌套 foreach 活动。但是您可以在 foreach 活动中使用执行管道活动。在嵌套管道中,您可以有另一个 foreach。


0
投票

这是可能的,但第二个 ForEach 活动需要位于第一个活动内,而不是管道中的另一个活动。

正如您现在所拥有的,第一个 ForEach 将运行直到完成,然后第二个 ForEach 将启动,并且您无法访问第一个 ForEach 中的项目。

希望这有帮助!


0
投票

我重现了这个问题。请参阅下面的详细解释。在 RAW 容器中,我有一个主文件夹“manager”,其中包含一些“.txt”文件,在“manager”文件夹内,我有几个子文件夹“employee1”、“employee2”、“employee3”等。在子文件夹内,我有几个'.txt' 文件,例如。

范围:将文件从主文件夹和子文件夹移动到不同的容器“Culated”

enter image description here

第 1 步: 由于 ADF 不支持嵌套的 For Each 活动,因此我们需要有 2 个管道(主管道和子管道)。在主管道中添加“获取元数据”活动,读取主文件夹中存在的文件和文件夹。将参数添加为“子项目”以便读取所有项目。

enter image description here

第 2 步: 添加 2 个过滤器活动。第一个过滤器活动是过滤文件,第二个过滤器活动是过滤文件夹。

项目:

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

读取txt文件的条件:

@and(equals(item().type,'File'),endswith(item().name,'.txt'))

读取文件夹的条件:

@equals(item().type,'Folder')

enter image description here

第 3 步: 将“For Each”活动添加到 Filter Activity 的输出以迭代 txt 文件,并在“For Each”活动内添加“Copy”活动,将文件从原始容器复制到 Curated 容器.

enter image description here

对于每个设置:

@activity('Filter1').output.value

添加源和接收器设置。 复制活动源设置:

enter image description here

第 4 步: 通过添加“获取元数据”活动来创建子管道以读取子文件夹,并将“获取元数据”活动的输出连接到“对于每个”以迭代子文件夹中存在的文件。

enter image description here

enter image description here

子管道复制活动: enter image description here

第 5 步: 将“对于每个”活动添加到第二个筛选器活动的输出以迭代子文件夹。在“For Each”活动内添加“执行管道”活动以迭代子文件夹。

enter image description here

整体主管道设计:

enter image description here

希望以下步骤有助于了解如何在 ADF 中添加嵌套的“For Each”。

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