0

我有点情况。我有一个顽固的客户,他想从网络浏览器上传大约 5gb 的 csv 文件。该文件的最终目标是访问 SQL Server,但我决定先将其放入 blob,然后有一个进程从 Blob 读取它并将其写入表。

更复杂的是,在开始将文件上传到 blob 之前,我需要验证文件结构(即文件格式、列数等)是否准确。如果这些不正确,我必须让用户知道文件上传无法完成。

要达到这些要求:

  1. 用户将从 UI 上传文件,我们的代码首先检查文件格式(列名、文件扩展名等)是否正确,然后将文件流式传输到 blob 存储。

  2. 一旦将文件上传到 blob,我正在考虑使用 azure 函数,该函数将读取每 10K 行并通过转到表 A 来验证数据是否正确,然后将数据插入表 B。如果某些数据是不准确,它会将数据行写入 blob 中的另一个目录中供用户下载。我将重复此过程,直到将整个文件存储到表 B 中。

但是,我很困惑是采用上述 2 方法还是使用第 3 方法

  1. 使用 Azure 数据工厂并创建管道以从 blob 获取文件并将其放入临时表中。一旦它在暂存表中可用,我需要通过使用另一个表验证数据来验证数据,然后将有效记录插入到目标表中。最后,无效记录将被写入第三张表(错误表),并将端点提供给用户下载表的内容。

我很困惑是使用第二种方法还是第三种方法。请建议哪一个可能很快或不太可能出现性能问题。

如果您可以分享对整体方法的评论,那就太好了。

太感谢了

4

1 回答 1

0

建议使用Azcopy工具从本地或云上传文件(使用此命令行工具可以轻松地将数据复制到 Azure Blob、Blob 文件和表存储存储中并获得最佳性能。)AzCopy 支持并发和并行性,以及在中断时恢复复制操作的能力。它为上传、下载更大的文件提供了高性能。请考虑将此库用于更大的文件。

要将数据引入系统,请使用 Azure 数据工厂、存储资源管理器、AzCopy 工具、PowerShell 或 Visual Studio。如果您使用文件上传功能导入大小超过 2 GB 的文件,请使用 PowerShell 或 Visual Studio。AzCopy 支持的最大文件大小为 1 TB,并自动拆分超过 200 GB 的数据文件。

可以使用Azure 数据工厂中的自定义活动来运行 Powershell 脚本。在该 Powershell 脚本中,您可以使用 Azcopy 命令将文件上传到 Blob 存储中。

于 2021-11-15T09:45:51.877 回答