Comprendi i risultati della dichiarazione di Athena EXPLAIN - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Comprendi i risultati della dichiarazione di Athena EXPLAIN

Questo argomento fornisce una breve guida ai termini operativi utilizzati nei risultati dell'istruzione EXPLAIN di Athena.

EXPLAINtipi di output delle dichiarazioni

Gli output dell'istruzione EXPLAIN possono essere uno dei due tipi:

  • Piano logico: mostra il piano logico utilizzato dal SQL motore per eseguire un'istruzione. La sintassi per quest'opzione è EXPLAIN o EXPLAIN (TYPE LOGICAL).

  • Piano distribuito: mostra un piano di esecuzione in un ambiente distribuito. L'output mostra frammenti che stanno elaborando fasi. Ogni frammento del piano viene elaborato da uno o più nodi. I dati possono essere scambiati tra i nodi che elaborano i frammenti. La sintassi per quest'opzione è EXPLAIN (TYPE DISTRIBUTED).

    Nell'output di un piano distribuito, i frammenti (fasi di elaborazione) sono indicati da Fragment number [fragment_type], dove number è un numero intero a base zero e fragment_type specifica come il frammento viene eseguito dai nodi. I tipi di frammento che forniscono informazioni dettagliate sul layout dello scambio di dati sono descritti nella tabella seguente.

    Tipi di frammento del piano distribuito
    Tipo di frammento Descrizione
    SINGLE Il frammento viene eseguito su un singolo nodo.
    HASH Il frammento viene eseguito su un numero fisso di nodi. I dati di input vengono distribuiti utilizzando una funzione hash.
    ROUND_ROBIN Il frammento viene eseguito su un numero fisso di nodi. I dati di input sono distribuiti in modo regolare.
    BROADCAST Il frammento viene eseguito su un numero fisso di nodi. I dati di input vengono trasmessi a tutti i nodi.
    SOURCE Il frammento viene eseguito su nodi in cui si accede alle divisioni dell'input.

Exchange

I termini relativi a Exchange descrivono il modo in cui i dati vengono scambiati tra i nodi di lavoro. I trasferimenti possono essere locali o remoti.

LocalExchange [exchange_type]

Trasferisce i dati localmente all'interno dei nodi di lavoro per le diverse fasi di una query. Il valore per exchange_type può essere uno dei tipi di scambio logico o distribuito, come descritto più avanti in questa sezione.

RemoteExchange [exchange_type]

Trasferisce i dati tra i nodi di lavoro per le diverse fasi di una query. Il valore per exchange_type può essere uno dei tipi di scambio logico o distribuito, come descritto più avanti in questa sezione.

Tipi di scambio logico

I seguenti tipi di scambio descrivono le operazioni intraprese durante la fase di scambio di un piano logico.

  • GATHER: un singolo nodo di lavoro raccoglie l'output da tutti gli altri nodi di lavoro. Ad esempio, l'ultima fase di una query di selezione raccoglie i risultati da tutti i nodi e li scrive su Amazon S3.

  • REPARTITION: invia i dati di riga a un dipendente specifico in base allo schema di partizionamento necessario per applicare all'operatore successivo.

  • REPLICATE: copia i dati della riga per tutti i lavoratori.

Tipi di scambio distribuiti

I seguenti tipi di scambio indicano il layout dei dati quando vengono scambiati tra nodi in un piano distribuito.

  • HASH: lo scambio distribuisce i dati a più destinazioni utilizzando una funzione hash.

  • SINGLE: Lo scambio distribuisce i dati a una singola destinazione.

Scansione

I seguenti termini descrivono come vengono analizzati i dati durante una query.

TableScan

Analizza i dati di origine di una tabella da Amazon S3 o da un connettore Apache Hive e applica la potatura delle partizioni generata dal predicato del filtro.

ScanFilter

Esegue la scansione dei dati di origine di una tabella da Amazon S3 o da un connettore Hive e applica la cesura delle partizioni generata dal predicato filtro e da predicati filtro aggiuntivi non applicati tramite la cesura delle partizioni.

ScanFilterProject

Per prima cosa esegue la scansione dei dati di origine di una tabella da Amazon S3 o da un connettore Hive e applica la cesura delle partizioni generata dal predicato filtro e da predicati filtro aggiuntivi non applicati tramite la cesura delle partizioni. Quindi, modifica il layout di memoria dei dati di output in una nuova proiezione per migliorare le prestazioni delle fasi successive.

Join

Unisce i dati tra due tabelle. I join possono essere classificati in base al tipo di join e al tipo di distribuzione.

Tipi di join

I tipi di join definiscono il modo in cui si verifica l'operazione di join.

CrossJoin— Produce il prodotto cartesiano delle due tavole unite.

InnerJoin— Seleziona i record con valori corrispondenti in entrambe le tabelle.

LeftJoin— Seleziona tutti i record dalla tabella di sinistra e i record corrispondenti dalla tabella di destra. Se non si verifica alcuna corrispondenza, il risultato sul lato destro èNULL.

RightJoin— Seleziona tutti i record dalla tabella di destra e i record corrispondenti dalla tabella di sinistra. Se non si verifica alcuna corrispondenza, il risultato sul lato sinistro èNULL.

FullJoin— Seleziona tutti i record in cui è presente una corrispondenza nei record della tabella sinistra o destra. La tabella unita contiene tutti i record di entrambe le tabelle e sostituisce le corrispondenze mancanti su entrambi i lati. NULLs

Nota

Per motivi di prestazioni, il motore di query può riscrivere una query di join in un tipo di join diverso per produrre gli stessi risultati. Ad esempio, una query inner join con predicato su una tabella può essere riscritta in CrossJoin. In questo modo il predicato viene spostato fino alla fase di scansione della tabella in modo che vengano scansionati meno dati.

Tipi di distribuzione join

I tipi di distribuzione definiscono il modo in cui i dati vengono scambiati tra i nodi di lavoro quando viene eseguita l'operazione di join.

Partizionata: sia la tabella sinistra che quella destra sono partizionate in hash-su tutti i nodi (worker). La distribuzione partizionata consuma meno memoria in ogni nodo. La distribuzione partizionata può essere molto più lenta dei join replicati. I join partizionati sono adatti quando si uniscono due tabelle di grandi dimensioni.

Replicata: una tabella è partizionata in hash su tutti i nodi di lavoro e l'altra tabella viene replicata in tutti i nodi di lavoro per eseguire l'operazione di join. La distribuzione replicata può essere molto più veloce dei join partizionati, ma consuma più memoria in ogni nodo di lavoro. Se la tabella replicata è troppo grande, il nodo di lavoro può riscontrare un out-of-memory errore. I join replicati sono adatti quando una delle tabelle unite è piccola.