【发布时间】:2020-05-20 22:47:29
【问题描述】:
我正在研究 BCP 以导出大量数据(最初一次并计划在日常工作中进行)。
源数据位于 SQL Server 表中,由一些小表到较大的表(10M+ 行)组成。目标在另一台机器上(导出到文件)。
目前,我正在使用 python 子进程来实现它。
通过使用 BCP 命令而不指定批处理大小 (queryout, -U, -P, -S, -c)。
查询非常简单(SELECT <column_names> FROM <table_name>)。也许在日常工作中添加WHERE 日期。
我尝试了 100k 数据,大约需要 2 分钟。但是,由于我公司限制在开发环境中使用生产数据,我没有尝试过 10M+ 的数据。此外,我无法将任何数据插入源 SQL Server(仅读取访问权限)。
有人可以建议有什么方法可以优化BCP 导出过程吗?
我的理解是它应该能够让它变得更好,因为我以非常直接的方式做到了。
非常感谢。
【问题讨论】:
-
我之前不得不解决大量数据的批量移动问题。虽然我没有使用 python 的经验。您能解释一下“子流程”是什么意思吗?这只是在主 python 脚本中创建的第二个 shell 或流程实例(执行 bcp)吗?如果解决方案位于 python 中,我不会有太多补充,但我可以提供关于 BCP 的好建议。
-
@jamie 我提到的子进程是 python 的模块之一。它用于创建新流程。参考:docs.python.org/3/library/subprocess.html
标签: python sql sql-server bcp sqlbulkcopy