Opérateurs feuille

Un opérateur feuille n'a pas d'enfants. Les types d'opérateurs feuille sont les suivants :

Schéma de base de données

Les requêtes et les plans d'exécution de cette page sont basés sur le schéma de base de données suivant :

CREATE TABLE Singers (
  SingerId   INT64 NOT NULL,
  FirstName  STRING(1024),
  LastName   STRING(1024),
  SingerInfo BYTES(MAX),
  BirthDate  DATE
) PRIMARY KEY(SingerId);

CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName);

CREATE TABLE Albums (
  SingerId        INT64 NOT NULL,
  AlbumId         INT64 NOT NULL,
  AlbumTitle      STRING(MAX),
  MarketingBudget INT64
) PRIMARY KEY(SingerId, AlbumId),
  INTERLEAVE IN PARENT Singers ON DELETE CASCADE;

CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle);

CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget);

CREATE TABLE Songs (
  SingerId  INT64 NOT NULL,
  AlbumId   INT64 NOT NULL,
  TrackId   INT64 NOT NULL,
  SongName  STRING(MAX),
  Duration  INT64,
  SongGenre STRING(25)
) PRIMARY KEY(SingerId, AlbumId, TrackId),
  INTERLEAVE IN PARENT Albums ON DELETE CASCADE;

CREATE INDEX SongsBySingerAlbumSongNameDesc ON Songs(SingerId, AlbumId, SongName DESC), INTERLEAVE IN Albums;

CREATE INDEX SongsBySongName ON Songs(SongName);

CREATE TABLE Concerts (
  VenueId      INT64 NOT NULL,
  SingerId     INT64 NOT NULL,
  ConcertDate  DATE NOT NULL,
  BeginTime    TIMESTAMP,
  EndTime      TIMESTAMP,
  TicketPrices ARRAY<INT64>
) PRIMARY KEY(VenueId, SingerId, ConcertDate);

Vous pouvez utiliser les instructions LMD (langage de manipulation de données) suivantes pour ajouter des données à ces tables :

INSERT INTO Singers (SingerId, FirstName, LastName, BirthDate)
VALUES (1, "Marc", "Richards", "1970-09-03"),
       (2, "Catalina", "Smith", "1990-08-17"),
       (3, "Alice", "Trentor", "1991-10-02"),
       (4, "Lea", "Martin", "1991-11-09"),
       (5, "David", "Lomond", "1977-01-29");

INSERT INTO Albums (SingerId, AlbumId, AlbumTitle)
VALUES (1, 1, "Total Junk"),
       (1, 2, "Go, Go, Go"),
       (2, 1, "Green"),
       (2, 2, "Forever Hold Your Peace"),
       (2, 3, "Terrified"),
       (3, 1, "Nothing To Do With Me"),
       (4, 1, "Play");

INSERT INTO Songs (SingerId, AlbumId, TrackId, SongName, Duration, SongGenre)
VALUES (2, 1, 1, "Let's Get Back Together", 182, "COUNTRY"),
       (2, 1, 2, "Starting Again", 156, "ROCK"),
       (2, 1, 3, "I Knew You Were Magic", 294, "BLUES"),
       (2, 1, 4, "42", 185, "CLASSICAL"),
       (2, 1, 5, "Blue", 238, "BLUES"),
       (2, 1, 6, "Nothing Is The Same", 303, "BLUES"),
       (2, 1, 7, "The Second Time", 255, "ROCK"),
       (2, 3, 1, "Fight Story", 194, "ROCK"),
       (3, 1, 1, "Not About The Guitar", 278, "BLUES");

Array unnest

L'opérateur array unnest regroupe un tableau d'entrée en lignes d'éléments. Chaque ligne en résultant contient jusqu'à deux colonnes : la valeur du tableau et la position basée sur zéro facultative dans le tableau.

La requête suivante illustre cet opérateur :

SELECT a, b FROM UNNEST([1,2,3]) a WITH OFFSET b;

/*---+---+
 | a | b |
 +---+---+
 | 1 | 0 |
 | 2 | 1 |
 | 3 | 2 |
 +---+---*/

