IBM PureData System for Analytics, Version 7.1

EXPLAIN

La commande EXPLAIN permet d'afficher un plan d'exécution de requête ou une distribution pour une requête. Un plan d'exécution indique comment la ou les tables référencées par la requête sont analysées (par exemple, par une simple analyse séquenctielle).

Si plusieurs tables sont référencées, le plan d'exécution spécifie les algorithmes de jointure à utiliser pour rassembler les tuples requis de chaque table d'entrée. Le plan d'exécution inclut une estimation du coût d'exécution de la requête, à savoir, le nombre de millisecondes requis pour exécuter la requête.
  • Heure de début avant que le premier tuple ne puisse être renvoyé.
  • Délai total pour renvoyer tous les tuples.
Si vous limitez le nombre de tuples à renvoyer avec une clause limit, le planificateur effectue une interpolation entre les coûts des noeuds finaux pour déterminer le plan le plus efficace.

Syntaxe

Syntaxe de la commande EXPLAIN :
EXPLAIN [VERBOSE] [DISTRIBUTION] [PLANTEXT|PLANGRAPH] <requête>

Entrées

La commande EXPLAIN accepte les entrées suivantes :
Tableau 1. Entrée de la commande EXPLAIN
Entrée Description
VERBOSE Affiche la représentation interne complète de l'arborescence du plan au lieu d'un récapitulatif et envoie le plan au fichier journal du répartiteur. Cette option est utile pour le débogage.
<requête> Requête pour laquelle le plan d'exécution doit être affiché.
DISTRIBUTION Affiche le plan de distribution. Si vous utilisez la sous-commande DISTRIBUTION, la commande EXPLAIN imprime la distribution que le planificateur a utilisé sur une instruction SELECT dans une commande CTAS n'ayant pas spécifié DISTRIBUTE ON().
PLANTEXT Affiche le plan sous forme de texte.
PLANGRAPH Affiche le plan au format HTML.

Sorties

La commande EXPLAIN génère les sorties suivantes :
Tableau 2. Sorties de la commande EXPLAIN
Sortie Description
NOTICE: query plan: plan Premier message d'un plan de requête explicite.
NOTICE: result-set distribution Premier message d'une requête de distribution.
EXPLAIN Message indiquant la fin de la requête de distribution ou du plan de requête explicite.

Droits

Cette commande ne requiert pas de droits spéciaux.

Syntaxe

Voici un exemple de syntaxe :
  • Affichez un plan de requête pour une requête simple sur une table comportant une colonne int4 et 128 lignes :
    MYDB.SCH1(USER)=> EXPLAIN SELECT * FROM foo;
           NOTICE:  QUERY PLAN:
       Seq Scan on foo  (cost=0.00..2.28 rows=128 width=4)
       EXPLAIN
  • Affichez un plan de requête pour une jointure entre les tables emp et grp :
    MYDB.SCH1(USER)=> EXPLAIN SELECT emp.* FROM emp,grp WHERE 
    emp.id=grp.grp_id; 
       NOTICE: QUERY PLAN: 
       Hash Join (cost=0.01..0.04 rows=10000 width=28)
    -> Seq Scan on emp (cost=0.00..0.01 rows=1000 width=28)
    -> Hash (cost=0.01..0.01 rows=1000 width=4)
    -> Seq Scan on grp (cost=0.00..0.01 rows=1000 width=4) 
       EXPLAIN
  • Affichez un plan de requête pour la requête TPHC 3 :
    MYDB.SCH1(USER)=> EXPLAIN SELECT
           l_orderkey, 
           sum(l_extendedprice * (1 - l_discount)) as revenue, 
           o_orderdate, 
           o_shippriority 
       FROM    
           customer, 
           orders, 
           lineitem 
       WHERE 
           c_mktsegment = 'BUILDING' 
           and c_custkey = o_custkey 
           and l_orderkey = o_orderkey 
           and o_orderdate < date '1995-03-15' 
           and l_shipdate > date '1995-03-15'
       GROUP BY 
           l_orderkey, 
           o_orderdate, 
           o_shippriority 
       ORDER BY 
           revenue desc, 
           o_orderdate 
       LIMIT 10;
    NOTICE: QUERY PLAN:
    Limit (cost=315799480130.29..315799480130.29 rows=10 width=28)
    -> Sort (cost=315799480130.29..315799480130.29 rows=360899981912
    width=28)
         -> Aggregate (cost=19476.76..112854066.90 rows=360899981912
    width=28)
            -> Group (cost=19476.76..72822.55 rows=360899981912 width=28)
               -> Hash Join (cost=19476.76..43432.67 rows=31349208 width=28)
                  -> Seq Scan on lineitem (cost=0.00..17842.17 rows=322475815
    width=20)
               -> Hash (cost=19476.76..19476.76 rows=14582120 width=12)
                  -> Hash Join (cost=1347.66..19476.76 rows=14582120
    width=12)
                     -> Seq Scan on orders (cost=0.00..3606.62
    rows=72910603 width=16)
                     -> Hash (cost=550.60..550.60 rows=3000000 width=4)
                        -> Seq Scan on customer (cost=0.00..550.60
    rows=3000000 width=4)
    EXPLAIN
  • Affichez la distribution d'une instruction SELECT dans une commande CTAs :
       dev(admin)=> EXPLAIN DISTRIBUTION SELECT COUNT(*),grp FROM emp 
    GROUP BY grp;
       NOTICE:  Result-set distribution (for "CREATE TABLE AS")
       Distributed on hash: "grp"
       EXPLAIN


Feedback | Copyright IBM Corporation 2014 | Last updated: 2014-02-28