Database schema
As consultas e os planos de execução dessa página se baseiam no esquema de banco de dados abaixo:
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);
É possível usar as seguintes instruções da linguagem de manipulação de dados (DML) para adicionar dados a estas tabelas:
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");
Um construtor de estrutura cria uma estrutura ou uma coleção de campos. Ela cria uma estrutura para linhas resultantes de uma operação de computação. Um construtor de estrutura não é um operador independente. Em vez disso, ele aparece em operadores compute struct ou serialize result.
Em uma operação "compute struct", o construtor de estrutura cria uma estrutura para que as colunas das linhas computadas possam usar uma única referência de variável para a estrutura.
Em uma operação "serialize result", o construtor de estrutura cria uma estrutura para serializar os resultados.
A consulta a seguir demonstra esse operador:
SELECT IF(TRUE, struct(1 AS A, 1 AS B), struct(2 AS A , 2 AS B)).A;
/*---+
| A |
+---+
| 1 |
+---*/
O plano de execução aparece da seguinte forma:

No plano de execução, os construtores de estrutura aparecem dentro de um operador "serialize result".
Propriedades e estatísticas de execução
Uma propriedade de um operador descreve uma característica usada quando o operador é executado. Uma estatística de execução é um valor coletado durante a execução da consulta para ajudar você a avaliar a performance do operador.
Propriedades
| Nome | Descrição |
|---|---|
| Método de execução | Na execução de linha, o operador processa uma linha por vez. Na execução em lote, o operador processa um lote de linhas de uma só vez. |
Estatísticas de execução
| Nome | Descrição |
|---|---|
| Latência | Tempo decorrido de todas as execuções feitas no operador. |
| Latência cumulativa | O tempo total do operador atual e dos descendentes dele. |
| Tempo de CPU | Soma do tempo de CPU gasto na execução do operador. |
| Tempo de CPU cumulativo | O tempo total de CPU gasto na execução do operador e dos descendentes dele. |
| Tempo de execução | O tempo total gasto para executar a consulta e processar os resultados. |
| Linhas retornadas | O número de linhas geradas por esse operador. |
| Número de execuções | O número de vezes que o operador foi executado. Algumas execuções podem ser realizadas em paralelo. |