Opérateurs unaires

Un opérateur unaire a un seul enfant relationnel.

Les opérateurs suivants sont des opérateurs unaires :

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");

Agréger

L'opérateur aggregate met en œuvre les instructions SQL GROUP BY et les fonctions d'agrégation (telles que COUNT). L'entrée d'un opérateur aggregate est partitionnée de manière logique en groupes organisés en colonnes de clé (ou en un seul groupe en l'absence de l'instruction GROUP BY). Pour chacun des groupes, zéro ou plusieurs agrégats sont calculés.

La requête suivante illustre cet opérateur :

SELECT s.singerid,
       Avg(s.duration) AS average,
       Count(*)        AS count
FROM   songs AS s
GROUP  BY singerid;

/*----------+---------+-------+
 | SingerId | average | count |
 +----------+---------+-------+
 |        3 | 278     |     1 |
 |        2 | 225.875 |     8 |
 +----------+---------+-------*/

La requête regroupe par SingerId et effectue une agrégation AVG et une agrégation COUNT.

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

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

Les opérateurs aggregate peuvent être basés sur les flux ou basés sur le hachage. Le plan d'exécution précédent montre une agrégation basée sur les flux. Les agrégations basées sur les flux lisent des entrées déjà triées (si l'instruction GROUP BY est spécifiée) et calculent le groupe sans interruption. Les agrégations basées sur le hachage créent des tables de hachage pour gérer simultanément les agrégations incrémentielles de plusieurs lignes d'entrée. Les agrégations basées sur les flux sont plus rapides et consomment moins de mémoire que les agrégations basées sur le hachage, à condition que les entrées soient triées (par colonnes de clé ou par index secondaires).

Dans les scénarios distribués, l'opérateur aggregate est divisé en une paire locale/globale. Chaque serveur distant effectue l'agrégation locale sur ses lignes d'entrée, puis renvoie ses résultats au serveur racine. Le serveur racine se charge de l'agrégation globale.

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.

Apply mutations

L'opérateur apply mutations applique à la table les mutations d'une instruction de langage de manipulation de données (LMD). Il s'agit de l'opérateur principal du plan de requête pour une instruction LMD.

La requête suivante illustre cet opérateur :

DELETE FROM singers
WHERE  firstname = 'Alice';

/*
4 rows deleted  This statement deleted 4 rows and did not return any rows.
*/

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

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

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.

Créer un lot

L'opérateur create batch regroupe ses lignes d'entrée dans une séquence. L'opération de création de lot a généralement lieu dans le cadre d'une opération d'application croisée distribuée. Les lignes d'entrée peuvent être réorganisées pendant le traitement par lot. Le nombre de lignes d'entrée regroupées à chaque exécution de l'opérateur de lot est variable.

Pour obtenir un exemple d'opérateur de création de lot dans un plan d'exécution, reportez-vous à l'opérateur Distributed cross apply.

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.

Calcul

L'opérateur compute génère un résultat en lisant ses lignes d'entrée et en ajoutant une ou plusieurs colonnes calculées à l'aide d'expressions scalaires. Pour obtenir un exemple d'opérateur compute dans un plan d'exécution, reportez-vous à l'opérateur union all.

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.

Compute struct

L'opérateur compute struct crée une variable pour une structure contenant des champs pour chacune des colonnes d'entrée.

La requête suivante illustre cet opérateur :

SELECT FirstName,
       ARRAY(SELECT AS STRUCT song.SongName, song.SongGenre
             FROM Songs AS song
             WHERE song.SingerId = singer.SingerId)
FROM singers AS singer
WHERE singer.SingerId = 3;

/*-----------+------------------------------------------------------+
 | FirstName | Unspecified                                          |
 +-----------+------------------------------------------------------+
 | Alice     | [["Not About The Guitar","BLUES"]]                   |
 +-----------+------------------------------------------------------*/

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

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

Dans le plan d'exécution, l'opérateur array subquery reçoit les entrées d'un opérateur compute struct. L'opérateur compute struct crée une structure à partir des colonnes SongName et SongGenre de la table Songs.

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.

Filtre

L'opérateur filter lit toutes les lignes à partir de ses entrées, applique un prédicat scalaire sur chaque ligne, puis ne renvoie que les lignes qui correspondent au prédicat.

La requête suivante illustre cet opérateur :

SELECT s.lastname
FROM   (SELECT s.lastname
        FROM   singers AS s
        LIMIT  3) s
WHERE  s.lastname LIKE 'Rich%';

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

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

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

Spanner implémente le prédicat des chanteurs dont le nom de famille commence par Rich en tant que filtre. Le filtre reçoit des entrées d'une analyse d'index et génère des lignes où LastName commence par Rich.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

Limite

