我有我需要使用Python 2.7版在甲骨文12C DB(直接转储)转储3+万人次的纪录XLS文件。
我使用Cx_Oracle Python包来建立连接到Oracle,但阅读和倾倒的XLS(使用openpyxl pckg)是极其缓慢,性能降低数千/万条记录。
从脚本的立场点用了两个ways-
我已经试过批量加载,通过读取在阵列中的所有的值,然后使用光标制备(与绑定变量)和光标fetchmany.This不与巨大的数据很好地工作倾倒。
数据加载迭代,因为它正在fetched.Even这种方式有性能问题。
我可以部署为从XLS加载这个数据量到Oracle数据库最佳实践有哪些选项和技术/包?难道,建议通过脚本来加载这个数据量或者我应该一定使用ETL工具? 截至目前,我只有通过Python脚本选项,因此请您回答前一个
如果有可能您的Excel FILA导出为CSV,那么所有你需要的是用sqlldr
来加载数据库文件
Excel中还附带了ODBC支持,所以你可以直接从Excel泵到Oracle假设你的驱动程序。 这就是说,任何涉及转化在存储器中的大量数据(无论从任何Excel将内部使用),然后将它传递给DB很可能是比可以被优化以使用较少的内存专门批量操作较少高性能的。 通过Python的打算只是增加了另一层任务(Excel中的Python到Oracle),虽然它也许可以将此设为使用流。
基本上用于大容量数据的任何语言将被强调,I / O, 除C。 最好的办法是使用由DB供应商提供的本地工具/实用程序。 对于Oracle的正确配合是SQL装载机。
请参阅此链接快速教程http://www.thegeekstuff.com/2012/06/oracle-sqlldr/
在这里,你去...运行SQL装载机,并让你回来,返回代码,输出和错误示例代码
sql_ld_command = ['sqlldr ', 'uid/passwd', 'CONTROL=',
'your_ctrl_file_path', 'DATA=', 'your_data_file_path']
sql_ldr_proc = subprocess.Popen(sql_ld_command, stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = sql_ldr_proc.communicate()
retn_code = sql_ldr_proc.wait()