Cette page décrit les opérateurs utilisés dans les plans d'exécution de requêtes Spanner. Pour savoir comment récupérer un plan d'exécution pour une requête spécifique à l'aide de la console Google Cloud , consultez Comprendre comment Spanner exécute les requêtes.
Les plans d'exécution sont compatibles avec les bases de données utilisant les dialectes GoogleSQL et PostgreSQL.
Mappage des constructions SQL aux opérateurs d'exécution de requêtes
Le mappage exact entre les constructions SQL et les opérateurs d'exécution de requêtes dépend de l'optimisation des requêtes. Le tableau suivant présente quelques mappages courants :
| SQL | Opérateur d'exécution de requêtes |
|---|---|
| À propos des tableaux | Table scan, index scan |
WHERE |
Filter Scan, Filter |
GROUP BY |
Aggregate |
Fonction scalaire (telle que ISNULL) |
Calcul |
Fonction d'agrégation (par exemple, SUM) |
Aggregate |
JOIN |
Tout opérateur de jointure (voir Jointures) |
| Sous-requête | Sous-requête scalaire ou de tableau |
LIMIT |
Limite, Limite de tri |
ORDER BY |
Trier, Limiter le tri |
Opérateurs d'exécution de requêtes
Cette section liste tous les opérateurs d'exécution de requêtes qui peuvent composer un plan d'exécution de requêtes dans Spanner.
Opérateurs feuille
Opérateurs qui n'ont pas d'enfants.
| Nom | Résumé |
|---|---|
| Array unnest | Aplatit une table d'entrée sous la forme de lignes d'éléments. |
| Generate relation | Renvoie zéro ou plusieurs lignes. |
| Unit relation | Renvoie une ligne. |
| Empty relation | Ne renvoie aucune ligne. |
| Scan | Analyse une source de lignes et les renvoie. |
| Filter scan | Il se sert de l'analyse pour réduire le nombre de lignes lues dans la base de données. |
Opérateurs unaires
Opérateurs ayant un seul enfant relationnel.
| Nom | Résumé |
|---|---|
| Aggregate | Implémente les instructions SQL GROUP BY et les fonctions d'agrégation. |
| Apply mutations | Applique à la table les mutations d'une instruction LMD (langage de manipulation de données). |
| Create batch | Regroupe ses lignes d'entrée dans une séquence. |
| Calcul | 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. |
| Compute struct | Crée une variable pour une structure contenant des champs pour chacune des colonnes d'entrée. |
| DataBlockToRowAdapter | Adapte une méthode d'exécution par lot à une méthode d'exécution par ligne. |
| Filter | Lit toutes les lignes à partir de ses entrées, applique un prédicat scalaire sur chaque ligne, puis renvoie uniquement les lignes qui correspondent au prédicat. |
| Limite | Restreint le nombre de lignes renvoyées. |
| Union de fractionnement local | Recherche les divisions de table stockées sur le serveur local, exécute une sous-requête sur chaque division, puis crée une union qui combine tous les résultats. |
| 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. |
| RowToDataBlockAdapter | Adapte une méthode d'exécution orientée ligne à une méthode d'exécution orientée batch. |
| Serialize result | Sérialise chaque ligne du résultat final de la requête pour le renvoyer au client. |
| Trier | Lit ses lignes d'entrée, les classe par colonne, puis renvoie les résultats triés. |
| Fonction de valeur de table (FVT) | Génère une sortie en lisant ses lignes d'entrée et en appliquant la fonction spécifiée. |
| Union input | Renvoie les résultats à un opérateur UNION ALL. |
Opérateurs binaires
Opérateurs ayant deux enfants relationnels.
| Nom | Résumé |
|---|---|
| S'inscrire | Applique chaque ligne du côté entrée au côté carte à l'aide d'une méthode apply. |
| Hash join | Lit les lignes de l'entrée signalée comme "build" et les insère dans une table de hachage en fonction d'une condition de jointure. |
| Merge join | Consomme simultanément les flux d'entrée et génère des lignes lorsque la condition de jointure est remplie. |
| Union récursive | Effectue une union de deux entrées, l'une représentant un cas de base et l'autre un cas récursif. |
Opérateurs n-aires
Opérateurs comptant plus de deux enfants relationnels.
| Nom | Résumé |
|---|---|
| Union all | Combine tous les ensembles de lignes de ses enfants sans supprimer les doublons. |
Opérateurs distribués
Opérateurs qui s'exécutent sur plusieurs serveurs.
| Nom | Résumé |
|---|---|
| Distributed union | Divise de manière conceptuelle une ou plusieurs tables en différentes partitions, évalue à distance et de manière indépendante une sous-requête sur chaque partition, puis réunit tous les résultats. |
| Distributed apply | Étend l'opérateur apply join en s'exécutant sur plusieurs serveurs. |
| Distributed merge union | Distribue une requête sur plusieurs serveurs distants, puis associe les résultats de la requête pour produire un résultat trié. |
| Push broadcast hash join | Implémente les jointures SQL à l'aide d'une jointure de hachage distribuée. |
Sous-requêtes scalaires
Sous-expressions SQL qui renvoient une seule valeur scalaire.
| Nom | Résumé |
|---|---|
| Sous-requêtes scalaires | Sous-expressions SQL qui renvoient une seule valeur scalaire. |
Sous-requêtes de tableau
Sous-expressions SQL qui renvoient un tableau.
| Nom | Résumé |
|---|---|
| Sous-requêtes de tableau | Sous-expressions SQL qui renvoient un tableau. |
Constructeur de structure
Opérateur qui crée une structure (collection de champs) pour les lignes résultant d'une opération de calcul.
| Nom | Résumé |
|---|---|
| Constructeur de struct | Opérateur qui crée une structure (collection de champs) pour les lignes résultant d'une opération de calcul. |