Un operador de hoja no tiene operadores secundarios. Los tipos de operadores de hoja son:
Esquema de la base de datos
Las consultas y los planes de ejecución en esta página se basan en el siguiente esquema de base de datos:
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);
Puedes usar las siguientes declaraciones del lenguaje de manipulación de datos (DML) para agregar datos a estas tablas:
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");
Arreglo unnest
Un operador de arreglo unnest compacta el arreglo de entrada en filas de elementos. Cada fila resultante contiene hasta dos columnas: el valor del array y la posición opcional basada en cero en el array.
En la siguiente consulta, se muestra este operador:
SELECT a, b FROM UNNEST([1,2,3]) a WITH OFFSET b;
/*---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
+---+---*/
La consulta aplana el arreglo [1,2,3] en la columna a y muestra su posición en la columna b.
El plan de ejecución aparece de la siguiente manera:

Propiedades y estadísticas de ejecución
Una propiedad de un operador describe un rasgo que se usa cuando se ejecuta el operador. Una estadística de ejecución es un valor recopilado durante la ejecución de la consulta para ayudarte a evaluar el rendimiento del operador.
Propiedades
| Nombre | Descripción |
|---|---|
| Método de ejecución | En la ejecución de filas, el operador procesa una fila a la vez. En la ejecución por lotes, el operador procesa un lote de filas a la vez. |
Estadísticas de ejecución
| Nombre | Descripción |
|---|---|
| Latencia | Tiempo transcurrido de todas las ejecuciones realizadas en el operador. |
| Latencia acumulativa | Es el tiempo total del operador actual y sus elementos subordinados. |
| Tiempo de CPU | Es la suma del tiempo de CPU dedicado a ejecutar el operador. |
| Tiempo de CPU acumulativo | Es el tiempo total de CPU dedicado a ejecutar el operador y sus elementos secundarios. |
| Tiempo de ejecución | Es la cantidad total de tiempo que se tardó en ejecutar la consulta y procesar los resultados. |
| Filas mostradas | Cantidad de filas que genera este operador |
| Cantidad de ejecuciones | Es la cantidad de veces que se ejecutó el operador. Algunas ejecuciones se pueden realizar en paralelo. |
Relación de generación
Un operador de relación de generación muestra cero o más filas.
Propiedades y estadísticas de ejecución
Una propiedad de un operador describe un rasgo que se usa cuando se ejecuta el operador. Una estadística de ejecución es un valor recopilado durante la ejecución de la consulta para ayudarte a evaluar el rendimiento del operador.
Propiedades
| Nombre | Descripción |
|---|---|
| Método de ejecución | En la ejecución de filas, el operador procesa una fila a la vez. En la ejecución por lotes, el operador procesa un lote de filas a la vez. |
Estadísticas de ejecución
| Nombre | Descripción |
|---|---|
| Latencia | Tiempo transcurrido de todas las ejecuciones realizadas en el operador. |
| Latencia acumulativa | Es el tiempo total del operador actual y sus elementos subordinados. |
| Tiempo de CPU | Es la suma del tiempo de CPU dedicado a ejecutar el operador. |
| Tiempo de CPU acumulativo | Es el tiempo total de CPU dedicado a ejecutar el operador y sus elementos secundarios. |
| Tiempo de ejecución | Es la cantidad total de tiempo que se tardó en ejecutar la consulta y procesar los resultados. |
| Filas mostradas | Cantidad de filas que genera este operador |
| Cantidad de ejecuciones | Es la cantidad de veces que se ejecutó el operador. Algunas ejecuciones se pueden realizar en paralelo. |
Relación de unidad
La relación de unidad muestra una fila. Es un caso especial del operador de relación de generación.
En la siguiente consulta, se muestra este operador:
SELECT 1 + 2 AS Result;
/*--------+
| Result |
+--------+
| 3 |
+--------*/
El plan de ejecución aparece de la siguiente manera:

