AWS Athena、Parquet 和谓词下推

AWS Athena, Parquet and predicate pushdown

我想了解分区和谓词下推之间的关系。假设我们正在使用 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 子类型的记录,但实际查询成本是相同的。

如果有人可以验证我的猜测,如果有误,请更正,将不胜感激。

您提到数据在 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 文件的元数据中的信息,可以跳过不包含 subtype 的非 NULL 值的文件。但是,获取元数据仍然需要时间,因为访问存储 (S3) 时存在延迟。