python – pandas .to_sql使用RDS超时

我有一个2200万行.csv文件(~850mb),我试图加载到Amazon RDS上的postgres数据库.它每次都失败(我得到一个超时错误),即使我将文件拆分成较小的部分(每行100,000行),甚至当我使用chunksize时.

我现在所做的就是将.csv作为数据帧加载,然后使用df.to_sql将其写入数据库(table_name,engine,index = False,if_exists =’append’,chunksize = 1000)

我使用sqlalchemy中的create_engine来创建连接:engine = create_engine(‘postgresqldatabase_info’)

我已经测试过使用psycopg2编写少量数据没有问题,但写入1000行需要大约50秒.显然22米的行不起作用.

还有什么我可以尝试的吗?

最佳答案 pandas DataFrame.
to_sql()方法不是专为大型插入而设计的,因为它不使用
PostgreSQL COPY命令.

常规SQL查询可能会超时,这不是大熊猫的错,它由数据库服务器控制,但可以按连接修改,请参阅
this page并搜索“statement_timeout”.

我建议你做的是考虑使用Redshift,它针对数据仓库进行了优化,可以使用Redshift Copy命令直接从S3存储桶读取大量数据转储.

如果您无法使用Redshift,我仍然建议您使用PostgreSQL COPY命令找到一种方法来执行此操作,因为它的发明是为了避开您遇到的问题.

点赞