Operadores N-arios

Un operador N-ario tiene más de dos operadores secundarios relacionales. Los siguientes son operadores N-arios:

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

Unir todo

Un operador unir todo combina todos los conjuntos de filas de sus operadores secundarios sin quitar los duplicados. Los operadores unir todo reciben sus entradas de operadores de entrada de la unión que se distribuyen en varios servidores. El operador UNION ALL requiere que sus entradas tengan el mismo esquema (el mismo conjunto de tipos de datos para cada columna).

En la siguiente consulta, se muestra este operador:

SELECT 1 a,
       2 b
UNION ALL
SELECT 3 a,
       4 b
UNION ALL
SELECT 5 a,
       6 b;

/*----+----+
 | a  | b  |
 +----+----+
 |  1 |  2 |
 |  3 |  4 |
 |  5 |  6 |
 +----+----*/

El tipo de fila para los operadores secundarios consta de dos números enteros.

El plan de ejecución aparece de la siguiente manera:

Plan de ejecución del operador Union all

El operador unir todo combina sus filas de entrada y, en este ejemplo, envía los resultados al operador de serialización de resultados.

La siguiente consulta se ejecuta correctamente porque se usa el mismo conjunto de tipos de datos para cada columna, aunque los operadores secundarios usen variables diferentes para los nombres de las columnas:

SELECT 1 a,
       2 b
UNION ALL
SELECT 3 c,
       4 e;

La siguiente consulta falla porque los operadores secundarios usan tipos de datos diferentes para las columnas:

SELECT 1 a,
       2 b
UNION ALL
SELECT 3 a,
  'This is a string' b;

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.