Azure 数据工厂仅从 Blob 存储中检索新的 Blob 文件



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

我会在这个答案之前改变你的方法可能是有道理的......

鉴于您所描述的,您的选择相当有限。 一种方法是让计划的作业维护它已存储到 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,假设你可以控制这一点。

请使用CloudBlobContainer.ListBlobs(null, true, BlobListingDetails.Metadata),并为每个列出的blob检查CloudBlob.Properties.LastModified。

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

但是,随着时间的推移,Blob 位置将包含大量文件,因此,预计作业将开始花费越来越长的时间(在某个点花费超过 15 分钟的时间之后),因为它每次都会循环访问每个文件。

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

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

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

相关内容

  • 没有找到相关文章