在更短的时间内将 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 - 性能的主要内容,如果未能解决你的问题,请参考以下文章