Descripción de los resultados de la instrucción EXPLAIN de Athena - Amazon Athena

Descripción de los resultados de la instrucción EXPLAIN de Athena

Este tema proporciona una breve guía de los términos operativos utilizados en los resultados de instrucciones EXPLAIN en Athena.

Tipos de salida de instrucciones EXPLAIN

Las salidas de instrucciones EXPLAIN pueden ser de dos tipos:

  • Plan lógico: muestra el plan lógico que utiliza el motor SQL para ejecutar una instrucción. La sintaxis para esta opción es EXPLAIN o EXPLAIN (TYPE LOGICAL).

  • Plan distribuido: muestra un plan de ejecución en un entorno distribuido. La salida muestra fragmentos, que son etapas de procesamiento. Cada fragmento de plan es procesado por uno o más nodos. Los datos se pueden intercambiar entre los nodos que procesan los fragmentos. La sintaxis para esta opción es EXPLAIN (TYPE DISTRIBUTED).

    En la salida de un plan distribuido, los fragmentos (etapas de procesamiento) están indicados por un Fragment número [fragment_type], donde el número es un entero basado en cero y fragment_type especifica cómo los nodos ejecutan el fragmento. En la siguiente tabla se describen los tipos de fragmentos, que proporcionan información del diseño del intercambio de datos.

    Tipos de fragmentos del plan distribuido
    Tipo de fragmento Descripción
    SINGLE El fragmento se ejecuta en un solo nodo.
    HASH El fragmento se ejecuta en un número de nodos fijo. Los datos de entrada se distribuyen utilizando una función hash.
    ROUND_ROBIN El fragmento se ejecuta en un número de nodos fijo. Los datos de entrada se distribuyen de forma rotativa.
    BROADCAST El fragmento se ejecuta en un número de nodos fijo. Los datos de entrada se transmiten a todos los nodos.
    SOURCE El fragmento se ejecuta en nodos donde se accede a las divisiones de entrada.

Exchange

Los términos relacionados con el intercambio describen cómo se intercambian datos entre nodos de trabajo. Las transferencias pueden ser locales o remotas.

LocalExchange [exchange_type]

Transfiere datos de manera local dentro de los nodos de trabajo para diferentes etapas de una consulta. El valor de exchange_type puede ser uno de los tipos de intercambio lógicos o distribuidos, como se describe más adelante en esta sección.

RemoteExchange [exchange_type]

Transfiere datos entre los nodos de trabajo para diferentes etapas de una consulta. El valor de exchange_type puede ser uno de los tipos de intercambio lógicos o distribuidos, como se describe más adelante en esta sección.

Tipos de intercambio lógico

Los siguientes tipos de intercambio describen las acciones efectuadas durante la fase de intercambio de un plan lógico.

  • GATHER: un nodo de trabajo único recopila la salida de todos los demás nodos de trabajo. Por ejemplo, la última etapa de una consulta de selección reúne los resultados de todos los nodos y los escribe en Amazon S3.

  • REPARTITION: envía los datos de fila a un empleado específico según el esquema de partición necesario para aplicar al siguiente operador.

  • REPLICATE: copia los datos de fila en todos los empleados.

Tipos de intercambio distribuido

Los siguientes tipos de intercambio indican el diseño de los datos cuando se intercambian entre nodos en un plan distribuido.

  • HASH: el intercambio distribuye datos a varios destinos utilizando una función hash.

  • SINGLE: el intercambio distribuye los datos a un único destino.

Análisis

Los siguientes términos describen cómo se analizan los datos durante una consulta.

TableScan

Analiza los datos de origen de una tabla desde Amazon S3 o un conector Apache Hive y aplica la poda de partición generada a partir del predicado del filtro.

ScanFilter

Analiza los datos de origen de una tabla desde Amazon S3 o un conector Hive y aplica la poda de partición generada a partir del predicado del filtro y de predicados de filtro adicionales no aplicados a través de la poda de partición.

ScanFilterProject

Primero, analiza los datos de origen de una tabla desde Amazon S3 o un conector Hive y aplica la poda de partición generada a partir del predicado del filtro y de predicados de filtro adicionales no aplicados a través de la poda de partición. A continuación, modifica el diseño de la memoria de los datos de salida en una nueva proyección para mejorar el rendimiento de etapas posteriores.

Join

Une datos entre dos tablas. Las uniones se pueden clasificar por tipo de unión y por tipo de distribución.

Tipos de combinación

Los tipos de unión definen la manera en que se produce la operación de unión.

CrossJoin: produce el producto cartesiano de las dos tablas unidas.

InnerJoin: selecciona registros que tienen valores coincidentes en ambas tablas.

LeftJoin: selecciona todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha. Si no se produce ninguna coincidencia, el resultado en el lado derecho es NULL.

Right Join: selecciona todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda. Si no se produce ninguna coincidencia, el resultado en el lado izquierdo es NULL.

FullJoin: selecciona todos los registros en los que hay una coincidencia en los registros de la tabla izquierda o derecha. La tabla combinada contiene todos los registros de las tablas y rellena NULL para las coincidencias que faltan en ambos lados.

nota

Por razones de rendimiento, el motor de consultas puede reescribir una consulta de unión en un tipo de unión diferente para producir los mismos resultados. Por ejemplo, una consulta de unión interna con predicado en una tabla se puede volver a escribir en una CrossJoin. Esto empuja el predicado a la fase de escaneo de la tabla para que se escaneen menos datos.

Tipos de distribución de unión

Los tipos de distribución definen la manera en que se intercambian los datos entre nodos de trabajo cuando se realiza la operación de unión.

Particionada: tanto la tabla izquierda como la derecha están particionadas en hash en todos los nodos de trabajo. La distribución particionada consume menos memoria en cada nodo. La distribución particionada puede ser mucho más lenta que las uniones replicadas. Las uniones particionadas son adecuadas cuando se unen dos tablas grandes.

Replicada: una tabla está particionada en hash en todos los nodos de trabajo y la otra tabla se replica en todos los nodos de trabajo para realizar la operación de unión. La distribución replicada puede ser mucho más rápida que las uniones particionadas, pero consume más memoria en cada nodo de trabajo. Si la tabla replicada es demasiado grande, el nodo de trabajo puede experimentar un error de memoria insuficiente. Las uniones replicadas son adecuadas cuando una de las tablas combinadas es pequeña.