我在pandas Data Frame中有一个44k行的表。当我尝试将此表(或任何其他表)导出到Redshift数据库时,该过程需要很长时间。我正在使用sqlalchemy创建一个像这样的conexion:
import sqlalchemy as sal
engine = sal.create_engine('redshift+psycopg2://blablamyhost/myschema')
我用来导出表的方法是Pandas 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分钟。
答案 0 :(得分:1)
是的,这种情况很慢(对于大型集群而言可能较慢)。对于Redshift,常规的sql插入(由sqlalchemy生成)非常慢,应该避免使用。
您应该考虑使用S3作为中间临时层,您的数据流将是: dataframe-> S3->红移
理想情况下,您还应该在上传到S3之前对数据进行gzip,这也会提高您的效果。
这可以使用BOTO3和psycopg2从python脚本进行协调 https://boto3.readthedocs.io/en/latest/