【问题标题】:Sorting and loading data from Pandas to Redshift using to_sql使用 to_sql 对 Pandas 中的数据进行排序和加载到 Redshift
【发布时间】:2017-10-06 14:36:37
【问题描述】:

我已经构建了一些工具来为引用动态 Redshift 表的用户创建前端列表框。表格中的新项目,它们会自动出现在列表中。

我想将列表按字母顺序放入数据库中,以便动态列表框按该顺序显示数据。

从 API 下载列表后,我尝试在上传之前在 Pandas 数据框中按字母顺序对列表进行排序。这非常有效:

df.sort_values(['name'], inplace=True, ascending=True, kind='heapsort')

但是当我尝试按该顺序上传到 Redshift 时,它会在上传时丢失该顺序。数据显示在按字母顺序排列的块中。

db_conn = create_engine('<redshift connection>')

obj.to_sql('table_name', db_conn, index = False, if_exists = 'replace')

由于第三方工具 (Alteryx) 的工作方式,我需要在数据库中按字母顺序保存这些数据。

如何修改to_sql才能正确上传数据?

【问题讨论】:

  • 不确定,但可能是因为 index.试试df.sort_values(['name'], inplace=True, ascending=True, kind='heapsort').reset_index(drop=True)
  • 1) 如果您以这种方式将数据加载到 redshift,它会非常慢(这对您来说可能没问题) 2) 如果没有 order 语句,您无法保证 select 的结果顺序。我建议您在表格中添加一列来存储您希望它们出现的顺序。

标签: python sorting amazon-redshift pandas-to-sql


【解决方案1】:

在将数据提取到 redshift 时,数据会分布在 redshift 集群中每个节点上的切片之间。
我的建议是在需要排序的列上创建一个排序键。在该列上获得排序键后,您可以运行 Vacuum 命令对数据进行排序。
对不起!我对 Python/Pandas 帮不上什么忙

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

【讨论】:

  • 这有点误导,并没有真正回答这个问题。此外,您将排序键的选择过度简化为“需要排序的列”。
  • 我所做的是从数据库中提取数据后对数据进行排序,所以它只是另一种解决方法。但是感谢您提醒我使用排序键。
猜你喜欢
  • 1970-01-01
  • 2017-08-21
  • 2017-03-08
  • 2019-06-27
  • 2013-06-05
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多