计划 activity 在 Azure 数据工厂中的工作原理

How schedule activity works in Azure Data Factory

我正在尝试掌握数据工厂的概念以了解调度 activity 的工作原理,但真正了解的并不多。

假设我的工作流程如下:

  1. 我在客户端的机器上有一个代理(构建为 Windows 服务)运行,它计划每天凌晨 1 点从 SAP 源中提取数据,然后将其放入在 Azure blob 存储上。代理只是尝试仅提取昨天的数据。示例:代理 运行 今天(4 月 9 日)凌晨 1 点仅提取 4 月 8 日的全部数据。此代理与数据工厂无关。

  2. 假设agent获取每日数据(4月8日)并将其放入blob存储中需要大约30分钟,根据数据量的不同,可能或多或少。

  3. 我有一个 Factory Pipepine(从 2016-04-08T01:30:00Z 起活跃 forever),它使用 blob 存储作为输入数据集,并且1 个计划 activity 将数据从 blob 存储复制到数据库。

输入数据集的可用性选项作为每日频率:

"availability": {
  "frequency": "Day",
  "interval": 1
}

计划 activity 被安排为每日频率:

   "scheduler": {
      "frequency": "Day",
      "interval": 1
    }

所以,根据工作流程,我的问题是:

  1. 1:30AM 之后,代理完成从 SAP 中提取数据并将其作为输入数据集放入博客存储中。数据工厂如何知道 4 月 8 日的数据切片已为数据工厂准备好。

  2. 如果1:30之后数据还没有准备好,此时activity还是运行怎么办?

据我所知,Azure 数据工厂目前不支持通过创建或更新 blob 来触发管道。

对于此工作流程,解决方案是根据时间安排输入数据集。如果您确信数据提取将在 1:30 AM 之前完成,那么您可以将作业安排在每天 运行 1:30 AM(或者稍晚一些,以防万一提取 运行s 长。)为此,将管道的开始时间设置为类似于“2016-04-08T01:30:00Z”(UTC 时间)。您应该能够创作输入数据集,如果数据提取尚未完成,作业将失败,这将使您注意到失败并重新运行它。 activity 将在您安排时开始,并将尽快完成。 See this page for details on moving data between Azure Blob and Azure SQL. 您的工作流程看起来与 link 中的示例非常相似,只是您的频率是 "Day"。

根据本地数据的存储方式,可能值得考虑绕过 Azure Blob 直接从本地源移动数据。 This is supported using a Data Management Gateway, as documented here. 很遗憾,我不熟悉 SAP,因此无法提供更多相关信息。

如果您在 Azure Blob 存储中有每天出现的数据,您可以尝试使用日期文件夹(例如:.../yyyy/MM/dd/...)。数据工厂可以检测特定日期文件夹是否存在,以确定特定日期的切片是否已准备好进行处理。如果数据工厂那天没有看到该文件夹​​,它将不会执行该切片的管道。

我还建议将提取过程作为数据工厂处理的一部分,这样如果提取失败,将不会进一步执行管道。

希望对您有所帮助!

如果我正确理解您的特定情况,并且您有权修改 windows 服务的代码,您可以让 windows 服务在完成后启动 ADF 管道。我正在做完全像这样的事情,我需要控制我的管道何时开始。我有一份本地工作,从几个数据源中提取数据并将其放入 azure sql 数据库中。一旦完成,我需要开始我的管道,但是我无法确切知道我的工作何时完成。因此,我本地工作的最后一步是启动我的 ADF 管道。我写了一篇关于如何做的文章 here - Starting an azure data factory pipeline from .net

希望对您有所帮助。