我有点麻烦。我有一个固执的客户,他想从网络浏览器上传大约5gb的csv文件。该文件的最终目标是到达SQL Server,但我决定首先将其放入blob中,然后让一个进程从blob中读取并将其写入表。
为了使事情变得更复杂,我需要在开始将文件上传到blob之前验证文件结构(即文件格式、列数等(是否准确。如果这些都不正确,我必须让用户知道文件上传无法完成。
为了达到这些要求:
-
用户将从UI上传文件,我们的代码首先检查文件格式(列名、文件扩展名等(是否正确,然后将文件流式传输到blob存储。
-
一旦文件在blob上传,我想使用azure函数,它将读取每10K行,并通过转到表a验证数据是否正确,然后将数据插入表B。如果某些数据不准确,它将把数据行写入blob中的另一个目录供用户下载。我将重复这个过程,直到整个文件存储到表B中。
然而,我很困惑是采取上述2种方法还是使用第3种方法
- 使用Azure数据工厂并创建一个管道以从blob获取文件并将其放入暂存表中。一旦它在暂存表中可用,我需要通过用另一个表验证数据来验证数据,然后将有效记录插入目标表中。最后,无效记录将被写入第三个表(错误表(,并将端点提供给用户以下载表中的内容
我不知道是用第二种方法还是第三种方法。请建议哪一个可能更快或不太可能出现性能问题。
如果你们能分享对整体方法的评论,那就太好了。
非常感谢
建议使用Azcopy工具从本地或云中上传文件(使用此命令行工具可以轻松地将数据复制到Azure Blob、Blob文件和表存储存储中,并从中复制Blob,从而获得最佳性能。(Azcopy支持并发性和并行性,并能够在中断时恢复复制操作。它为上传、下载更大的文件提供了高性能。请考虑将此库用于较大的文件。
若要将数据摄入系统,请使用Azure数据工厂、存储资源管理器、AzCopy工具、PowerShell或Visual Studio。如果您使用文件上载功能要导入大于2 GB的文件,请使用PowerShell或Visual StudioAzCopy支持最大文件大小为1TB,并自动拆分超过200 GB的数据文件。
您可以使用Azure数据工厂中的自定义活动来运行Powershell脚本。在Powershell脚本中,您可以使用Azcopy命令上传Blob存储中的文件。