了解 Athena 解释声明结果 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

了解 Athena 解释声明结果

本主题提供了 Athena 中使用的操作术语的简要指南EXPLAIN语句结果。

EXPLAIN 语句输出类型

EXPLAIN语句输出可以是以下两种类型之一:

  • 逻辑计划— 显示 SQL 引擎用于执行语句的逻辑计划。此选项的语法为EXPLAIN或者EXPLAIN (TYPE LOGICAL)

  • 分配式计划— 显示分布式环境中的执行计划。输出显示片段,这些片段是处理阶段。每个计划片段由一个或多个节点处理。可以在处理碎片的节点之间交换数据。此选项的语法为EXPLAIN (TYPE DISTRIBUTED)

    在分布式计划的输出中,片段(处理阶段)由Fragment number[片段类型],其中number是一个从零开始的整数,片段类型指定节点如何执行片段。片段类型可以帮助您深入了解数据交换的布局,如下表中所述。

    分布式计划片段类型
    片段类型 描述
    SINGLE 片段在单个节点上执行。
    HASH 片段在固定数量的节点上执行。输入数据使用散列函数进行分配。
    ROUND_ROBIN 片段在固定数量的节点上执行。输入数据以循环方式分发。
    BROADCAST 片段在固定数量的节点上执行。输入数据将广播到所有节点。
    SOURCE 片段在访问输入拆分的节点上执行。

Exchange

与 Exchange 相关的术语描述了如何在工作节点之间交换数据。传输可以是本地传输或远程传输。

本地交换 [交换类型]

针对查询的不同阶段,在工作节点内本地传输数据。的值交换类型可以是逻辑交换或分布式交换类型之一,如本节后面所述。

远程交换 [交换类型]

在查询的不同阶段之间传输数据。的值交换类型可以是逻辑交换或分布式交换类型之一,如本节后面所述。

逻辑 Exchange 类型

以下交换类型描述了在逻辑计划的交换阶段执行的操作。

  • GATHER— 单个工作节点从所有其他工作节点收集输出。例如,选择查询的最后阶段从所有节点收集结果并将结果写入 Amazon S3。

  • REPARTITION— 根据应用于下一个运算符所需的分区方案,将行数据发送到特定的工作线程。

  • REPLICATE— 将行数据复制到所有工作线程。

分布式 Exchange 类型

以下交换类型指示数据在分布式计划中的节点之间交换时的布局。

  • HASH— 交换使用哈希函数将数据分发到多个目标。

  • SINGLE— 交换将数据分发到单个目标。

Scanning

以下术语描述了在查询期间如何扫描数据。

表扫描

从 Amazon S3 或 Apache Hive 连接器扫描表的源数据,并应用从筛选器谓词生成的分区修剪。

ScanFilter

从 Amazon S3 或 Hive 连接器扫描表的源数据,并应用从筛选器谓词和未通过分区修剪应用的其他筛选器谓语生成的分区修剪。

扫描程序项目

首先,从 Amazon S3 或 Hive 连接器扫描表的源数据,并应用从筛选器谓语和未通过分区修剪应用的其他筛选器谓语生成的分区修剪。然后,将输出数据的内存布局修改为新投影,以提高后续阶段的性能。

Join

在两个表之间连接数据。可以按连接类型和分配类型对连接进行分类。

联接类型

联接类型定义联接操作的发生方式。

交叉连接— 生成连接的两个表的笛卡尔积。

内部加入— 选择两个表中具有匹配值的记录。

左边加入— 从左表中选择所有记录以及右表中的匹配记录。如果没有发生匹配,则右侧的结果为 NULL。

右加入— 从右表中选择所有记录,并从左表中选择匹配记录。如果没有发生匹配,则左侧的结果为 NULL。

完全加入— 选择左表或右表记录中存在匹配项的所有记录。连接的表包含表中的所有记录,以及任一侧缺少匹配项的填充空值。

注意

出于性能原因,查询引擎可以将联接查询重写为不同的联接类型以生成相同的结果。例如,在一个表上具有谓词的内部连接查询可以被重写为CrossJoin。这会将谓词推到表的扫描阶段,以便扫描的数据更少。

联接分配类型

分发类型定义执行联接操作时,如何在工作节点之间交换数据。

分区— 左表和右表都在所有工作线程节点之间进行散列分区。分区分配在每个节点中消耗的内存较少。分区分配可能比复制的连接慢得多。当您连接两个大型表时,分区连接适合使用。

复制— 一个表在所有工作节点之间进行哈希分区,另一个表被复制到所有工作节点以执行联接操作。复制的分发比分区的联接快得多,但它在每个工作节点中占用更多的内存。如果复制的表太大,则工作节点可能会遇到内存不足错误。复制的连接适用于其中一个连接表较小的情况。