Operator n-ary

Operator N-ary memiliki lebih dari dua turunan relasional. Operator berikut adalah operator N-ary:

Skema database

Kueri dan rencana eksekusi di halaman ini didasarkan pada skema database berikut:

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

Anda dapat menggunakan pernyataan Bahasa Manipulasi Data (DML) berikut untuk menambahkan data ke tabel ini:

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

Gabungkan semua

Operator gabungan semua menggabungkan semua set baris turunannya tanpa menghapus duplikat. Operator gabungan menerima input dari operator input gabungan yang didistribusikan di beberapa server. Operator gabungan semua mengharuskan inputnya memiliki skema yang sama (kumpulan jenis data yang sama untuk setiap kolom).

Kueri berikut menunjukkan operator ini:

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

Jenis baris untuk turunan terdiri dari dua bilangan bulat.

Rencana eksekusi akan muncul sebagai berikut:

Rencana eksekusi operator gabungan semua

Operator gabungan semua menggabungkan baris inputnya, dan dalam contoh ini, operator tersebut mengirimkan hasil ke operator serialize result.

Kueri berikut berhasil karena kumpulan jenis data yang sama digunakan untuk setiap kolom, meskipun turunan menggunakan variabel yang berbeda untuk nama kolom:

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

Kueri berikut gagal karena turunan menggunakan jenis data yang berbeda untuk kolom:

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

Properti dan statistik eksekusi

Properti operator menjelaskan sifat yang digunakan saat operator dijalankan. Statistik eksekusi adalah nilai yang dikumpulkan selama eksekusi kueri untuk membantu Anda menilai performa operator.

Properti

Nama Deskripsi
Metode eksekusi Dalam Eksekusi baris, operator memproses satu baris dalam satu waktu. Dalam Eksekusi batch, operator memproses batch baris sekaligus.

Statistik eksekusi

Nama Deskripsi
Latensi Waktu berlalu dari semua eksekusi yang dilakukan di operator.
Latensi kumulatif Total waktu operator saat ini dan turunannya.
Waktu CPU Jumlah waktu CPU yang dihabiskan untuk mengeksekusi operator.
Waktu CPU kumulatif Total waktu CPU yang dihabiskan untuk mengeksekusi operator dan turunannya.
Waktu eksekusi Total waktu yang diperlukan untuk menjalankan kueri dan memproses hasil.
Baris yang ditampilkan Jumlah baris yang dihasilkan oleh operator ini
Jumlah eksekusi Frekuensi operator dieksekusi. Beberapa eksekusi dapat berjalan secara paralel.