2017-07-24 17 views
1

我新的Python和坚持与如下所述的问题,请原谅我的无知Python3数据帧到AWS红移数据库

问题陈述: - Python3数据框保存值(约一个百万行,并有几千列)需要保存在红移数据库中

解决方案查看: - 1>根据文档,执行此类操作的最快方法是使用copy命令。但在我的情况下,表结构不断变化。所以这种解决方案不适合我

2>试图直接使用to_sql保存数据帧,但它需要永远完成它。使用chunksize尝试相同,但也没有工作(它永远完成。我已经离开了脚本2-3小时,但仍运行状态)

df.to_sql('a_265', conn, index = False, if_exists = 'replace') df.to_sql('a_265', conn, index = False, if_exists = 'replace', chunksize=10)

3>试图寻找到可用的另一种选择。但odo这也需要有一个表结构present.Since这也使用复制命令在背景

那么,有没有任何可用的解决方案,这将使我实现CSV批量上传到红移

*注: - 表结构不断变化.Hence如果提示复制命令,请更新我还如何处理变化表结构

+0

“但是这也没有奏效” - 你可以更具体地了解当你尝试这个时发生了什么吗?它没有完成运行?生成一个错误? – Nathan

+0

相关答案:https://stackoverflow.com/a/45172982/7306999。 – Xukrao

+0

@Nathan: - 与要求的变化更新 –

回答

0

哦! to_sql在百万行上是可怕的,因为当大熊猫提交SQL命令时,它不会执行一个带有1M记录的插入,它会单独插入每条记录,然后在发送下一个之前等待ACK。

解决方案 -假设每个新文件的表结构都发生变化。与多个调用单个插入语句不同,多行插入通过批量处理一系列插入操作来提高性能。根据数据的大小,您可以拆分数据框,然后相应地创建多行插入。

如果我做出了错误的假设,请发表评论,我会重新调整我的答案。

+0

感谢解决 但我不知道多行插入,将是正确的做法对我来说 因为我有几千列目前已经上市,这些列将继续增加 请提出你的投入是不是应该多排 继续我所需要做的就是使用数据框的值上载创建表。 –

+0

多行插入性能与复制命令非常相似。在我看来,多行插入是您的用例的最佳选择。 –