AWS Athena,Parquet和谓词下推

时间:2019-01-24 12:10:36

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

我试图了解分区和谓词下推之间的关系。想象一下,我们正在使用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;

但是,后一种查询要快得多(约30%)

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

如果有人可以验证我的猜测,并且如果错误的话,请更正。

1 个答案:

答案 0 :(得分:1)

您提到数据在datetype上分区。

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

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