【发布时间】:2019-06-18 04:09:01
【问题描述】:
我试图了解分区和谓词下推之间的关系。想象一下,我们正在使用 AWS Athena 处理以 Parquet 格式存储在 S3 中的数据。数据集由date 和type 列分区。它还包含一个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