如何在 Azure 数据工厂触发时检查是不是正在上传某些文件(允许在 ADF 中上传时读取文件)

Posted

技术标签:

【中文标题】如何在 Azure 数据工厂触发时检查是不是正在上传某些文件(允许在 ADF 中上传时读取文件)【英文标题】:How to check if some file is being uploaded at the time of trigger in Azure Data Factory (allow reading files while uploading in ADF)如何在 Azure 数据工厂触发时检查是否正在上传某些文件(允许在 ADF 中上传时读取文件) 【发布时间】:2021-09-18 02:42:28 【问题描述】:

我在 Amazon S3 存储桶中有文件,我正在尝试使用 Azure 数据工厂中的复制活动将文件复制到 Azure Blob 容器。我在每小时命中 S3 存储桶的数据工厂管道上启用了一个翻转窗口每小时触发器。 ADF 管道不会复制上传到 S3 存储桶的文件。也无法在以后的触发器中跟踪文件。

Example:
Amazon S3 bucket 
Filename: HealthData.tar.gz
Upload in S3 bucket start time: 2:39 PM
Size: 200 GB
Upload in S3 bucket end time: 3:45 PM (Appox)

ADF Trigger Time(hourly) : 2:30 PM (but not tracked anything)

ADF Trigger Time(hourly) : 3:30 PM (but not tracked anything)

这里的问题是 ADF 无法跟踪 HealthData.tar.gz 文件,因为它仍在 S3 存储桶中上传并且没有被复制到 Azure Blob 存储

ADF 时间与上传时间发生冲突。 请帮助我解决 Azure 数据工厂中的问题(允许在 ADF 中上传时读取文件)。提前致谢

【问题讨论】:

如果你能提供更多你想要的信息,那将会很有帮助。听起来您正在尝试将文件从 Amazon S3 复制到 Azure Blob 存储,但当 ADF 尝试复制时,该文件实际上仍在 Amazon S3 中加载。这会在 ADF 中产生错误吗?我想它会的。如果您向我们提供这方面的详细信息,可能会有所帮助。否则我会告诉你我会怎么做。 @TrentTamura 管道没有失败,但它甚至没有跟踪文件,因为在调用 ADF 触发器时文件仍在 S3 存储桶中上传。你能帮我解决一下吗? 【参考方案1】:

根据您的示例,我认为该文件不会在下午 2 点被复制,但 ADF 应该能够在下午 3 点将数据从 Amazon S3 复制到 Azure Blob Store。

您可以通过在 ADF 中使用“获取元数据”活动来查看截至上一小时、一天、一周等的新文件来完成此操作。使用此列表(并希望您维护的日志包含您已加载的文件) 你可以确定存在哪些尚未加载到 Azure Blob 的新文件。管道看起来像这样: 这些屏幕截图应该为您提供一个起点。如果您对代码细节感到困惑,请告诉我。您需要在 Get Metadata from S3 上选择子项级别。祝你好运!

【讨论】:

感谢您的等待。我已经上传了截图,请你看一下。在我的要求中,我没有使用任何记录文件的文件日志。请你帮助我好吗。谢谢 如果您不使用文件日志,那么您应该使用@UtkarshPal-MT 建议,它可以监听 S3 存储系统并触发任何上传的新文件。这可能会触发您的 ADF 管道

以上是关于如何在 Azure 数据工厂触发时检查是不是正在上传某些文件(允许在 ADF 中上传时读取文件)的主要内容,如果未能解决你的问题,请参考以下文章

如果同时触发两次 Azure 数据工厂会发生啥?

如何基于 Azure 数据工厂中创建的 Blob 执行触发器?

当资源组上有删除锁时,如何使用 Powershell 停止 Azure 数据工厂的存储事件触发器?

如何在数据工厂管道中将路由传递给 Azure 函数(C#)http 触发器?

在 Azure 数据工厂复制活动中使用“附加列”时,如果源上已经存在该列,是不是会在接收端复制该列?

触发 Azure 数据工厂管道 - Blob 上传 ADLS Gen2(以编程方式)