Operadores de hoja

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:

Plan de ejecución del operador de arreglo unnest

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:

Plan de ejecución del operador de relación de unidad

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:

Plan de ejecución del operador de relación vacía

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 Col1 y Col2, entonces se puede buscar una cláusula WHERE que incluya valores explícitos para Col1, o Col1 y Col2. 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:

Plan de ejecución del operador de análisis

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:

Plan de ejecución del operador de análisis de filtro

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.