【发布时间】:2021-08-12 19:12:57
【问题描述】:
我正在尝试将大型(1000 万行)表导出到以分号分隔的 .csv 文件。我目前在 Microsoft SQL Server Management Studio v17 中使用内置工具(导入/导出向导),导出大约需要 5 小时。
有没有一种简单的方法可以加快这个过程?
我的公司限制我只能使用 R/python 解决方案,当然除了 SQL Server 本身。
【问题讨论】:
-
根据我的经验,最好的机制(在 R 或 python 中)是使用命令行工具
sqlcmd。与分叉进程、将数据下载到主要是 CSV 文件然后读入相关的开销通常低于对DBI::dbGetQuery的“正常”调用。 (我假设您的查询已经过优化(例如,索引设置正确且使用良好)并且网络带宽不是限制因素。) -
这听起来异常缓慢。有非常非常多的列吗?当前输出文件有多大?我尝试了以下链接中的示例,其中包含 10M 行,大多数方法需要大约一秒钟来编写 ~300MB CSV:danielecook.com/speeding-up-reading-and-writing-in-r
-
贵公司对 SQL Server 的定义有多模糊/模糊?您可能找到的最快方法是bcp Utility。
bcp.exe是每个 SQL Server 安装的一部分,只是不能在 T-SQL 中直接访问。但是,对于常规导出,它通常安排在 SQL 代理作业中,并且可以使用存储过程和用户定义的表值函数的输出,而不仅仅是整个表和视图。 -
表格很宽(600 列),输出文件大约有 25 Gb。
-
@Miczab 你为什么要这样做?你想达到什么目的?可能有更好的方法来做 ti。
and the export takes approximately 5 hours.是什么让您认为任何其他工具会更快?你的磁盘有多快?其他进程是否使用它?如果您尝试将数据导出到与数据库相同的磁盘中,那么您只是将 IO 带宽减半。如果该表正在使用中,您的读取将被任何修改阻止
标签: python sql r sql-server