La requête regroupe le tableau [1,2,3] dans la colonne a et affiche la position du tableau dans la colonne b.

Le plan d'exécution se présente comme suit :

Plan d&#39;exécution de l&#39;opérateur array unnest

Propriétés et statistiques d'exécution

Une propriété d'un opérateur décrit un trait utilisé lors de l'exécution de l'opérateur. Une statistique d'exécution est une valeur collectée lors de l'exécution d'une requête pour vous aider à évaluer les performances de l'opérateur.

Propriétés

Nom Description
Méthode d'exécution Dans l'exécution de ligne, l'opérateur traite une ligne à la fois. Dans l'exécution par lot, l'opérateur traite un lot de lignes à la fois.

Statistiques d'exécution

Nom Description
Latence Temps écoulé pour toutes les exécutions effectuées dans l'opérateur.
Latence cumulée Temps total de l'opérateur actuel et de ses descendants.
Temps CPU Somme du temps CPU consacré à l'exécution de l'opérateur.
Temps CPU cumulé Temps CPU total utilisé pour exécuter l'opérateur et ses descendants.
Durée d'exécution Temps total nécessaire pour exécuter la requête et traiter les résultats.
Lignes renvoyées Nombre de lignes générées par cet opérateur
Nombre d'exécutions Nombre de fois où l'opérateur a été exécuté. Certaines exécutions peuvent s'effectuer en parallèle.

Generate relation

L'opérateur generate relation renvoie zéro ou plusieurs lignes.

Propriétés et statistiques d'exécution

Une propriété d'un opérateur décrit un trait utilisé lors de l'exécution de l'opérateur. Une statistique d'exécution est une valeur collectée lors de l'exécution d'une requête pour vous aider à évaluer les performances de l'opérateur.

Propriétés

Nom Description
Méthode d'exécution Dans l'exécution de ligne, l'opérateur traite une ligne à la fois. Dans l'exécution par lot, l'opérateur traite un lot de lignes à la fois.

Statistiques d'exécution

Nom Description
Latence Temps écoulé pour toutes les exécutions effectuées dans l'opérateur.
Latence cumulée Temps total de l'opérateur actuel et de ses descendants.
Temps CPU Somme du temps CPU consacré à l'exécution de l'opérateur.
Temps CPU cumulé Temps CPU total utilisé pour exécuter l'opérateur et ses descendants.
Durée d'exécution Temps total nécessaire pour exécuter la requête et traiter les résultats.
Lignes renvoyées Nombre de lignes générées par cet opérateur
Nombre d'exécutions Nombre de fois où l'opérateur a été exécuté. Certaines exécutions peuvent s'effectuer en parallèle.

Unit relation

L'opérateur unit relation renvoie une ligne. Il s'agit d'un cas particulier de l'opérateur generate relation.

La requête suivante illustre cet opérateur :

SELECT 1 + 2 AS Result;

/*--------+
 | Result |
 +--------+
 | 3      |
 +--------*/

Le plan d'exécution se présente comme suit :

Plan d&#39;exécution de l&#39;opérateur de relation d&#39;unité

Propriétés et statistiques d'exécution

Une propriété d'un opérateur décrit un trait utilisé lors de l'exécution de l'opérateur. Une statistique d'exécution est une valeur collectée lors de l'exécution d'une requête pour vous aider à évaluer les performances de l'opérateur.

Propriétés

Nom Description
Méthode d'exécution Dans l'exécution de ligne, l'opérateur traite une ligne à la fois. Dans l'exécution par lot, l'opérateur traite un lot de lignes à la fois.

Statistiques d'exécution

Nom Description
Latence Temps écoulé pour toutes les exécutions effectuées dans l'opérateur.
Latence cumulée Temps total de l'opérateur actuel et de ses descendants.
Temps CPU Somme du temps CPU consacré à l'exécution de l'opérateur.
Temps CPU cumulé Temps CPU total utilisé pour exécuter l'opérateur et ses descendants.
Durée d'exécution Temps total nécessaire pour exécuter la requête et traiter les résultats.
Lignes renvoyées Nombre de lignes générées par cet opérateur
Nombre d'exécutions Nombre de fois où l'opérateur a été exécuté. Certaines exécutions peuvent s'effectuer en parallèle.

