"limit"是否会减少 AWS Athena 上的扫描数据量?



我有S3,它具有按年/月/日划分的压缩JSON数据。我在想,如果用过滤构建查询,它可能会减少扫描数据的数量,如下所示:

...
AND year = 2020
AND month = 10 
AND day >= 1 "
ORDER BY year, month, day DESC
LIMIT 1

这种分区、排序和限制的组合是减少每次查询扫描的数据量的有效措施吗?

分区无疑是减少Athena扫描数据量的有效方法。一篇关于性能优化的好文章可以在这里找到:https://aws.amazon.com/de/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/—更好的性能主要来自于减少扫描的数据量。

还建议以基于列的格式存储数据,如Parquet,并额外压缩数据。如果像这样存储数据,只需选择所需的列就可以优化查询(在这种情况下,select *select col1,col2,..之间存在差异(。

ORDER BY绝对不会限制扫描的数据,因为您需要扫描order by子句中的所有列才能对它们进行排序。由于您有JSON作为底层存储,它很可能读取所有数据。

LIMIT可能会减少读取的数据量,这取决于数据的总体大小——如果限制远小于总行数,这将有所帮助。

一般来说,我可以建议在AWS的Athena界面中测试查询——它会告诉你成功执行后扫描的数据量。我在我的一张分区表上进行了测试(基于压缩拼花地板(:

WHERE子句中的partition columns减少了扫描的数据量
  • LIMIT在某些情况下进一步减少了扫描数据量
  • ORDER BY导致再次读取所有分区,因为否则无法对其进行排序
  • 最新更新