我正在使用Redhshift频谱。我创建了一个外部表,并在S3上上传了一个csv数据文件,大约有550万条记录。如果在这个外部表上触发查询,则需要大约15秒,而如果我在亚马逊红移上运行相同的查询,我在~2秒内得到相同的结果。这可能是导致这种性能滞后的原因,因为AWS声称它是非常高性能的平台。请使用频谱建议相同性能的解决方案。
答案 0 :(得分:3)
为了优化效果,请have a look了解您的查询。
目前,最佳性能是如果您没有单个CSV文件而是多个。通常情况下,如果每个查询的文件数量至少比群集中的节点数量大一个数量级,则可以说性能会很好。
此外,如果您使用Parquet文件,您可以在S3上获得柱状格式的优势,而不是读取将从S3读取整个文件的CSV - 并降低您的成本。
您可以使用script将数据转换为Parquet:
答案 1 :(得分:1)
这些结果是可以预期的。使用Amazon Redshift的全部原因是它以高度优化的方式存储数据以提供快速查询。存储在Redshift之外的数据不会以接近的速度运行。
Amazon Redshift Spectrum的目的是提供对存储在Amazon S3中的数据的访问,而无需将其加载到Redshift(类似于Amazon Athena),但它没有提供性能保证。
答案 2 :(得分:1)
我有点迟到回答这个问题。截至2018年2月,AWS支持以Parquet,ORC等列式格式对文件进行AWS Spectrum查询。在您的情况下,您将文件存储为.CSV。 CSV是基于行的,这导致拉出查询的任何字段的整个行。我建议你在查询之前将文件从.csv转换为Parquet格式。这肯定会带来更快的性能。来自AWS的详细信息:Amazon Redshift Spectrum
答案 3 :(得分:1)
AWS论坛的回复如下:
我了解您在Redshift& Redshift Spectrum。然而,结果是不同的,一个在2秒内运行,另一个在大约15秒内运行。
首先,我们必须同意Redshift和Spectrum是针对不同目的设计不同的不同服务。它们的内部结构彼此差异很大,而Redshift依赖于EBS存储,Spectrum直接与S3协同工作。 Redshift Spectrum的查询采用大规模并行性来对大型数据集执行速度非常快。大部分处理发生在Redshift Spectrum层,大部分数据都保留在Amazon S3中。
Spectrum还设计用于处理来自Amazon S3中文件的PB级数据结构化和半结构化数据,而无需将数据加载到Amazon Redshift表中,而Redshift使您能够高效地存储数据并在高度运行时通过分发和排序键的方式。
AWS并未宣传Spectrum是Redshift的更快替代品。我们提供Amazon Redshift Spectrum作为附加解决方案,可以访问存储在Amazon S3中的数据,而无需将其加载到Redshift(类似于Amazon Athena)。
在查询性能方面,遗憾的是,我们无法保证性能的提升,因为Redshift Spectrum层产生的查询计划与Redshift的数据库引擎解释器生成的查询计划完全不同。这个特殊原因本身足以阻止这些服务之间的任何查询性能比较,因为它们对它们都不公平。
关于您在飞行节点上的问题,Spectrum会根据您的查询需求添加它们,Redshift Spectrum可能会使用数千个实例来利用大规模并行处理。但是,没有任何特定条件可以触发此行为,但请记住,通过遵循有关如何提高查询性能的最佳实践[1]以及如何为查询创建数据文件[2],您可以改进整体Spectrum的表现。
最后,我想指出一些有趣的文档,以便更多地了解如何实现更好的性能改进。请在最后看到参考文献!