【问题标题】:Amazon Athena scans lots of data when query involves only partitions当查询仅涉及分区时,Amazon Athena 会扫描大量数据
【发布时间】:2019-10-16 19:59:18
【问题描述】:

我在 Athena 上有一个由 day 分区的表(巨大的表,TB 的数据)。表上没有day 列,至少没有明确显示。我希望这样的查询:

    select max(day) from my_table

几乎不会扫描任何数据。但是,Athena 报告说扫描了数百 GB。知道为什么吗?

===== 编辑 2021-01-14 ===

我最近又碰到了这个问题。事实证明,当底层数据是 parquet 时,分区上的操作不会消耗数据。对于我尝试过的其他数据格式(包括 ORC),存在相关的数据成本。这对我来说没有任何意义。

【问题讨论】:

  • 如果我不得不猜测的话,我会说这是因为目录名称上定义的虚拟列只有在应用于一行数据时才变得“真实”,这需要阅读内容。我想知道以替代数据格式(例如 Parquet)存储是否会更有效?
  • @JohnRotenstein 底层数据是orc格式的。
  • @Istvan show create table 中的哪些信息最有用?
  • @NicolasBusca all,最重要的是表属性以及分区和分桶。

标签: amazon-web-services amazon-athena


【解决方案1】:

我不知道一个事实的答案,但我猜测:

  1. Athena 只是没有优化只查看分区名称,当只查询它们时。这从它的行为中可以清楚地看出。所以它会扫描所有内容。
  2. Parquet 对每一列都有最小值/最大值,而 ORC 仅在存在索引时才会这样做,AFAIU。因此,对于 Parquet,Athena 的查询优化器指示它直接查看这些汇总值,即不执行任何扫描。 ORC 则不同。

【讨论】:

    【解决方案2】:

    它不依赖于格式,而是依赖于使用的压缩算法。 Snappy 主要用于 ORC,GZIP 用于镶木地板。这就是与众不同的原因

    【讨论】:

    • 压缩与原题完全无关
    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多