Propiedades y estadísticas de ejecución
Una propiedad de un operador describe un rasgo que se usa cuando se ejecuta el operador. Una estadística de ejecución es un valor recopilado durante la ejecución de la consulta para ayudarte a evaluar el rendimiento del operador.
Propiedades
| Nombre | Descripción |
|---|---|
| Método de ejecución | En la ejecución de filas, el operador procesa una fila a la vez. En la ejecución por lotes, el operador procesa un lote de filas a la vez. |
Estadísticas de ejecución
| Nombre | Descripción |
|---|---|
| Latencia | Tiempo transcurrido de todas las ejecuciones realizadas en el operador. |
| Latencia acumulativa | Es el tiempo total del operador actual y sus elementos subordinados. |
| Tiempo de CPU | Es la suma del tiempo de CPU dedicado a ejecutar el operador. |
| Tiempo de CPU acumulativo | Es el tiempo total de CPU dedicado a ejecutar el operador y sus elementos secundarios. |
| Tiempo de ejecución | Es la cantidad total de tiempo que se tardó en ejecutar la consulta y procesar los resultados. |
| Filas mostradas | Cantidad de filas que genera este operador |
| Cantidad de ejecuciones | Es la cantidad de veces que se ejecutó el operador. Algunas ejecuciones se pueden realizar en paralelo. |
Relación vacía
La relación vacía no muestra filas. Es un caso especial del operador de relación de generación.
En la siguiente consulta, se muestra este operador:
SELECT *
FROM albums
LIMIT 0
/*
No result
*/
El plan de ejecución aparece de la siguiente manera:

Propiedades y estadísticas de ejecución
Una propiedad de un operador describe un rasgo que se usa cuando se ejecuta el operador. Una estadística de ejecución es un valor recopilado durante la ejecución de la consulta para ayudarte a evaluar el rendimiento del operador.
Propiedades
| Nombre | Descripción |
|---|---|
| Método de ejecución | En la ejecución de filas, el operador procesa una fila a la vez. En la ejecución por lotes, el operador procesa un lote de filas a la vez. |
Estadísticas de ejecución
| Nombre | Descripción |
|---|---|
| Latencia | Tiempo transcurrido de todas las ejecuciones realizadas en el operador. |
| Latencia acumulativa | Es el tiempo total del operador actual y sus elementos subordinados. |
| Tiempo de CPU | Es la suma del tiempo de CPU dedicado a ejecutar el operador. |
| Tiempo de CPU acumulativo | Es el tiempo total de CPU dedicado a ejecutar el operador y sus elementos secundarios. |
| Tiempo de ejecución | Es la cantidad total de tiempo que se tardó en ejecutar la consulta y procesar los resultados. |
| Filas mostradas | Cantidad de filas que genera este operador |
| Cantidad de ejecuciones | Es la cantidad de veces que se ejecutó el operador. Algunas ejecuciones se pueden realizar en paralelo. |
Analizar
Un operador de análisis analiza una fuente de filas y las muestra. Estos son los tipos de operadores de análisis:
- Análisis de tabla: Analiza una tabla.
- Análisis del índice: Analiza un índice.
- Análisis por lotes: Los análisis se realizan en tablas intermedias creadas por otros operadores relacionales (por ejemplo, una tabla creada por una aplicación distribuida cruzada).
Siempre que sea posible, Spanner aplica predicados en claves como parte de un análisis. Los análisis se ejecutan de manera más eficiente cuando Spanner aplica predicados, ya que el análisis no necesita leer toda la tabla o el índice. Los predicados aparecen en el plan de ejecución de la siguiente manera:
- Condición de búsqueda: Esta condición se aplica si Spanner puede determinar una fila específica para acceder en la tabla. En general, esto sucede cuando el filtro está en un prefijo de la clave primaria. Por ejemplo, si la clave primaria está formada por
Col1yCol2, entonces se puede buscar una cláusulaWHEREque incluya valores explícitos paraCol1, oCol1yCol2. En ese caso, Spanner solo lee datos dentro del rango de claves.
Si una consulta debe buscar todas las filas de una tabla, se produce un análisis completo, que aparece en el plan de ejecución como full scan: true.
En la siguiente consulta, se muestra este operador:
SELECT s.lastname
FROM singers@{FORCE_INDEX=SingersByFirstLastName} as s
WHERE s.firstname = 'Catalina';
/*----------+
| LastName |
+----------+
| Smith |
+----------*/
El segmento del plan de ejecución aparece de la siguiente manera:

