将数据从 PostgreSQL 移动到 AWS S3 并使用 RedShift Spectrum 进行分析

Move data from PostgreSQL to AWS S3 and analyze with RedShift Spectrum

我有大量具有不同模式的 PostgreSQL 表以及其中的大量数据。

我现在无法进行数据分析,因为数据量很大 - 几 TB 的数据,而 PostgreSQL 无法在合理的时间内处理查询。

我正在考虑以下方法 - 我将使用 Apache Spark 处理我所有的 PostgreSQL 表,加载数据帧并将它们作为 Parquet 文件存储在 AWS S3 中。然后我将使用 RedShift Spectrum 来查询存储在这些 PARQUET 文件中的信息。

首先,我想问一下 - 这个解决方案是否有效?

第二个 - RedShift Spectrum 是否能够从这些 Parquet 文件自动创建外部表而无需额外的模式规范(即使原始 PostgreSQL 表包含 AWS RedShift 不支持的数据类型)?

AWS Glue 作为您的一个选择可能会很有趣。它既是 Spark 的托管版本,带有一些 AWS 特定的插件和数据爬虫 + 数据目录。

它可以抓取Parquet文件等非结构化数据并找出结构。然后,如果需要,您可以将其以结构化形式导出到 AWS RedShift。

请参阅 this blog post 了解如何使用 JDBC 将其连接到 postgres 数据库以将数据从 Postgres 移动到 S3。

  1. Redshift Spectrum 几乎支持与 Redshift 本身相同的数据类型。

  2. Redshift Spectrum 在幕后创建计算节点集群。集群的大小基于实际 Redshift 集群节点的数量,因此如果您计划创建 1 个节点的 Redshift 集群,Spectrum 将 运行 相当慢。

  3. 正如您在评论中指出的那样,您可以使用 Athena 查询数据,在您的情况下,它会比 Spectrum 更好。但是 Athena 有一些限制,例如 30 分钟 运行 时间、内存消耗等。因此,如果您计划使用多个连接进行复杂查询,它可能无法工作。

  4. Redshift Spectrum 无法在没有提供结构的情况下创建外部表。

  5. 针对您的情况,最佳解决方案是使用 Spark(在 EMR 或 Glue 上)转换数据,使用 Athena 查询数据,如果 Athena 无法执行特定查询 - 使用 SparkSQL相同的数据。您可以使用 Glue,但是在 Spot 实例上的 EMR 上 运行ning 作业将更加灵活和便宜。 EMR 集群附带 EMRFS,这使您能够几乎透明地使用 S3 而不是 HDFS。