Empty relation

L'opérateur empty relation ne renvoie aucune ligne. Il s'agit d'un cas particulier de l'opérateur generate relation.

La requête suivante illustre cet opérateur :

SELECT *
FROM   albums
LIMIT  0

/*
No result
*/

Le plan d'exécution se présente comme suit :

Plan d&#39;exécution de l&#39;opérateur empty relation

Propriétés et statistiques d'exécution

Une propriété d'un opérateur décrit un trait utilisé lors de l'exécution de l'opérateur. Une statistique d'exécution est une valeur collectée lors de l'exécution d'une requête pour vous aider à évaluer les performances de l'opérateur.

Propriétés

Nom Description
Méthode d'exécution Dans l'exécution de ligne, l'opérateur traite une ligne à la fois. Dans l'exécution par lot, l'opérateur traite un lot de lignes à la fois.

Statistiques d'exécution

Nom Description
Latence Temps écoulé pour toutes les exécutions effectuées dans l'opérateur.
Latence cumulée Temps total de l'opérateur actuel et de ses descendants.
Temps CPU Somme du temps CPU consacré à l'exécution de l'opérateur.
Temps CPU cumulé Temps CPU total utilisé pour exécuter l'opérateur et ses descendants.
Durée d'exécution Temps total nécessaire pour exécuter la requête et traiter les résultats.
Lignes renvoyées Nombre de lignes générées par cet opérateur
Nombre d'exécutions Nombre de fois où l'opérateur a été exécuté. Certaines exécutions peuvent s'effectuer en parallèle.

Analyse

Un opérateur scan analyse une source de lignes et les renvoie. Voici les types d'opérateurs d'analyse :

  • Table scan : analyse une table.
  • Index scan : analyse un index.
  • Batch scan : les analyses portent sur des tables intermédiaires créées par d'autres opérateurs relationnels (par exemple, une table créée par un opérateur distributed cross apply).

Dans la mesure du possible, Spanner applique des prédicats sur des clés au cours d'une analyse. L'exécution des analyses est plus efficace lorsque Spanner applique des prédicats, car l'analyse n'a pas besoin de lire l'intégralité de la table ou de l'index. Les prédicats apparaissent dans le plan d'exécution comme suit :

  • Condition de recherche : la condition de recherche s'applique dans le cas où Spanner peut déterminer une ligne spécifique à laquelle accéder dans la table. En règle générale, cela se produit lorsque le filtre porte sur un préfixe de la clé primaire. Par exemple, si la clé primaire est constituée de Col1 et Col2, il est possible de rechercher une clause WHERE incluant des valeurs explicites pour Col1 ou pour Col1 et Col2. Dans ce cas, Spanner ne lit que les données qui se trouvent dans la plage de clés.

Si une requête doit rechercher toutes les lignes d'une table, une analyse complète est effectuée. Elle apparaît dans le plan d'exécution sous la forme full scan: true.

La requête suivante illustre cet opérateur :

SELECT s.lastname
FROM   singers@{FORCE_INDEX=SingersByFirstLastName} as s
WHERE  s.firstname = 'Catalina';

/*----------+
 | LastName |
 +----------+
 | Smith    |
 +----------*/

Le segment du plan d'exécution se présente comme suit :

Plan d&#39;exécution de l&#39;opérateur scan

Dans le plan d'exécution, l'opérateur distributed union de premier niveau envoie des sous-plans aux serveurs distants. Chaque sous-plan comporte un opérateur serialize result et un opérateur index scan. Le prédicat Key Predicate: FirstName = 'Catalina' limite l'analyse aux lignes de l'index SingersByFirstLastname dont le prénom (FirstName) est Catalina. L'analyse de l'index renvoie le résultat à l'opérateur serialize result.

Spanner associe étroitement les analyses à Filter Scan et les considère comme un seul opérateur. Si aucune condition de recherche n'est définie, l'opérateur affiche "Analyse complète".

Propriétés et statistiques d'exécution

