Operator unary memiliki satu turunan relasional.
Operator berikut adalah operator unary:
- Agregat
- Menerapkan mutasi
- Buat batch
- Komputasi
- Compute struct
- DataBlockToRowAdapter
- Filter
- Batas
- Gabungan lokal yang terpisah
- Random Id Assign
- RowToDataBlockAdapter
- Hasil serialisasi
- Urutkan
- TVF
- Input gabungan
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");
Agregat
Operator agregat menerapkan pernyataan SQL GROUP BY dan fungsi agregat (seperti COUNT). Input untuk operator agregat secara logis dipartisi ke dalam grup yang disusun pada kolom kunci (atau ke dalam satu grup jika GROUP BY tidak ada). Untuk setiap grup, nol atau lebih agregat dihitung.
Kueri berikut menunjukkan operator ini:
SELECT s.singerid,
Avg(s.duration) AS average,
Count(*) AS count
FROM songs AS s
GROUP BY singerid;
/*----------+---------+-------+
| SingerId | average | count |
+----------+---------+-------+
| 3 | 278 | 1 |
| 2 | 225.875 | 8 |
+----------+---------+-------*/
Kueri dikelompokkan menurut SingerId dan melakukan agregasi AVG dan agregasi COUNT.
Segmen rencana eksekusi akan muncul sebagai berikut:

Operator agregat dapat berupa berbasis streaming atau berbasis hash. Rencana eksekusi
sebelumnya menunjukkan agregat berbasis streaming. Agregat berbasis streaming dibaca dari
input yang telah diurutkan sebelumnya (jika GROUP BY ada) dan menghitung grup
tanpa pemblokiran. Agregat berbasis hash membuat tabel hash untuk mempertahankan agregat inkremental dari beberapa baris input secara bersamaan. Agregat berbasis streaming lebih cepat dan menggunakan lebih sedikit memori daripada agregat berbasis hash, tetapi memerlukan input yang diurutkan (berdasarkan kolom kunci atau indeks sekunder).
Untuk skenario terdistribusi, operator agregat dibagi menjadi pasangan lokal-global. Setiap server jarak jauh melakukan agregasi lokal pada baris input-nya, lalu menampilkan hasilnya ke server root. Server root melakukan agregasi global.
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. |
Menerapkan mutasi
Operator apply mutations menerapkan mutasi dari pernyataan Bahasa Pengolahan Data (DML) ke tabel. Operator ini adalah operator teratas dalam rencana kueri untuk pernyataan DML.
Kueri berikut menunjukkan operator ini:
DELETE FROM singers
WHERE firstname = 'Alice';
/*
4 rows deleted This statement deleted 4 rows and did not return any rows.
*/
Rencana eksekusi akan muncul sebagai berikut:

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. |
Buat batch
Operator buat batch mengelompokkan baris inputnya ke dalam urutan. Operasi batch pembuatan biasanya terjadi sebagai bagian dari operasi penerapan silang terdistribusi. Baris input dapat diurutkan ulang selama pengelompokan. Jumlah baris input yang dikelompokkan dalam setiap eksekusi operator batch bervariasi.
Lihat operator distributed cross apply untuk mengetahui contoh operator batch buat dalam rencana eksekusi.
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. |
Compute
Operator compute menghasilkan output dengan membaca baris inputnya dan menambahkan satu atau beberapa kolom tambahan yang dihitung menggunakan ekspresi skalar. Lihat operator union all untuk contoh operator komputasi dalam paket eksekusi.
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. |
Struktur komputasi
Operator compute struct membuat variabel untuk struktur yang berisi kolom untuk setiap kolom input.
Kueri berikut menunjukkan operator ini:
SELECT FirstName,
ARRAY(SELECT AS STRUCT song.SongName, song.SongGenre
FROM Songs AS song
WHERE song.SingerId = singer.SingerId)
FROM singers AS singer
WHERE singer.SingerId = 3;
/*-----------+------------------------------------------------------+
| FirstName | Unspecified |
+-----------+------------------------------------------------------+
| Alice | [["Not About The Guitar","BLUES"]] |
+-----------+------------------------------------------------------*/
Rencana eksekusi akan muncul sebagai berikut:

Dalam rencana eksekusi, operator subkueri array menerima input dari operator struktur
komputasi. Operator struct compute membuat struktur dari kolom
SongName dan SongGenre dalam tabel Songs.
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. |
Filter
Operator filter membaca semua baris dari inputnya, menerapkan predikat skalar pada setiap baris, lalu hanya menampilkan baris yang memenuhi predikat.
Kueri berikut menunjukkan operator ini:
SELECT s.lastname
FROM (SELECT s.lastname
FROM singers AS s
LIMIT 3) s
WHERE s.lastname LIKE 'Rich%';
/*----------+
| LastName |
+----------+
| Richards |
+----------*/
Rencana eksekusi akan muncul sebagai berikut:

