Operatori n-ari

Un operatore N-ario ha più di due elementi secondari relazionali. I seguenti operatori sono operatori N-ari:

Schema del database

Le query e i piani di esecuzione in questa pagina si basano sul seguente schema del database:

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

Puoi utilizzare le seguenti istruzioni DML (Data Manipulation Language) per aggiungere dati a queste tabelle:

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

Union all

Un operatore Union All combina tutti i set di righe dei relativi elementi secondari senza rimuovere i duplicati. Gli operatori Union All ricevono l'input dagli operatori Union Input distribuiti su più server. L'operatore Union All richiede che gli input abbiano lo stesso schema (lo stesso insieme di tipi di dati per ogni colonna).

La seguente query mostra questo operatore:

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 |
 +----+----*/

Il tipo di riga per i figli è costituito da due numeri interi.

Il piano di esecuzione viene visualizzato nel seguente modo:

Piano di esecuzione dell&#39;operatore Union all

L'operatore Union All combina le righe di input e, in questo esempio, invia i risultati a un operatore serialize result.

La seguente query ha esito positivo perché per ogni colonna viene utilizzato lo stesso insieme di tipi di dati, anche se i figli utilizzano variabili diverse per i nomi delle colonne:

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

La seguente query non va a buon fine perché i figli utilizzano tipi di dati diversi per le colonne:

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

Proprietà e statistiche di esecuzione

Una proprietà di un operatore descrive una caratteristica utilizzata quando l'operatore viene eseguito. Una statistica di esecuzione è un valore raccolto durante l'esecuzione della query per aiutarti a valutare le prestazioni dell'operatore.

Proprietà

Nome Descrizione
Metodo di esecuzione Nell'esecuzione per riga, l'operatore elabora una riga alla volta. Nell'esecuzione batch, l'operatore elabora un batch di righe contemporaneamente.

Statistiche di esecuzione

Nome Descrizione
Latenza Tempo trascorso di tutte le esecuzioni eseguite nell'operatore.
Latenza cumulativa Il tempo totale dell'operatore corrente e dei relativi discendenti.
Tempo CPU Somma del tempo di CPU dedicato all'esecuzione dell'operatore.
Tempo di CPU cumulativo Il tempo di CPU totale dedicato all'esecuzione dell'operatore e dei relativi discendenti.
Tempo di esecuzione Il tempo totale impiegato per eseguire la query ed elaborare i risultati.
Righe restituite Il numero di righe generate da questo operatore
Numero di esecuzioni Il numero di volte in cui l'operatore è stato eseguito. Alcune esecuzioni possono essere eseguite in parallelo.