将本地文件移动到BLOB(复制/验证/删除)的最佳实践

时间:2019-07-03 15:19:26

标签: azure-data-factory-2

我在客户端计算机(MS Server 2012R2)上安装了本地Integration运行时,可以访问那里的本地文件夹。另一个程序每隔5分钟定期吐出.csv文件1个。 我需要将它们照原样复制到Blob存储(二进制文件很好)。成功复制它们后,我需要返回并仅删除那些已上传的文件,即不要删除自管道运行开始以来可能已添加的任何文件。

我知道ADF中没有“移动”活动,并且我已经看到了一些不同的方式将复制和删除活动与ForEach结合在一起以进行移动,但是不确定最佳实践。

我正在尝试在UI中完成所有这些操作(无代码),并且进行简单的文件复制或删除活动没有问题-我只是不确定如何将它们与ForEach链接在一起-甚至连最好的方法?

预期的结果是处理没有文件要复制的情况,但是如果有ADF,则应复制所有可用文件,然后仅删除成功复制的文件。

1 个答案:

答案 0 :(得分:0)

提供两种方式供您参考:

第一个,如您在问题中提到的,使用 Azure Data Factory

您可以使用复制活动将数据从本地文件夹传输到Azure Blob存储中。然后使用Delete Activity删除本地文件夹中的文件。

按计划运行整个管道,按照此guide按照文件的最新修改时间过滤文件。在复制活动和删除活动之间,使用if-condition activity控制传输过程。如果复制活动已成功执行,则删除操作将继续。

第二个,使用 Az复制

Az副本可以将本地数据迁移到云存储。 (详细的link

下面的示例命令将数据从本地目录递归复制到Blob容器。虚拟SAS令牌附加到容器URL的末尾。

azcopy cp "C:\local\path" "https://account.blob.core.windows.net/mycontainer1/?sv=2018-03-28&ss=bjqt&srt=sco&sp=rwddgcup&se=2019-05-01T05:01:17Z&st=2019-04-30T21:01:17Z&spr=https&sig=MGCXiyEzbtttkr3ewJIh2AR8KrghSy1DGM9ovN734bQF4%3D" --recursive=true

您仍然可以在计划中运行az copy命令:https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-migrate-on-premises-data?tabs=linux#create-a-scheduled-task

此外,您可以参考此link来了解用于数据传输的多个Azure解决方案。