将数据从PostgreSQL移至AWS S3并使用RedShift Spectrum分析

时间:2018-11-05 15:44:10

标签: postgresql amazon-web-services apache-spark amazon-redshift amazon-redshift-spectrum

我有大量具有不同模式的PostgreSQL表,并且其中包含大量数据。

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

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

首先,我想问一下-此解决方案是否可以工作?

第二个-RedShift Spectrum是否能够在没有其他架构规范的情况下自动从这些Parquet文件创建EXTERNAL表(即使原始PostgreSQL表包含AWS RedShift不支持的数据类型)?

2 个答案:

答案 0 :(得分:1)

  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,但在竞价型实例上的EMR上运行作业将更灵活,更便宜。 EMRFS附带了EMR群集,它使您能够几乎透明地使用S3而不是HDFS。

答案 1 :(得分:0)

AWS Glue作为一个选项可能会很有趣。它既是Spark的托管版本,带有一些AWS特定的附加组件,又是Data Crawler + Data Catalogue。

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

有关如何使用JDBC将数据从Postgres移至S3的信息,请参见this blog post