如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift

Posted

技术标签:

【中文标题】如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift【英文标题】:How to copy a table with millions of rows from PostgreSQL to Amazon Redshift using pandas or python 【发布时间】:2019-10-18 10:54:53 【问题描述】:

使用 pandas 或 python 将表(具有数百万行)从一种类型的数据库复制到另一种类型的最佳方法是什么?

我在 PostreSQL 数据库中有一个包含数百万行的表,我想将它移动到 Amazon Redshift。使用 pandas 或 python 实现这一目标的最佳方法是什么?

【问题讨论】:

最好的方法是使用 Postgresql 工具在不使用 python 或 pandas 的情况下复制它:Copying PostgreSQL database to another server “最好”是什么意思? 【参考方案1】:

Amazon Database Migration Service (DMS) 可以处理:

Using a PostgreSQL Database as a Source for AWS DMS - AWS Database Migration Service Using an Amazon Redshift Database as a Target for AWS Database Migration Service - AWS Database Migration Service

或者,如果您想自己做:

将数据从 PostgreSQL 导出为 CSV 文件(可以 gzip 压缩) 将文件上传到 Amazon S3 在 Amazon Redshift 中创建目标表 在 Amazon Redshift 中使用 COPY 命令将 CSV 文件加载到 Redshift 中

【讨论】:

我使用copy 命令。这实际上是在现有表中插入大量数据的最佳方式。【参考方案2】:

如果您使用 Aws 服务,最好使用 aws Glue,它使用 python 脚本进行 ETL操作,非常适合 Dynamo-->例如 Redshift。

如果您不只使用 Aws 服务,请尝试将 Redshift 数据导出为 csv? (我对数百万行执行此操作)并使用 c# 或其他方式创建迁移工具以读取 csv 文件并在转换行或其他方式后插入行 [检查您使用的数据库技术是否可以采用直接保存 csv,这样您就可以避免自己进行迁移]。

【讨论】:

以上是关于如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中创建具有两列作为元组或 Pandas 数据框的单个变量?

Python Pandas - 如何在具有不同级别数的索引上加入 DataFrames?

Python Pandas - 连接两个具有不同行数和列数的数据框

当列数事先未知时如何访问 Pandas 数据框列

python - 如何将带有年份的周数转换为python pandas中的日期时间格式?

在 Python 中合并具有数百万行的两个表