计划活动如何在Azure数据工厂中运行

时间:2016-04-09 15:48:39

标签: azure azure-data-factory

我正在尝试掌握数据工厂的概念,以了解计划活动的工作原理,但并不是很了解。

假设我的工作流程如下:

  1. 我在客户端的计算机上运行了一个代理程序(内置为Windows服务),该计算机计划在每天凌晨1点从SAP源提取数据,然后将其放在Azure blob存储上。代理只是尝试仅提取昨天的数据。示例:今天凌晨1点(4月9日)运行的代理仅在4月8日提取整个数据。此代理与Data Factory无关。

  2. 假设代理需要大约30分钟才能获取每日数据(4月8日)并将其放入blob存储中,这可能或多或少取决于数据的大小。

  3. 我有一个工厂管道(从2016-04-08T01:30:00Z永远活动 ),它使用blob存储作为输入数据集和1个计划活动将数据从blob存储复制到数据库中。

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

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

    计划活动安排为每日频率:

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

    因此,根据工作流程,我的问题是:

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

    2. 如果数据在1:30之后没有准备好,那么此时活动仍然在运行怎么办?

3 个答案:

答案 0 :(得分:1)

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

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

我希望这有帮助!

答案 1 :(得分:1)

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

希望这有帮助。

答案 2 :(得分:0)

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

对于此工作流程,解决方案是根据时间安排输入数据集。如果您确信数据提取将在凌晨1:30完成,那么您可以安排作业每天凌晨1:30运行(或者稍后,如果提取运行很长时间。)这样,将管道的开始时间设置为“2016-04-08T01:30:00Z”(对于UTC时间。)您应该能够以这样的方式创建输入数据集:如果数据提取,作业将失败尚未完成,这将允许您注意到失败并重新运行它。活动将在您安排时开始,并将尽快完成。 See this page for details on moving data between Azure Blob and Azure SQL.您的工作流程看起来与该链接上的示例非常相似,只有您的频率为“日”。

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