有两个管道主管道和子管道。 在子管道中有一个 foreach 事件,它将文件作为输入并并行处理它们。 例如有4个文件,其中2个文件已成功处理并将数据加载到表中。那么,第3个文件处理失败,第4个文件处理成功。现在,当我重新触发主管道时,我只想处理第三个文件,而不是所有 4 个文件。 我们怎样才能实现这一目标。
我已经尝试过以下。
To move/delete the file once the processing is completed
但根据要求,我不应该移动/删除该文件。有人可以帮忙吗?
最佳答案
我创建了一个测试并成功实现了这一目标。我的总体想法是:使用 Lookup 事件从 sql 表中提取复制的文件名数组,然后对源文件名数组执行 Filter 操作。如果该文件名已存在于sql表中,则不会执行文件复制事件。它需要我们通过附加列将文件名添加到复制事件中的sql表中。
在我的sql表中,它看起来如下:
我声明了 3 个变量。
arr1
数组类型变量存储源文件名。filterArray
数组类型变量存储从sql表中复制的文件名数组。在查找事件中,我们可以使用此查询
select unique FileName from [dbo].[emp]
从sql表中获取复制的文件名数组。我将默认值
["emp.csv","emp2.csv","emp3.csv","emp4.csv"]
设置为变量的源文件名arr1
。然后进行Filter操作。项目:
@variables('filterArr')
,条件:@contains(item().FileName,variables('arrItem'))
,此item()
这里代表filterArray
数组中的每个元素。在 If 条件事件中,使用
@empty(activity('Filter1').output.Value)
确定此文件是否已被复制。
仅此而已。
关于azure - 当 ADF 中重新触发主管道时,如何仅处理每个事件中的失败文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67982071/