2016-10-13 23 views
0

我有一个熊猫数据框44k行表。当我尝试将此表(或任何其他表)导出到Redshift数据库时,该过程需要很长时间。我使用的SQLAlchemy来创建这样一个conexion:SQLalchemy缓慢与红移

import sqlalchemy as sal 
engine = sal.create_engine('redshift+psycopg2://blablamyhost/myschema') 

我用导出表的方法是大熊猫to_sql这样的:

dat.to_sql(name="olap_comercial",con=eng,schema="monetization",index=False,if_exists="replace" ,dtype={"description":sal.types.String(length=271),"date_postoffer":sal.types.DATE}) 

这是正常的,它是如此之慢?我说的是15分钟以上。

回答

1

是的,这是正常的是慢(且可能为大型集群慢)。常规的sql插入(由sqlalchemy生成)对于Redshift来说非常缓慢,应该避免。

您应该考虑使用S3作为中间层的分期,您的数据流量将是: dataframe-> S3->红移

理想情况下,你也应该上传到S3之前gzip压缩您的数据,这会提高你的性能也是如此。

这可以从使用BOTO3和psycopg2 https://boto3.readthedocs.io/en/latest/

+1

您的Python脚本进行协调,我写了周围boto3和psycopg2的包装解决这一确切的问题:https://github.com/agawronski/pandas_redshift – AidanGawronski