Spanner mengimplementasikan predikat untuk penyanyi yang nama belakangnya diawali dengan Rich sebagai
filter. Filter menerima input dari scan indeks dan menampilkan baris yang LastName-nya dimulai dengan Rich.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
Batas
Operator limit membatasi jumlah baris yang ditampilkan. Parameter OFFSET
opsional menentukan baris awal yang akan ditampilkan. Dalam skenario terdistribusi, operator batas dibagi menjadi pasangan lokal-global. Setiap server jarak jauh
menerapkan batas lokal untuk baris output-nya, lalu menampilkan hasilnya ke
server root. Server root menggabungkan baris yang dikirim oleh server jarak jauh, lalu menerapkan batas global.
Kueri berikut menunjukkan operator ini:
SELECT s.songname
FROM songs AS s
LIMIT 3;
/*----------------------+
| SongName |
+----------------------+
| Not About The Guitar |
| The Second Time |
| Starting Again |
+----------------------*/
Rencana eksekusi akan muncul sebagai berikut:

Batas lokal adalah batas untuk setiap server jarak jauh. Server root menggabungkan baris dari server jarak jauh, lalu menerapkan batas global.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
Penetapan ID acak
Operator penugasan ID acak menghasilkan output dengan membaca baris inputnya dan
menambahkan angka acak ke setiap baris. Fungsi ini kompatibel dengan operator Filter atau Sort
untuk mencapai metode pengambilan sampel. Metode pengambilan sampel yang didukung adalah
Bernoulli
dan Reservoir.
Misalnya, kueri berikut menggunakan pengambilan sampel Bernoulli dengan rasio pengambilan sampel sebesar 10 persen.
SELECT s.songname
FROM songs AS s TABLESAMPLE bernoulli (10 PERCENT);
/*----------------+
| SongName |
+----------------+
| Starting Again |
+----------------*/
Karena hasilnya adalah sampel, hasil dapat bervariasi setiap kali kueri dijalankan meskipun kuerinya sama.

Dalam rencana eksekusi ini, operator Random Id Assign menerima inputnya dari
operator gabungan terdistribusi, yang menerima inputnya
dari pemindaian indeks. Operator menampilkan baris dengan ID acak dan
operator Filter kemudian menerapkan predikat skalar pada ID acak dan
menampilkan sekitar 10 persen baris.
Contoh berikut menggunakan Reservoir
sampling dengan frekuensi sampling 2 baris.
SELECT s.songname
FROM songs AS s TABLESAMPLE reservoir (2 rows);
/*------------------------+
| SongName |
+------------------------+
| I Knew You Were Magic |
| The Second Time |
+------------------------*/
Karena hasilnya adalah sampel, hasil dapat bervariasi setiap kali kueri dijalankan meskipun kuerinya sama.
Berikut adalah rencana eksekusi:

Dalam rencana eksekusi ini, operator Random Id Assign menerima inputnya dari
operator gabungan terdistribusi, yang menerima inputnya
dari pemindaian indeks. Operator menampilkan baris dengan ID acak dan
operator Sort kemudian menerapkan urutan pengurutan pada ID acak dan menerapkan
LIMIT dengan 2 baris.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
Gabungan pemisahan lokal
Operator gabungan pemisahan lokal menemukan pemisahan tabel yang disimpan di server lokal, menjalankan subkueri pada setiap pemisahan, lalu membuat gabungan yang menggabungkan semua hasil.
Gabungan pemisahan lokal muncul dalam rencana eksekusi yang memindai tabel penempatan. Penempatan dapat meningkatkan jumlah pemisahan dalam tabel, sehingga lebih efisien untuk memindai pemisahan dalam batch berdasarkan lokasi penyimpanan fisiknya.
Misalnya, tabel Singers menggunakan kunci penempatan untuk mempartisi
data penyanyi:
CREATE TABLE Singers (
SingerId INT64 NOT NULL,
SingerName STRING(MAX) NOT NULL,
...
Location STRING(MAX) NOT NULL PLACEMENT KEY
) PRIMARY KEY (SingerId);
Sekarang, pertimbangkan kueri ini:
SELECT BirthDate FROM Singers;
Berikut adalah rencana eksekusi:

