1

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

假设我的工作流程如下:

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

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

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

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

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

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

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

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

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

  2. 如果 1:30 后数据还没有准备好,此时 Activity 还在运行呢?

4

3 回答 3

1

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

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

我希望这有帮助!

于 2016-04-18T11:33:05.607 回答
1

如果我正确理解了您的特定场景,并且您有权修改 Windows 服务的代码,您可以让您的 Windows 服务在完成后启动 ADF 管道。我正在做类似这样的事情,我需要控制我的管道何时开始。我有一个本地工作从几个数据源中提取数据并将其放入一个 azure sql db。一旦完成,我需要开始我的管道,但是我无法确切知道我的工作何时完成。所以我在本地工作的最后一步是启动我的 ADF 管道。我在这里写了一篇关于如何做到这一点的文章- 从 .net 开始一个 azure 数据工厂管道

希望这可以帮助。

于 2016-04-22T18:48:18.083 回答
0

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

对于此工作流,解决方案是根据时间安排输入数据集。如果您确信数据提取将在凌晨 1:30 之前完成,那么您可以安排作业在每天凌晨 1:30 运行(或者可能稍晚一点,以防提取运行时间较长)。这样,将管道的开始时间设置为“2016-04-08T01:30:00Z”(对于 UTC 时间)。您应该能够以这样一种方式创作输入数据集,即如果数据提取,作业将失败尚未完成,这将允许您注意到失败并重新运行它。该活动将在您安排时开始,并将尽快完成。有关在 Azure Blob 和 Azure SQL 之间移动数据的详细信息,请参阅此页面。您的工作流程看起来与该链接上的示例非常相似,只是您的频率为“日”。

根据本地数据的存储方式,可能值得考虑直接从本地源移动数据,绕过 Azure Blob。使用数据管理网关支持这一点,如此处所述。不幸的是,我对 SAP 并不熟悉,因此无法提供更多相关信息。

于 2016-04-13T01:52:48.237 回答