AWS Athena、Parquet和谓词下推



我正在努力理解分区和谓词下推之间的关系。想象一下,我们使用AWS Athena处理存储在S3中的Parquet格式的数据。数据集由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子类型的记录,实际查询成本也是一样的,但这也需要更多的时间。

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

您提到数据在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)。

相关内容

  • 没有找到相关文章

最新更新