【问题标题】:Does "limit" reduce the amount of scanned data on AWS Athena?“限制”是否会减少 AWS Athena 上的扫描数据量?
【发布时间】:2020-11-05 00:13:21
【问题描述】:

我有按年/月/日分区的压缩 JSON 数据的 S3。 我在想,如果构造查询的过滤看起来像这样,它可能会减少扫描的数据量:

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

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

【问题讨论】:

  • @luk2302 正如我的问题的第一行所述,它是这样划分的 /year=someyear/month=somemonth/day=someday/crawlid=someid
  • 菲利普给了你一个很好的答案,你应该接受它。 ORDER BY force athena 扫描您的所有数据。但没有它,分区和限制会减少扫描的数据。

标签: amazon-web-services amazon-s3 amazon-athena


【解决方案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 导致再次读取所有分区,否则无法排序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2021-12-23
    • 2020-11-30
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多