在更短的时间内将 50GB CSV 文件 Azure Blob 加载到 Azure SQL DB - 性能

Posted

技术标签:

【中文标题】在更短的时间内将 50GB CSV 文件 Azure Blob 加载到 Azure SQL DB - 性能【英文标题】:Loading 50GB CSV File Azure Blob to Azure SQL DB in Less time- Performance 【发布时间】:2020-01-30 23:28:15 【问题描述】:

我正在使用 OPENROWSET 将 50GB CSV 文件Azure Blob 加载到 Azure SQL DB。 加载此文件需要 7 小时。 你能帮我想办法减少这个时间吗?

【问题讨论】:

这是一个 CSV 文件。在 Azure SQL 中存储这么多数据会很快增加费用。这是您需要定期做的事情还是一次性的事情? 我正在使用 openrowset 定期截断数据并将其加载到表中。 就像 Aleberto 所说的,Azure 数据工厂可能是最简单的方法。请密切关注您被收取的费用。 【参考方案1】:

恕我直言,最简单的选择就是使用 BULK INSERT。将 csv 文件移动到 Blob 存储中,然后使用 Azure SQL 中的 BULK INSERT 直接将其导入。确保 Azure Blob 存储和 Azure SQL 在同一个 Azure 区域中。

为了让它尽可能快:

    将 CSV 拆分为多个文件(例如使用 CSV 拆分器之类的东西。这看起来不错 https://www.erdconcepts.com/dbtoolbox.html。从未尝试过,只是想出了一个简单的搜索,但看起来不错) 使用 TABLOCK 选项并行运行更多 BULK INSERT。 (https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017#arguments)。如果目标表为空,这将允许并行执行多个并发批量操作。 确保在操作期间使用更高的 SKU。根据您使用的 SLO(服务级别目标)(S4?P1,vCore?),您将获得不同数量的日志吞吐量,最高可达 100 MB/秒。这是您实际可以达到的最大速度。 (https://docs.microsoft.com/en-us/azure/sql-database/sql-database-resource-limits-database-server)

【讨论】:

【参考方案2】:

请尝试使用Azure Data Factory。

首先在 Azure SQL 数据库上创建目标表,我们称之为 USDJPY。之后将 CSV 上传到 Azure 存储帐户。现在创建您的 Azure 数据工厂实例并选择复制数据。

接下来,选择“立即运行”以复制 CSV 文件。

选择“Azure Blob 存储”作为“源数据存储”,指定存储 CSV 文件的 Azure 存储。

提供有关 Azure 存储帐户的信息。

从 Azure 存储中选择 CSV 文件。

如果您的 CSV 文件有标题,请选择“逗号”作为 CSV 文件分隔符并输入“跳过行数”编号

选择“Azure SQL 数据库”作为“目标数据存储”。

键入您的 Azure SQL 数据库信息。

从您的 SQL 数据库实例中选择您的表。

验证数据映射。

执行从 CSV 文件到 SQL 数据库的数据复制,只需确认下一个向导。

【讨论】:

试试这个没有太大改善。

以上是关于在更短的时间内将 50GB CSV 文件 Azure Blob 加载到 Azure SQL DB - 性能的主要内容,如果未能解决你的问题,请参考以下文章

如何在更短的时间内向初始 DataFrame 添加大量列(5000~1000 列)?

以 20 或更多的成本提高散列速度

加快约 50GB CSV 文件的轻量级处理

如何处理 r 语言的 50GB 大 csv 文件?

是否有更短的方法来要求 ruby​​ 中同一目录中的文件?

给定文件系统路径,是不是有更短的方法来提取没有扩展名的文件名?