Gabungan terdistribusi mengirimkan subkueri ke setiap batch
pemisahan yang disimpan secara fisik bersama di server yang sama. Di setiap server, local
split union menemukan pemisahan yang menyimpan data Singers, menjalankan subkueri di setiap
pemisahan, dan menampilkan hasil gabungan. Dengan cara ini, gabungan terdistribusi dan gabungan pemisahan lokal bekerja sama untuk memindai tabel Singers secara efisien. Tanpa
gabungan pemisahan lokal, gabungan terdistribusi akan mengirim satu RPC per pemisahan, bukan per batch pemisahan, sehingga menghasilkan perjalanan pulang pergi RPC yang berlebihan jika ada lebih dari satu pemisahan per batch.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
DataBlockToRowAdapter
Pengoptimal kueri Spanner secara otomatis menyisipkan operator DataBlockToRowAdapter di antara sepasang operator yang beroperasi menggunakan metode eksekusi yang berbeda. Inputnya adalah operator yang menggunakan metode eksekusi berorientasi batch dan outputnya dimasukkan ke operator yang dieksekusi dalam metode eksekusi berorientasi baris. Untuk mengetahui informasi selengkapnya, lihat Mengoptimalkan eksekusi
kueri.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
RowToDataBlockAdapter
Pengoptimal kueri Spanner secara otomatis menyisipkan operator RowToDataBlockAdapter di antara sepasang operator yang beroperasi menggunakan metode eksekusi yang berbeda. Inputnya adalah operator yang menggunakan metode eksekusi berorientasi baris dan outputnya dimasukkan ke operator yang dieksekusi dalam metode eksekusi berorientasi batch. Untuk mengetahui informasi selengkapnya, lihat Mengoptimalkan eksekusi kueri.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
Hasil serialisasi
Operator serialize result adalah kasus khusus dari operator compute struct yang melakukan serialisasi setiap baris hasil akhir kueri, untuk ditampilkan ke klien.
Kueri berikut menunjukkan operator ini:
SELECT array
(
select as struct so.songname,
so.songgenre
FROM songs AS so
WHERE so.singerid = s.singerid)
FROM singers AS s;
/*------------------------------------------------------------------+
| Unspecified |
+------------------------------------------------------------------+
| [] |
| [[Let's Get Back Together, COUNTRY], [Starting Again, ROCK]] |
| [["Not About The Guitar", "BLUES"]] |
| [] |
| [] |
+------------------------------------------------------------------*/
Rencana eksekusi akan muncul sebagai berikut:

Operator serialize result membuat hasil yang berisi, untuk setiap baris tabel Singers, array pasangan SongName dan SongGenre untuk lagu-lagu dari penyanyi.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
Urutkan
Operator sort membaca baris input, mengurutkannya berdasarkan kolom, lalu menampilkan hasil yang telah diurutkan.
Kueri berikut menunjukkan operator ini:
SELECT s.songgenre
FROM songs AS s
ORDER BY songgenre;
/*--------------------------+
| SongGenre |
+--------------------------+
| BLUES |
| BLUES |
| BLUES |
| BLUES |
| CLASSICAL |
| COUNTRY |
| ROCK |
| ROCK |
| ROCK |
+--------------------------*/
Rencana eksekusi akan muncul sebagai berikut:

Dalam rencana eksekusi ini, operator pengurutan menerima baris inputnya dari operator gabungan terdistribusi, mengurutkan baris input, dan menampilkan baris yang diurutkan ke operator hasil serialisasi.
Untuk membatasi jumlah baris yang ditampilkan, operator pengurutan dapat secara opsional memiliki parameter
LIMIT dan OFFSET. Untuk skenario terdistribusi, operator pengurutan dengan
operator LIMIT atau OFFSET dibagi menjadi pasangan lokal-global. Setiap
server jarak jauh menerapkan urutan pengurutan dan batas atau offset lokal untuk baris inputnya, lalu menampilkan hasilnya ke server root. Server root
menggabungkan baris yang dikirim oleh server jarak jauh, mengurutkannya, lalu menerapkan
batas/offset global.
Kueri berikut menunjukkan operator ini:
SELECT s.songgenre
FROM songs AS s
ORDER BY songgenre
LIMIT 3;
/*--------------------------+
| SongGenre |
+--------------------------+
| BLUES |
| BLUES |
| BLUES |
+--------------------------*/
Rencana eksekusi akan muncul sebagai berikut:

Paket eksekusi menampilkan batas lokal untuk server jarak jauh dan batas global untuk server root.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
TVF
Operator fungsi bernilai tabel menghasilkan output dengan membaca baris inputnya dan menerapkan fungsi yang ditentukan. Fungsi ini dapat menerapkan pemetaan dan menampilkan jumlah baris yang sama dengan input. Hal ini juga dapat berupa generator yang menampilkan lebih banyak baris atau filter yang menampilkan lebih sedikit baris.
Kueri berikut menunjukkan operator ini:
SELECT genre,
songname
FROM ml.predict(model genreclassifier, TABLE songs)
/*-----------------------+--------------------------+
| Genre | SongName |
+-----------------------+--------------------------+
| Country | Not About The Guitar |
| Rock | The Second Time |
| Pop | Starting Again |
| Pop | Nothing Is The Same |
| Country | Let's Get Back Together |
| Pop | I Knew You Were Magic |
| Electronic | Blue |
| Rock | 42 |
| Rock | Fight Story |
+-----------------------+--------------------------*/
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |
Input gabungan
Operator input gabungan menampilkan hasil ke operator gabungan semua. Lihat operator gabungkan semua untuk contoh operator input gabungan dalam rencana eksekusi.
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.
Operator Filter memiliki properti berbeda tambahan.Properti
| Nama | Deskripsi |
|---|---|
| Kondisi | Predikat yang diterapkan ke setiap baris input. Jika benar, baris akan diteruskan ke operator berikutnya; jika salah, baris akan dihapus. |
| 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. |