L'opérateur limit restreint le nombre de lignes renvoyées. Le paramètre OFFSET facultatif spécifie la ligne de départ à renvoyer. Dans les scénarios distribués, l'opérateur limit est divisé en une paire locale-globale. Chaque serveur distant applique la limite locale pour ses lignes de sortie, puis renvoie ses résultats au serveur racine. Le serveur racine regroupe les lignes envoyées par les serveurs distants, puis applique la limite globale.

La requête suivante illustre cet opérateur :

SELECT s.songname
FROM   songs AS s
LIMIT  3;

/*----------------------+
 | SongName             |
 +----------------------+
 | Not About The Guitar |
 | The Second Time      |
 | Starting Again       |
 +----------------------*/

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

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

La limite locale est la limite de chaque serveur distant. Le serveur racine regroupe les lignes des serveurs distants, puis applique la limite globale.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

Attribution d'ID aléatoire

Un opérateur d'attribution d'ID aléatoire génère un résultat en lisant ses lignes d'entrée et en ajoutant un nombre aléatoire à chaque ligne. Il utilise un opérateur Filter ou Sort pour réaliser des méthodes d'échantillonnage. Les méthodes d'échantillonnage compatibles sont Bernoulli et Reservoir.

Par exemple, la requête suivante utilise l'échantillonnage de Bernoulli avec un taux d'échantillonnage de 10 %.

SELECT s.songname
FROM   songs AS s TABLESAMPLE bernoulli (10 PERCENT);

/*----------------+
 | SongName       |
 +----------------+
 | Starting Again |
 +----------------*/

Comme il s'agit d'un échantillon, le résultat peut varier à chaque nouvelle exécution de la requête, même si la requête est identique.

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

Dans ce plan d'exécution, l'opérateur Random Id Assign reçoit les entrées d'un opérateur distributed union, qui reçoit les entrées d'un opérateur index scan. L'opérateur renvoie les lignes avec des identifiants aléatoires, et l'opérateur Filter applique ensuite un prédicat scalaire sur les identifiants aléatoires et renvoie environ 10 % des lignes.

L'exemple suivant utilise Reservoir.

avec un taux d'échantillonnage de deux lignes.

SELECT s.songname
FROM   songs AS s TABLESAMPLE reservoir (2 rows);

/*------------------------+
 | SongName               |
 +------------------------+
 | I Knew You Were Magic  |
 | The Second Time        |
 +------------------------*/

Comme il s'agit d'un échantillon, le résultat peut varier à chaque nouvelle exécution de la requête, même si la requête est identique.

Voici le plan d'exécution :

Plan d&#39;exécution de l&#39;opérateur d&#39;échantillonnage du réservoir

Dans ce plan d'exécution, l'opérateur Random Id Assign reçoit les entrées d'un opérateur distributed union, qui reçoit les entrées d'un opérateur index scan. L'opérateur renvoie les lignes avec des identifiants aléatoires, et l'opérateur Sort applique ensuite l'ordre de tri des identifiants aléatoires et applique LIMIT avec deux 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.

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

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

Union de fractionnement local

Un opérateur local split union recherche les partitions de table stockées sur le serveur local, exécute une sous-requête sur chaque partition, puis crée une union qui combine tous les résultats.

Une union de fractionnement locale apparaît dans les plans d'exécution qui analysent une table placement. Les emplacements peuvent augmenter le nombre de divisions dans une table, ce qui permet d'analyser plus efficacement les divisions par lots en fonction de leurs emplacements de stockage physiques.

Par exemple, supposons que la table Singers utilise une clé d'emplacement pour partitionner les données des chanteurs :

CREATE TABLE Singers (
    SingerId INT64 NOT NULL,
    SingerName STRING(MAX) NOT NULL,
    ...
    Location STRING(MAX) NOT NULL PLACEMENT KEY
) PRIMARY KEY (SingerId);

Prenons maintenant la requête suivante :

SELECT BirthDate FROM Singers;

Voici le plan d'exécution :

Plan d&#39;exécution de l&#39;opérateur d&#39;union de fractionnement local

L'union distribuée envoie une sous-requête à chaque lot de fractionnements stockés physiquement ensemble sur le même serveur. Sur chaque serveur, l'union de fractionnement local recherche les fractions stockant les données Singers, exécute la sous-requête sur chaque fraction et renvoie les résultats combinés. De cette manière, l'union distribuée et l'union fractionnée locale fonctionnent ensemble pour analyser efficacement la table Singers. Sans union de partition locale, l'union distribuée enverrait un RPC par partition au lieu d'un RPC par lot de partitions, ce qui entraînerait des allers-retours RPC redondants lorsqu'il y a plus d'une partition par lot.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

DataBlockToRowAdapter

L'optimiseur de requêtes Spanner insère automatiquement un opérateur DataBlockToRowAdapter entre une paire d'opérateurs fonctionnant avec des méthodes d'exécution différentes. Son entrée est un opérateur utilisant la méthode d'exécution par lot et sa sortie est transmise à un opérateur exécuté dans la méthode d'exécution par ligne. Pour en savoir plus, consultez Optimiser l'exécution des requêtes.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