En el plan de ejecución, el operador principal de unión distribuida envía planes secundarios a servidores remotos. Cada subplan tiene un operador de serialización de resultados y un operador de análisis de índice. El predicado Key Predicate: FirstName = 'Catalina' restringe el análisis a las filas del índice SingersByFirstLastname en las que FirstName es igual a Catalina. El análisis de índice muestra el resultado al operador de serialización de resultados.
Spanner vincula estrechamente los análisis con Filter Scan y los considera un solo operador. Si no hay una condición de búsqueda, el operador se muestra como Full Scan.
Propiedades y estadísticas de ejecución
Una propiedad de un operador describe un rasgo que se usa cuando se ejecuta el operador. Una estadística de ejecución es un valor recopilado durante la ejecución de la consulta para ayudarte a evaluar el rendimiento del operador.
El operador Scan tiene propiedades distintas adicionales y estadísticas de ejecución.Propiedades
| Nombre | Descripción |
|---|---|
| Método de análisis | Puede ser Row, Batch o Automatic. En la ejecución de filas, el operador procesa una fila a la vez. En la ejecución por lotes, el operador procesa un lote de filas a la vez. En la ejecución automática, el operador comienza a analizar con el método Row, pero puede cambiar a Batch cuando sea necesario. |
| Condición de búsqueda | Es un predicado en la clave primaria que se usa para realizar búsquedas eficientes en una tabla. Esta propiedad significa que no es necesario analizar toda la tabla para producir el conjunto de filas deseado. Esta propiedad solo se aplica a Table Scans y Index Scans. |
| Asignación de variables | Es la lista de las columnas que se leyeron de la tabla. |
| Método de ejecución | En la ejecución de filas, el operador procesa una fila a la vez. En la ejecución por lotes, el operador procesa un lote de filas a la vez. |
Estadísticas de ejecución
| Nombre | Descripción |
|---|---|
| Filas analizadas | Es la cantidad de filas que se leyeron durante el análisis. |
| Recuento de búsquedas | Es la cantidad de búsquedas o exploraciones que realiza este operador de análisis. |
| Latencia | Tiempo transcurrido de todas las ejecuciones realizadas en el operador. |
| Latencia acumulativa | Es el tiempo total del operador actual y sus elementos subordinados. |
| Tiempo de CPU | Es la suma del tiempo de CPU dedicado a ejecutar el operador. |
| Tiempo de CPU acumulativo | Es el tiempo total de CPU dedicado a ejecutar el operador y sus elementos secundarios. |
| Tiempo de ejecución | Es la cantidad total de tiempo que se tardó en ejecutar la consulta y procesar los resultados. |
| Filas mostradas | Cantidad de filas que genera este operador |
| Cantidad de ejecuciones | Es la cantidad de veces que se ejecutó el operador. Algunas ejecuciones se pueden realizar en paralelo. |
Análisis de filtro
Un operador de análisis de filtro siempre aparece por sobre un análisis de tabla o índice. Funciona junto con el análisis para reducir la cantidad de filas leídas de la base de datos, y el resultado suele ser más rápido que con un filtro. Spanner aplica el análisis de filtro en ciertas condiciones:
- Condición residual: Cualquier otra condición en la que Spanner puede evaluar el análisis para limitar la cantidad de datos que se leen.
En la siguiente consulta, se muestra este operador:
SELECT lastname
FROM singers
WHERE singerid = 1
/*----------+
| LastName |
+----------+
| Richards |
+----------*/
El plan de ejecución aparece de la siguiente manera:

Propiedades y estadísticas de ejecución
Una propiedad de un operador describe un rasgo que se usa cuando se ejecuta el operador. Una estadística de ejecución es un valor recopilado durante la ejecución de la consulta para ayudarte a evaluar el rendimiento del operador.
El operador Filter scan tiene propiedades distintas adicionales.Propiedades
| Nombre | Descripción |
|---|---|
| Condición residual | Es un predicado que se aplica después de leer la fila. |
| Método de ejecución | En la ejecución de filas, el operador procesa una fila a la vez. En la ejecución por lotes, el operador procesa un lote de filas a la vez. |
Estadísticas de ejecución
| Nombre | Descripción |
|---|---|
| Latencia | Tiempo transcurrido de todas las ejecuciones realizadas en el operador. |
| Latencia acumulativa | Es el tiempo total del operador actual y sus elementos subordinados. |
| Tiempo de CPU | Es la suma del tiempo de CPU dedicado a ejecutar el operador. |
| Tiempo de CPU acumulativo | Es el tiempo total de CPU dedicado a ejecutar el operador y sus elementos secundarios. |
| Tiempo de ejecución | Es la cantidad total de tiempo que se tardó en ejecutar la consulta y procesar los resultados. |
| Filas mostradas | Cantidad de filas que genera este operador |
| Cantidad de ejecuciones | Es la cantidad de veces que se ejecutó el operador. Algunas ejecuciones se pueden realizar en paralelo. |