Explication des résultats de l'instruction EXPLAIN d'Athena - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Explication des résultats de l'instruction EXPLAIN d'Athena

Cette rubrique fournit un bref guide des termes opérationnels utilisés dans les résultats des instructions EXPLAIN dans Athena.

Types de sorties de l'instruction EXPLAIN

Les sorties de l'instruction EXPLAIN peuvent être de deux types :

  • Logical plan (Plan logique) – Affiche le plan logique utilisé par le moteur SQL pour exécuter une instruction. La syntaxe correspondante est EXPLAIN ou EXPLAIN (TYPE LOGICAL).

  • Distributed plan (Plan distribué) – Affiche un plan d'exécution dans un environnement distribué. La sortie montre les fragments, qui sont des étapes de traitement. Chaque fragment de plan est traité par un ou plusieurs nœuds. Les données peuvent être échangées entre les nœuds qui traitent les fragments. La syntaxe correspondante est EXPLAIN (TYPE DISTRIBUTED).

    Dans la sortie d'un plan distribué, les fragments (étapes de traitement) sont indiqués par Fragment number [fragment_type] , où number est un entier basé sur zéro et où fragment_type spécifie comment le fragment est exécuté par les nœuds. Les types de fragments, qui donnent des informations sur la disposition de l'échange de données (Data Exchange), sont décrits dans le tableau suivant.

    Types de fragments de plan distribué
    Type de fragment Description
    SINGLE Le fragment est exécuté sur un seul nœud.
    HASH Le fragment est exécuté sur un nombre fixe de nœuds. Les données d'entrée sont distribuées à l'aide d'une fonction de hachage.
    ROUND_ROBIN Le fragment est exécuté sur un nombre fixe de nœuds. Les données d'entrée sont distribuées de manière circulaire.
    BROADCAST Le fragment est exécuté sur un nombre fixe de nœuds. Les données d'entrée sont diffusées sur tous les nœuds.
    SOURCE Le fragment est exécuté sur les nœuds où les fractionnements d'entrée sont accessibles.

Exchange

Les termes liés à l'échange décrivent la façon dont les données sont échangées entre les composants master. Les transferts peuvent être locaux ou distants.

LocalExchange [type_échange]

Transfère les données localement dans les composants master pour les différentes étapes d'une requête. La valeur d'exchange_type peut être l'un des types d'échange logique ou distribué décrits plus loin dans cette section.

RemoteExchange [type_échange]

Transfert de données entre les composants master pour les différentes étapes d'une requête. La valeur d'exchange_type peut être l'un des types d'échange logique ou distribué décrits plus loin dans cette section.

Types d'échanges logiques

Les types d'échange suivants décrivent les actions prises pendant la phase d'échange d'un plan logique.

  • GATHER – Un seul composant master rassemble la sortie de tous les autres composants master. Par exemple, la dernière étape d'une requête Select rassemble les résultats de tous les nœuds et écrit les résultats sur Simple Storage Service (Amazon S3).

  • REPARTITION – Envoie les données de la ligne à un esclave spécifique en fonction du schéma de partitionnement requis pour s'appliquer à l'opérateur suivant.

  • REPLICATE – Copie les données de ligne vers tous les esclaves.

Types d'échanges distribués

Les types d'échange suivants indiquent la disposition des données lorsqu'elles sont échangées entre les nœuds d'un plan distribué.

  • HASH – L'échange distribue des données vers plusieurs destinations à l'aide d'une fonction de hachage.

  • SINGLE – L'échange distribue les données vers une seule destination.

Analyse

Les conditions suivantes décrivent comment les données sont analysées au cours d'une requête.

TableScan

Analyse les données source d'une table à partir de Simple Storage Service (Amazon S3) ou d'un connecteur Apache Hive et applique l'élagage des partitions généré par le prédicat du filtre.

ScanFilter

Analyse les données source d'une table à partir de Simple Storage Service (Amazon S3) ou d'un connecteur Hive et applique l'élagage de partitions généré par le prédicat de filtre et par des prédicats de filtre supplémentaires non appliqués par l'élagage de partitions.

ScanFilterProject

Tout d'abord, il analyse les données source d'une table à partir de Simple Storage Service (Amazon S3) ou d'un connecteur Hive et applique l'élagage de partitions généré par le prédicat de filtre et par des prédicats de filtre supplémentaires non appliqués par l'élagage de partitions. Ensuite, il modifie la disposition de la mémoire des données de sortie en une nouvelle projection afin d'améliorer les performances des étapes ultérieures.

Joindre

Joint les données entre deux tables. Les jointures peuvent être classées par type de jointure et par type de distribution.

Types de jointures

Les types de jointure définissent la manière dont l'opération de jointure se produit.

CrossJoin— Produit le produit cartésien des deux tables jointes.

InnerJoin— Sélectionne les enregistrements dont les valeurs correspondent dans les deux tables.

LeftJoin— Sélectionne tous les enregistrements de la table de gauche et les enregistrements correspondants de la table de droite. Si aucune correspondance ne se produit, le résultat sur le côté droit est NULL.

RightJoin— Sélectionne tous les enregistrements de la table de droite et les enregistrements correspondants de la table de gauche. Si aucune correspondance ne se produit, le résultat sur le côté gauche est NULL.

FullJoin— Sélectionne tous les enregistrements présentant une correspondance dans les enregistrements de la table de gauche ou de droite. La table jointe contient tous les registres des tables et remplit les valeurs NULL pour les correspondances manquantes de chaque côté.

Note

Pour des raisons de performances, le moteur de requête peut réécrire une requête de jointure dans un type de jointure différent pour produire les mêmes résultats. Par exemple, une requête de jointure interne avec prédicat sur une table peut être réécrite dans un CrossJoin. Cela repousse le prédicat vers la phase de balayage de la table, de sorte que moins de données sont balayées.

Types de distributions des jointures

Les types de distribution définissent la façon dont les données sont échangées entre les composants master lorsque l'opération de jointure est exécutée.

Partitionné – Les tables de gauche et de droite sont partitionnées par hachage sur tous les composants master. La distribution partitionnée consomme moins de mémoire dans chaque nœud. La distribution partitionnée peut être beaucoup plus lente que les jointures répliquées. Les jointures partitionnées conviennent lorsque vous joignez deux grandes tables.

Répliqué – Une table est partitionnée par hachage sur tous les composants master et l'autre table est répliquée sur tous les composants master pour effectuer l'opération de jointure. La distribution répliquée peut être beaucoup plus rapide que les jointures partitionnées, mais elle consomme plus de mémoire dans chaque composant master. Si la table répliquée est trop grande, le nœud de travail peut rencontrer une out-of-memory erreur. Les jointures répliquées conviennent lorsque l'une des tables jointes est petite.