Operadores folha

Um operador folha não tem filhos. Os tipos de operadores folha são:

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

Array unnest

Usando um operador array unnest é possível nivelar uma matriz de entrada em linhas de elementos. Em cada linha resultante há até duas colunas: o valor da matriz e a posição baseada em zero opcional na matriz.

A consulta a seguir demonstra esse operador:

SELECT a, b FROM UNNEST([1,2,3]) a WITH OFFSET b;

/*---+---+
 | a | b |
 +---+---+
 | 1 | 0 |
 | 2 | 1 |
 | 3 | 2 |
 +---+---*/

A consulta nivela a matriz [1,2,3] na coluna a e mostra a posição da matriz na coluna b.

O plano de execução aparece da seguinte forma:

Plano de execução do operador array unnest

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.

Generate relation

Um operador generate relation retorna zero ou mais linhas.

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.

Unit relation

Unit relation retorna uma linha. É um caso especial do operador generate relation.

A consulta a seguir demonstra esse operador:

SELECT 1 + 2 AS Result;

/*--------+
 | Result |
 +--------+
 | 3      |
 +--------*/

O plano de execução aparece da seguinte forma:

Plano de execução do operador de relação de unidade

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.

Empty relation

Empty relation não retorna nenhuma linha. É um caso especial do operador generate relation.

A consulta a seguir demonstra esse operador:

SELECT *
FROM   albums
LIMIT  0

/*
No result
*/

O plano de execução aparece da seguinte forma:

Plano de execução do operador empty relation

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.

Verificar

Um operador scan verifica uma fonte de linhas e as retorna. Estes são os tipos de operadores de varredura:

  • Verificação de tabela: verifica uma tabela.
  • Verificação de índice: verifica um índice.
  • Batch scan: as verificações ocorrem em tabelas intermediárias criadas por outros operadores relacionais. Por exemplo, uma tabela criada por um operador distributed cross apply.

Sempre que possível, o Spanner aplica predicados em chaves como parte de uma verificação. As verificações são executadas de modo mais eficiente quando o Spanner aplica predicados, porque não é necessário que a tabela ou índice inteiros sejam lidos pela verificação. Os predicados aparecem no plano de execução como:

  • Condição pesquisável: a condição pesquisável se aplica se o Spanner puder determinar uma linha específica para acessar na tabela. Em geral, isso acontece quando o filtro está em um prefixo da chave primária. Por exemplo, se a chave primária consistir em Col1 e Col2, uma cláusula WHERE que inclua valores explícitos para Col1 ou Col1 e Col2 será pesquisável. Nesse caso, o Spanner lê dados somente dentro do intervalo de chaves.

Se uma consulta precisar pesquisar todas as linhas de uma tabela, uma verificação completa será realizada, o que aparece no plano de execução como full scan: true.

A consulta a seguir demonstra esse operador:

SELECT s.lastname
FROM   singers@{FORCE_INDEX=SingersByFirstLastName} as s
WHERE  s.firstname = 'Catalina';

/*----------+
 | LastName |
 +----------+
 | Smith    |
 +----------*/

O segmento do plano de execução aparece da seguinte maneira:

Plano de execução do operador de verificação

No plano de execução, com o operador distributed union de nível superior, são enviados subplanos a servidores remotos. Em cada subplano há um operador serialize result e um operador index scan. O predicado Key Predicate: FirstName = 'Catalina' restringe a verificação às linhas no índice SingersByFirstLastname que têm FirstName igual a Catalina. A verificação de índice retorna a saída para o operador de resultado de serialização.

O Spanner acopla verificações com Verificação de filtro e as considera um único operador. Se não houver uma condição de busca, o operador vai aparecer como "Verificação completa".

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.

O operador Scan tem outras propriedades distintas e estatísticas de execução.

Propriedades

Nome Descrição
Método de verificação Pode ser Linha, Lote ou Automático. 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. Na execução automática, o operador começa a fazer a verificação usando o método Row, mas pode mudar para Batch quando necessário.
Condição de busca Um predicado na chave primária usado para realizar pesquisas eficientes de uma tabela. Essa propriedade significa que não é necessário verificar a tabela inteira para produzir o conjunto de linhas desejado. Essa propriedade só é aplicável a Table Scans e Index Scans.
Atribuição de variável Lista das colunas lidas da tabela.
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
Linhas verificadas O número de linhas lidas durante a verificação.
Contagem de buscas O número de pesquisas ou buscas realizadas por este operador de verificaçã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.

Filter scan

Um operador filter scan sempre aparece acima de uma verificação de tabela ou índice. Ele opera com a verificação para reduzir o número de linhas lidas no banco de dados, e a verificação resultante é normalmente mais rápida do que com um filtro. O Spanner aplica a verificação de filtro em certas condições:

  • Condição residual: qualquer outra condição em que o Spanner possa avaliar a verificação para limitar a quantidade de dados lidos.

A consulta a seguir demonstra esse operador:

SELECT lastname
FROM   singers
WHERE  singerid = 1

/*----------+
 | LastName |
 +----------+
 | Richards |
 +----------*/

O plano de execução aparece da seguinte forma:

Plano de execução do operador filter scan

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.

O operador Filter scan tem outras propriedades distintas.

Propriedades

Nome Descrição
Condição residual Um predicado aplicado depois que a linha é lida.
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.