RowToDataBlockAdapter

L'optimiseur de requêtes Spanner insère automatiquement un opérateur RowToDataBlockAdapter entre une paire d'opérateurs fonctionnant avec des méthodes d'exécution différentes. Son entrée est un opérateur utilisant la méthode d'exécution orientée ligne et sa sortie est transmise à un opérateur exécuté dans la méthode d'exécution orientée batch. Pour en savoir plus, consultez Optimiser l'exécution des requêtes.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

Serialize result

L'opérateur serialize result est un cas particulier de l'opérateur compute struct qui sérialise chaque ligne du résultat final de la requête pour le renvoyer au client.

La requête suivante illustre cet opérateur :

SELECT array
  (
    select as struct so.songname,
            so.songgenre
    FROM   songs AS so
    WHERE  so.singerid = s.singerid)
FROM  singers AS s;

/*------------------------------------------------------------------+
 | Unspecified                                                      |
 +------------------------------------------------------------------+
 | []                                                               |
 | [[Let's Get Back Together, COUNTRY], [Starting Again, ROCK]]     |
 | [["Not About The Guitar", "BLUES"]]                              |
 | []                                                               |
 | []                                                               |
 +------------------------------------------------------------------*/

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

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

L'opérateur serialize result crée un résultat qui contient, pour chaque ligne de la table Singers, un tableau de paires SongName et SongGenre pour les titres du chanteur.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

Tri

L'opérateur sort lit ses lignes d'entrée, les classe par colonne, puis renvoie les résultats triés.

La requête suivante illustre cet opérateur :

SELECT s.songgenre
FROM   songs AS s
ORDER  BY songgenre;

/*--------------------------+
 | SongGenre                |
 +--------------------------+
 | BLUES                    |
 | BLUES                    |
 | BLUES                    |
 | BLUES                    |
 | CLASSICAL                |
 | COUNTRY                  |
 | ROCK                     |
 | ROCK                     |
 | ROCK                     |
 +--------------------------*/

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

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

Dans ce plan d'exécution, l'opérateur sort reçoit ses lignes d'entrée d'un opérateur distributed union. Il trie ensuite les lignes d'entrée et les renvoie à un opérateur serialize result.

Pour restreindre le nombre de lignes renvoyées, l'opérateur sort peut éventuellement avoir les paramètres LIMIT et OFFSET. Dans les scénarios distribués, un opérateur sort ayant un opérateur LIMIT ou OFFSET est divisé en une paire locale/globale. Chaque serveur distant applique l'ordre de tri et la limite ou le décalage local pour ses lignes d'entrée, puis renvoie ses résultats au serveur racine. Le serveur racine regroupe les lignes envoyées par les serveurs distants, les trie, puis applique la limite/le décalage global.

La requête suivante illustre cet opérateur :

SELECT s.songgenre
FROM   songs AS s
ORDER  BY songgenre
LIMIT  3;

/*--------------------------+
 | SongGenre                |
 +--------------------------+
 | BLUES                    |
 | BLUES                    |
 | BLUES                    |
 +--------------------------*/

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

Plan d&#39;exécution de l&#39;opérateur de tri avec limite

Le plan d'exécution montre la limite locale pour les serveurs distants et la limite globale pour le serveur racine.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

TVF

Un opérateur de fonction table génère un résultat en lisant ses lignes d'entrée et en appliquant la fonction spécifiée. La fonction peut implémenter le mappage et renvoyer le même nombre de lignes que l'entrée. Il peut également s'agir d'un générateur qui renvoie plus de lignes ou d'un filtre qui en renvoie moins.

La requête suivante illustre cet opérateur :

SELECT genre,
       songname
FROM   ml.predict(model genreclassifier, TABLE songs)

/*-----------------------+--------------------------+
 | Genre                 | SongName                 |
 +-----------------------+--------------------------+
 | Country               | Not About The Guitar     |
 | Rock                  | The Second Time          |
 | Pop                   | Starting Again           |
 | Pop                   | Nothing Is The Same      |
 | Country               | Let's Get Back Together  |
 | Pop                   | I Knew You Were Magic    |
 | Electronic            | Blue                     |
 | Rock                  | 42                       |
 | Rock                  | Fight Story              |
 +-----------------------+--------------------------*/

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.

Union input

L'opérateur union input renvoie les résultats à un opérateur union all. Pour obtenir un exemple d'opérateur union input dans un plan d'exécution, reportez-vous à l'opérateur union all.

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 possède d'autres propriétés distinctes.

Propriétés

Nom Description
Condition Prédicat appliqué à chaque ligne d'entrée. Si la valeur est "true", la ligne est transmise à l'opérateur suivant. Si la valeur est "false", la ligne est supprimée.
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.