【问题标题】:BlobCreated event only when a blob is completely commited仅在完全提交 blob 时发生 BlobCreated 事件
【发布时间】:2021-09-23 07:10:49
【问题描述】:

我想通过 Arm 部署创建一个 EventGrid,以便在添加容器中的所有 blob 后摄取到 ADX 集群。 (这是每个特定时间间隔创建的一堆 blob)

我想确保仅在创建 blob 并且其内容已完成写入时引发事件。 (不仅仅是“blob 创建的文件”)。

存储是 Data Lake Storage V2,这意味着它具有“分层命名空间”

我在看这个链接:

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

我对以下内容感到困惑: Blob REST API 的事件列表部分和 Azure Data Lake Storage Gen 2 REST API 的事件列表部分。

哪一个与我相关,我可以实现我的目标,或者有什么方法可以绕过它来实现我的目标??

【问题讨论】:

    标签: azure-storage azure-blob-storage azure-data-factory azure-logic-apps azure-eventgrid


    【解决方案1】:

    我见过各种规避这种情况的方法,有的好,有的坏。只是取决于什么适合你。

    1. 您可以在第一次触发 BlobEvent 触发器时等待指定的时间。如果您有一些小文件,您知道这些文件的时间永远不会超过 2 或 3 分钟,那么这是一个选项。如果您不知道 Blob 是否需要 5 分钟或 30 分钟才能完全加载,那么这是一个糟糕的选择。我个人不喜欢这个选项,但它适用于某些人。

    2. 使用流或直接复制暂存 Blob,然后通过在完全提交之前不会触发触发器的直接复制将它们移动。我个人喜欢这种方法,因为它允许将 Blob 移动到 Staging 中,然后在它们上设置元数据,然后在它们上执行 Blob Copy 命令以复制包含的元数据。 (仅供参考,ADF 具有在复制活动中设置元数据的功能,但同样的原则也可以应用于 Azure Functions、Powershell、C#,以及任何将 blob 放在那里的代码。)

    1. 理论上,您可以在 ADF 中使用 UNTIL 活动来检查传入 Blob 的状态,一旦它不再增长、具有特定状态、可能是特定的最后修改(类似这些),那么您可以继续你的管道。这种方法我还没有测试过,但我希望它可以持续获取文件的元数据并使用它来确定管道是否已准备好继续。

    【讨论】:

    • 我想我会使用一个版本的等待,这只是意味着我会使用计划触发器,而不是在两次运行之间等待 1 小时,我会等待 1:10,因为我知道不超过 7 分钟延迟。
    • 如果您知道 Blob 预计何时开始加载,则可以使用计划触发器,但如果您不知道 Blob 应该何时开始加载或者它是随机时间,则可以使用存储事件触发器是要走的路,只需让 WAIT 活动成为您管道中的第一个活动,在您的情况下等待 7-10 分钟听起来像。很高兴我能帮上忙!
    • 如果它满足您的需求,请接受作为答案!谢谢
    【解决方案2】:

    我做了一个测试,看看数据是否真的没有从存储类型被摄取到集群中,并且确实没有数据被摄取。 这是 ADF 的复制活动。 我假设是因为该事件仅触发了 blob 创建。 我可能会使用 ADF。

    【讨论】:

      猜你喜欢
      • 2022-10-07
      • 2011-07-13
      • 2011-09-03
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多