我在S3中有一个存储区,其中包含实木复合地板文件并按日期进行了分区。
使用以下查询:
select
count(1)
from logs.logs_prod
where partition_1 = '2019' and partition_2 = '03'
直接在Athena中运行该查询,它在不到10秒的时间内执行。但是,当我在Redshift中运行相同的查询时,它花费了3分钟以上。它们都返回相同的正确值,在这种情况下,该分区中的行数少于8万。
我正在将AWS Glue用作Athena和Redshift的元数据存储。
Redshift的查询计划如下:
QUERY PLAN
XN Limit (cost=250000037.51..250000037.51 rows=1 width=8)
-> XN Aggregate (cost=250000037.51..250000037.51 rows=1 width=8)
-> XN Partition Loop (cost=250000000.00..250000035.00 rows=1000 width=8)
-> XN Seq Scan PartitionInfo of logs.logs_prod (cost=0.00..15.00 rows=1 width=0)
Filter: (((partition_1)::text = '2019'::text) AND ((partition_2)::text = '03'::text))
-> XN S3 Query Scan logs_prod (cost=125000000.00..125000010.00 rows=1000 width=8)
-> S3 Aggregate (cost=125000000.00..125000000.00 rows=1000 width=0)
-> S3 Seq Scan logs.logs_prod location:"s3://logs-prod/" format:PARQUET (cost=0.00..100000000.00 rows=10000000000 width=0)
此问题是Redshift Spectrum配置问题吗? Redshift中的查询是否可能无法接近Athena?
答案 0 :(得分:0)
我认为您不应为此测试增加过多的负担。从计划中看,似乎没有利用Parquet文件包含有关每个文件中行数的元数据这一事实-我相信Athena / Parquet可以做到这一点。
Athena与Redshift Spectrum的实际实际性能很难衡量,因为使用Athena时您不知道获得了多少容量(但是很多),而在Redshift Spectrum中则获得了取决于您的集群大小。对于具有约20个CPU的Redshift群集,我发现Athena在大多数查询中的性能更好,但是较大的Redshift群集可能会获得更好的性能。