无论创建了多少个 blob,如何只执行一次管道? (Azure 数据工厂)

How to execute a pipeline just once no matter how many blobs are created? (Azure Data Factory)

我创建了一个每次创建 blob 时都由触发器执行的管道,问题是进程需要同时上传多个文件的场景,当它发生时,管道执行为是 blob 数量的很多倍,这会导致数据错误。我试图在主管道中配置复制数据 Activity 以复制创建的每个 blob,但由于此管道位于第一个管道内,因此它也会执行多次。

预期结果是pipeline只执行一次(不管创建多少blob)复制数据activity,能够复制文件夹中的所有blob .

这是我的管道和触发器配置:

下面的复制数据配置:

我已经尝试了几个月,这是我的另一个尝试:

Microsoft Answers

你能告诉我我做错了什么吗?

您可以根据 属性 Filter by last modified 过滤副本 activity 来源,您可以在其中指定 UTC 格式的开始时间和结束时间。

你可以试试这个Incrementally copy new and changed files based on LastModifiedDate by using the Copy Data tool

或...

此处根据您的情况,仅提及开始时间。

  1. 这个开始时间只不过是最后一次执行触发管道 运行!您可以使用 REST API 调用 Trigger Runs - Query By Factory.
  2. 获取触发管道 运行 详细信息
  3. 现在您可以选择查询最近 x 小时内执行的 运行 或根据您在存储中创建文件的频率来确定最后一天是否安全。
  4. 接下来,从这个结果中仅收集 triggerRunTimestamp 并附加到数组变量。
  5. 使用函数查找最大或最后 运行 时间。将此时间设置为 UTC 中的 StartTime,用于复制 activity 源过滤器,如开头所述。

如果可行,我可以旋转一个示例管道。

为什么要将事件触发器映射到创建和上传所有文件的原始路径源? 你不能在最后创建一个带有虚拟文件的虚拟 blob 路径,以便在所有文件都上传后有一个最终触发器来解决这个问题吗?

注意:这就是我们管理它的方式:)但不幸的是生成了一个冗余文件