Une propriété d'un opérateur décrit un trait utilisé lors de l'exécution de l'opérateur. Une statistique d'exécution est une valeur collectée lors de l'exécution d'une requête pour vous aider à évaluer les performances de l'opérateur.

L'opérateur Scan possède des propriétés distinctes et des statistiques d'exécution supplémentaires.

Propriétés

Nom Description
Méthode de détection Peut être défini sur Row, Batch ou Automatic. Dans l'exécution de ligne, l'opérateur traite une ligne à la fois. Dans l'exécution par lot, l'opérateur traite un lot de lignes à la fois. Dans l'exécution automatique, l'opérateur commence l'analyse à l'aide de la méthode Row, mais peut passer à Batch si nécessaire.
Condition de recherche Prédicat sur la clé primaire utilisé pour effectuer des recherches efficaces dans une table. Cette propriété signifie que l'intégralité de la table n'a pas besoin d'être analysée pour produire l'ensemble de lignes souhaité. Cette propriété ne s'applique qu'à Table Scans et Index Scans.
Attribution de variables Liste des colonnes lues à partir de la table.
Méthode d'exécution Dans l'exécution de ligne, l'opérateur traite une ligne à la fois. Dans l'exécution par lot, l'opérateur traite un lot de lignes à la fois.

Statistiques d'exécution

Nom Description
Lignes analysées Nombre de lignes lues lors de l'analyse.
Nombre de recherches Nombre de recherches ou de requêtes effectuées par cet opérateur d'analyse.
Latence Temps écoulé pour toutes les exécutions effectuées dans l'opérateur.
Latence cumulée Temps total de l'opérateur actuel et de ses descendants.
Temps CPU Somme du temps CPU consacré à l'exécution de l'opérateur.
Temps CPU cumulé Temps CPU total utilisé pour exécuter l'opérateur et ses descendants.
Durée d'exécution Temps total nécessaire pour exécuter la requête et traiter les résultats.
Lignes renvoyées Nombre de lignes générées par cet opérateur
Nombre d'exécutions Nombre de fois où l'opérateur a été exécuté. Certaines exécutions peuvent s'effectuer en parallèle.

Filter scan

L'opérateur filter scan apparaît toujours au-dessus d'une analyse de table ou d'index. Il se sert de l'analyse pour réduire le nombre de lignes lues dans la base de données. L'analyse qui en résulte est généralement plus rapide qu'avec un filtre. Spanner applique l'analyse du filtre dans certaines conditions :

  • Condition résiduelle : toute autre condition dans laquelle Spanner peut évaluer l'analyse afin de limiter la quantité de données lues.

La requête suivante illustre cet opérateur :

SELECT lastname
FROM   singers
WHERE  singerid = 1

/*----------+
 | LastName |
 +----------+
 | Richards |
 +----------*/

Le plan d'exécution se présente comme suit :

Plan d&#39;exécution de l&#39;opérateur filter scan

Propriétés et statistiques d'exécution

Une propriété d'un opérateur décrit un trait utilisé lors de l'exécution de l'opérateur. Une statistique d'exécution est une valeur collectée lors de l'exécution d'une requête pour vous aider à évaluer les performances de l'opérateur.

L'opérateur Filter scan possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition résiduelle Prédicat appliqué après la lecture de la ligne.
Méthode d'exécution Dans l'exécution de ligne, l'opérateur traite une ligne à la fois. Dans l'exécution par lot, l'opérateur traite un lot de lignes à la fois.

Statistiques d'exécution

Nom Description
Latence Temps écoulé pour toutes les exécutions effectuées dans l'opérateur.
Latence cumulée Temps total de l'opérateur actuel et de ses descendants.
Temps CPU Somme du temps CPU consacré à l'exécution de l'opérateur.
Temps CPU cumulé Temps CPU total utilisé pour exécuter l'opérateur et ses descendants.
Durée d'exécution Temps total nécessaire pour exécuter la requête et traiter les résultats.
Lignes renvoyées Nombre de lignes générées par cet opérateur
Nombre d'exécutions Nombre de fois où l'opérateur a été exécuté. Certaines exécutions peuvent s'effectuer en parallèle.