【问题标题】:AWS Athena, Parquet and predicate pushdownAWS Athena、Parquet 和谓词下推
【发布时间】:2019-06-18 04:09:01
【问题描述】:

我试图了解分区和谓词下推之间的关系。想象一下,我们正在使用 AWS Athena 处理以 Parquet 格式存储在 S3 中的数据。数据集由datetype 列分区。它还包含一个subtype 列,如果type 等于X,则该列始终为NULL。

我正在尝试执行下面的查询

SELECT date, type, subtype FROM tablename WHERE date = '01012001' AND subtype IS NOT NULL;

查询扫描的数据量与

SELECT date, type, subtype FROM tablename WHERE date = '01012001' AND type <> X AND subtype IS NOT NULL;

但是,后者的查询速度明显更快 (ca.30%)

我试图了解幕后发生的事情。我的猜测是,在第二种情况下,执行程序仅扫描具有给定类型和日期的分区,而在第一种情况下,它尝试扫描满足日期要求的所有文件,而不管它们的类型如何。即使跳过具有 NULL 子类型的记录,这也需要更多时间,实际查询成本是相同的。

如果有人能验证我的猜测,如果有错,请纠正,将不胜感激。

【问题讨论】:

  • 您的数据是否被type分区?
  • 是的,它是按日期和类型进行分区的。

标签: amazon-web-services parquet amazon-athena presto


【解决方案1】:

您提到数据在datetype 上进行了分区。

WHERE date = '01012001' AND type <> X AND subtype IS NOT NULL 类型的查询中,Presto (Athena) 将只需要访问相关文件。

WHERE date = '01012001' AND subtype IS NOT NULL 类型的查询中,Presto 将访问给定date 的所有文件(对于所有type 值)。由于存储在 Parquet 文件元数据中的信息,可以跳过不包含非 NULLsubtype 的文件。但是,获取元数据仍然需要时间,因为在访问存储 (S3) 时会涉及延迟。

【讨论】:

    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2021-07-15
    • 2019-09-28
    相关资源
    最近更新 更多