数据工厂-数据湖文件创建的事件触发器触发两次

时间:2019-11-06 17:47:42

标签: azure-data-factory-2

我正在Azure Data Factory V2中开发管道。它具有非常简单的复制活动。将文件添加到Azure Data Lake Store Gen 2中时,管道必须启动。为此,我在创建的Blob上创建了一个附加到ADLS_gen2的事件触发器。然后将触发器分配给管道,并将触发器数据@triggerBody()。fileName关联到管道参数。

要对此进行测试,我正在使用Azure Storage Explorer并将文件上传到Data Lake。问题在于,Data Factory中的触发器被触发了两次,导致管道被启动了两次。第一条管道按预期完成运行,第二条仍在处理中。

有人遇到这个问题吗?我试图删除DF中的触发器并创建一个新触发器,但结果与新触发器相同。 enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

我自己也遇到同样的问题。

将文件写入ADLS v2时,最初会有一个CreateFile操作和一个FlushWithClose操作,它们都触发Microsoft.Storage.BlobCreated事件类型。

https://docs.microsoft.com/en-us/azure/event-grid/event-schema-blob-storage

如果要确保仅在完全提交块Blob时才触发Microsoft.Storage.BlobCreated事件,请为FlushWithClose REST API调用过滤该事件。仅在将数据完全提交到Block Blob之后,此API调用才会触发Microsoft.Storage.BlobCreated事件。

https://docs.microsoft.com/en-us/azure/event-grid/how-to-filter-events

您可以通过导航到Azure门户中的“事件订阅”并选择正确的主题类型(存储帐户)以及订阅和位置来筛选出CreateFile操作。完成后,您应该能够看到触发器并更新其上的过滤器设置。我删除了CreateFile。

答案 1 :(得分:0)

在“触发器”定义上,将“忽略空的斑点”设置为“是”。

@dtape的注释可能是在下面发生的,切换此忽略空设置将有效地过滤掉“创建”部分(而不是写入的数据部分)。

这为我解决了这个问题。