【问题标题】:Python3 dataframe to aws redshift databasePython3 数据框到 aws redshift 数据库
【发布时间】:2017-12-30 12:45:10
【问题描述】:

我是新python,遇到如下问题,请原谅我的无知

问题陈述:- Python3 数据框包含需要保存在 redshift 数据库中的值(大约 100 万行和几千列)

解决方案研究:- 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。但这也需要有一个表结构。因为这也在背景中使用了复制命令

那么有什么解决方案可以让我实现将 csv 批量上传到 redshift 中

*注意:- 表结构不断变化。因此,如果建议复制命令,请告诉我如何处理表结构的变化

【问题讨论】:

  • “但这也没用” - 你能更具体地说明你尝试这个时发生了什么吗?它没有完成运行吗?产生错误?
  • @Nathan:- 更新了所要求的更改
  • @Xukrao:- 感谢您指出相关的答案。由于我很天真,您能否解释一下 con.cursor() 之后的步骤
  • @ankitkhanduri 我对这个话题也不太了解。最好的办法是直接询问该答案的作者。

标签: python python-3.x amazon-redshift


【解决方案1】:

哦!百万行上的 to_sql 是可怕的,因为当 pandas 提交 SQL 命令时,它不是对 1M 记录进行一次插入,而是单独插入每条记录,然后在发送下一条记录之前等待 ACK。

解决方案 - 假设每个新文件都会更改表结构。而不是多次调用单个插入语句,USE MULTI-ROW INSERT. 多行插入通过批处理一系列插入来提高性能。根据数据的大小,您可以拆分数据框,然后相应地创建多行插入。

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

【讨论】:

  • 感谢您的解决方案但我不确定多行插入对我来说是正确的方法因为我目前有几千列可用并且这些列将继续增加如果我应该继续,请建议您的输入多行我需要做的就是上传带有数据框值的创建表
  • 多行插入性能与复制命令非常相似。在我看来,多行插入是您用例的最佳选择。
猜你喜欢
  • 2019-11-12
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2019-11-21
  • 2017-07-13
相关资源
最近更新 更多