代码之家  ›  专栏  ›  技术社区  ›  Dawid

Aws雅典娜、拼花和谓词下推

  •  0
  • Dawid  · 技术社区  · 6 年前

    我试图理解划分和谓词下推之间的关系。假设我们使用AWS雅典娜来处理以拼花格式存储在S3中的数据。数据集由 date type 柱。它还包含 subtype 列,如果 类型 等于x。

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

    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%)。

    我想知道引擎盖下面发生了什么。我的猜测是,在第二种情况下,执行器只扫描给定类型和日期的分区,而在第一种情况下,它尝试扫描满足日期要求的所有文件,而不管其类型如何。但这需要更多的时间,因为跳过了具有空子类型的记录,实际的查询成本是相同的。

    如果有人能证实我的猜测,如果这是错误的,纠正这一点将是最感激的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Piotr Findeisen    6 年前

    你提到数据是分区的 date type .

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

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