Azure Data Factory仅从Blob存储中检索新的Blob文件

时间:2016-04-20 13:49:31

标签: azure azure-storage azure-data-factory

我目前正在将Azure Blob存储中的blob文件复制到Azure SQL数据库。它计划每15分钟运行一次,但每次运行时都会重复导入所有blob文件。我宁愿配置它,以便只有在任何新文件到达Blob存储时它才会导入。需要注意的一点是文件没有日期时间戳。所有文件都存在于单个blob容器中。新文件将添加到同一blob容器中。你知道如何配置吗?

3 个答案:

答案 0 :(得分:2)

我为这个答案做了序言,改变你的做法可能是有道理的......

鉴于您所描述的相当有限的选项。一种方法是让您的预定作业保持对已存储到SQL数据库中的内容的了解。您遍历容器中的所有项目并检查它是否已被处理。

容器有一个适用于此的ListBlobs方法。参考:https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/

foreach (var item in container.ListBlobs(null, true))
{
   // Check if it has already been processed or not
}

请注意,容器中blob的数量可能是此方法的问题。如果它太大,可以考虑创建一个每小时/每天/每周/等的新容器来保存blob,假设你可以控制它。

答案 1 :(得分:0)

请使用CloudBlobContainer。ListBlobs(null,true,BlobListingDetails。元数据)并检查每个列出的blob的CloudBlob。PropertiesLastModified

答案 2 :(得分:0)

我将使用Azure数据工厂中的自定义DotNet活动而不是复制活动,并使用Blob存储API(此处的一些答案描述了此API的使用)和Azure SQL API来执行仅您的副本新文件。

然而,随着时间的推移,你的blob位置会有很多文件,所以,期望你的工作开始时间越来越长(在花费超过15分钟之后),因为它每次都会遍历每个文件。

你能进一步解释一下你的情景吗?您是否有理由每15分钟将数据添加到SQL表中?你能增加每小时复制数据吗?此外,这些数据如何进入Blob存储?另一个Azure服务是将它放在那里还是外部应用程序?如果它是另一项服务,请考虑将其直接移至Azure SQL并删除Blob存储。

另一个建议是创建15分钟间隔的文件夹,如hhmm。因此,例如,示例文件夹将被称为“0515”。您甚至可以拥有年,月和日的父文件夹。这样,您可以将数据插入到Blob存储中的这些文件夹中。数据工厂能够读取日期和时间文件夹,并识别进入日期/时间文件夹的新文件。

我希望这有帮助!如果您能提供有关您问题的更多信息,我们很乐意为您提供进一步的帮助。