Unäre Operatoren

Ein unärer Operator hat nur ein einziges untergeordnetes relationales Element.

Diese unären Operatoren gibt es:

Datenbankschema

Die Abfragen und Ausführungspläne auf dieser Seite basieren auf dem folgenden Datenbankschema:

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

Sie können die folgenden DML-Anweisungen (Data Manipulation Language) verwenden, um diesen Tabellen Daten hinzuzufügen:

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

Aggregat

Der Operator Aggregate implementiert SQL-Anweisungen vom Typ GROUP BY und Aggregatfunktionen (z. B. COUNT). Eingaben für den Operator "Aggregate" werden logisch in Gruppen unterteilt, die in Schlüsselspalten angeordnet sind oder in einer einzigen Gruppe ausgegeben werden, wenn GROUP BY nicht vorhanden ist. Für jede Gruppe werden null oder mehr Zusammenfassungen berechnet.

Die folgende Abfrage veranschaulicht diesen Operator:

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

Wird die Abfrage nach SingerId gruppiert und eine AVG-Zusammenfassung sowie eine COUNT-Zusammenfassung durchgeführt.

Das Segment des Ausführungsplans sieht so aus:

Ausführungsplan für den Operator „Aggregate“

Mit dem Operator "Aggregate" können streambasierte oder hashbasierte Zusammenfassungen erstellt werden. Der vorherige Ausführungsplan zeigt eine streambasierte Zusammenfassung. Streambasierte Zusammenfassungen lesen bereits vorsortierte Eingaben aus (wenn GROUP BY vorhanden ist) und berechnen die Gruppe ohne Blockierung. Hashbasierte Zusammenfassungen erstellen Hashtabellen, um inkrementelle Zusammenfassungen mehrerer Eingabezeilen gleichzeitig bereitzuhalten. Streambasierte Zusammenfassungen sind schneller und benötigen weniger Speicher als hashbasierte Zusammenfassungen. Die Eingabe muss jedoch nach Schlüsselspalten oder sekundären Indexen sortiert sein.

Bei verteilten Szenarien wird der Operator „Aggregate“ in ein lokales/globales Paar aufgeteilt. Jeder Remoteserver führt eine lokale Zusammenfassung seiner Eingabezeile durch und gibt dann seine Ergebnisse an den Stammserver zurück. Der Stammserver führt die globale Zusammenfassung durch.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Eigenschaften

Name Beschreibung
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Apply Mutations

Der Operator Apply Mutations wendet die Mutationen aus einer DML-Anweisung auf die Tabelle an. Er ist der oberste Operator in einem Abfrageplan für eine DML-Anweisung.

Die folgende Abfrage veranschaulicht diesen Operator:

DELETE FROM singers
WHERE  firstname = 'Alice';

/*
4 rows deleted  This statement deleted 4 rows and did not return any rows.
*/

Der Ausführungsplan sieht so aus:

Ausführungsplan für den Operator „Apply Mutations“

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Eigenschaften

Name Beschreibung
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Batch erstellen

Der Operator Create Batch erstellt eine Batchsequenz seiner Eingabezeilen. Der Operator „Create Batch“ wird normalerweise im Rahmen der Operation Distributed Cross Apply ausgeführt. Die Eingabezeilen können bei der Batchverarbeitung neu geordnet werden. Die Anzahl der Eingabezeilen, die bei der jeweiligen Ausführung des Batch-Operators zu einem Batch zusammengefasst werden, ist variabel.

Beim Operator Distributed Cross Apply finden Sie ein Beispiel für den Operator "Create Batch" in einem Ausführungsplan.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Eigenschaften

Name Beschreibung
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Compute

Der Operator Compute erzeugt eine Ausgabe, indem er die Eingabezeilen ausliest und eine oder mehrere zusätzliche Spalten hinzufügt, die über skalare Ausdrücke berechnet werden. Beim Operator Union All finden Sie ein Beispiel des Operators "Compute" in einem Ausführungsplan.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Eigenschaften

Name Beschreibung
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Compute Struct

Der Operator Compute Struct erstellt eine Variable für eine Struktur, die Felder für alle Eingabespalten enthält.

Die folgende Abfrage veranschaulicht diesen Operator:

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

Der Ausführungsplan sieht so aus:

Ausführungsplan für den Operator „Compute Struct“

Im Ausführungsplan empfängt der Operator "Array Subquery" eine Eingabe vom Operator "Compute Struct". Der Operator „Compute Struct“ erstellt eine Struktur aus den Spalten SongName und SongGenre der Tabelle Songs.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Eigenschaften

Name Beschreibung
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Filter

Der Operator Filter liest alle Zeilen der Eingabe aus, wendet ein skalares Prädikat auf jede Zeile an und gibt dann nur die Zeilen zurück, die das Prädikat erfüllen.

Die folgende Abfrage veranschaulicht diesen Operator:

SELECT s.lastname
FROM   (SELECT s.lastname
        FROM   singers AS s
        LIMIT  3) s
WHERE  s.lastname LIKE 'Rich%';

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

Der Ausführungsplan sieht so aus:

Ausführungsplan für Filteroperator

In Spanner wird das Prädikat für Interpreten, deren Nachname mit Rich beginnt, als Filter implementiert. Der Filter empfängt Eingaben von einem Indexscan und gibt Zeilen aus, in denen LastName mit Rich beginnt.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Limit

Der Operator Limit beschränkt die Anzahl der zurückgegebenen Zeilen. Ein optionaler Parameter OFFSET gibt die erste Zeile an, die zurückgegeben werden soll. Bei verteilten Szenarien wird der Operator „Limit“ in ein lokales/globales Paar aufgeteilt. Jeder Remoteserver wendet das lokale Limit auf seine Ausgabezeilen an und gibt dann seine Ergebnisse an den Root-Server zurück. Der Stammserver fasst die von den Remoteservern gesendeten Zeilen zusammen und wendet dann das globale Limit an.

Die folgende Abfrage veranschaulicht diesen Operator:

SELECT s.songname
FROM   songs AS s
LIMIT  3;

/*----------------------+
 | SongName             |
 +----------------------+
 | Not About The Guitar |
 | The Second Time      |
 | Starting Again       |
 +----------------------*/

Der Ausführungsplan sieht so aus:

Ausführungsplan für den Operator „Limit“

Das lokale Limit gilt jeweils für die Remoteserver. Der Stammserver fasst die Zeilen von den Remoteservern zusammen und wendet dann das globale Limit an.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Zufalls-ID-Zuweisung

Der Operator Random ID Assign generiert eine Ausgabe. Dazu liest er seine Eingabezeilen und fügt jeder Zeile eine Zufallszahl hinzu. Es funktioniert mit dem Operator Filter oder Sort, um Stichprobenmethoden zu erhalten. Die unterstützten Stichprobenverfahren sind Bernoulli und Reservoir.

Die folgende Abfrage verwendet zum Beispiel die Bernoulli-Stichprobenmethode mit einer Abtastrate von 10 %.

SELECT s.songname
FROM   songs AS s TABLESAMPLE bernoulli (10 PERCENT);

/*----------------+
 | SongName       |
 +----------------+
 | Starting Again |
 +----------------*/

Da es sich bei dem Ergebnis um eine Stichprobe handelt, kann es bei jeder Ausführung variieren, obwohl die Abfrage dieselbe ist.

Ausführungsplan für den Operator „Bernoulli Sample“

In diesem Ausführungsplan erhält der Operator Random Id Assign seine Eingabe vom Operator Distributed Union, der seine Eingabe von einer Indexsuche empfängt. Der Operator gibt die Zeilen mit zufälligen IDs zurück und der Operator Filter wendet dann ein Skalarprädikat für die Zufalls-IDs an und gibt etwa 10 % der Zeilen zurück.

Im folgenden Beispiel wird Reservoir verwendet.

Stichprobenerfassung mit einer Stichprobenrate von zwei Zeilen verwendet.

SELECT s.songname
FROM   songs AS s TABLESAMPLE reservoir (2 rows);

/*------------------------+
 | SongName               |
 +------------------------+
 | I Knew You Were Magic  |
 | The Second Time        |
 +------------------------*/

Da es sich bei dem Ergebnis um eine Stichprobe handelt, kann es bei jeder Ausführung variieren, obwohl die Abfrage dieselbe ist.

Dies ist der Ausführungsplan:

Ausführungsplan für den Operator „Reservoir Sample“

In diesem Ausführungsplan erhält der Operator Random Id Assign seine Eingabe vom Operator Distributed Union, der seine Eingabe von einer Indexsuche empfängt. Der Operator gibt die Zeilen mit zufälligen IDs zurück und der Operator Sort wendet dann die Sortierreihenfolge auf die zufälligen IDs an und wendet LIMIT mit zwei Zeilen an.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Lokale Split-Gewerkschaft

Der Operator Local Split Union sucht nach Tabellen-Splits, die auf dem lokalen Server gespeichert sind, führt eine Teilabfrage für jeden Split aus und erstellt dann eine Union, in der alle Ergebnisse kombiniert werden.

Eine Local Split Union wird in Ausführungsplänen angezeigt, in denen eine Placement-Tabelle gescannt wird. Durch die Platzierung kann die Anzahl der Splits in einer Tabelle erhöht werden. So lassen sich Splits effizienter in Batches scannen, die auf ihren physischen Speicherorten basieren.

Angenommen, in der Tabelle Singers wird ein Placement-Schlüssel zum Partitionieren von Sängerdaten verwendet:

CREATE TABLE Singers (
    SingerId INT64 NOT NULL,
    SingerName STRING(MAX) NOT NULL,
    ...
    Location STRING(MAX) NOT NULL PLACEMENT KEY
) PRIMARY KEY (SingerId);

Sehen Sie sich nun diese Abfrage an:

SELECT BirthDate FROM Singers;

Dies ist der Ausführungsplan:

Ausführungsplan für den Operator „Local Split Union“

Mit der verteilten UNION wird eine Unterabfrage an jeden Batch von Splits gesendet, die physisch auf demselben Server gespeichert sind. Auf jedem Server sucht die Local Split Union nach Splits, in denen Singers-Daten gespeichert sind, führt die Unterabfrage für jeden Split aus und gibt die kombinierten Ergebnisse zurück. So arbeiten die Distributed Union und die Local Split Union zusammen, um die Tabelle Singers effizient zu scannen. Ohne eine lokale Split Union würde die Distributed Union einen RPC pro Split anstelle von pro Split-Batch senden, was zu redundanten RPC-Roundtrips führen würde, wenn es mehr als einen Split pro Batch gibt.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

DataBlockToRowAdapter

Das Spanner-Abfrageoptimierungstool fügt automatisch einen DataBlockToRowAdapter-Operator zwischen zwei Operatoren ein, die mit unterschiedlichen Ausführungsmethoden arbeiten. Die Eingabe ist ein Operator, der die batchorientierte Ausführungsmethode verwendet, und die Ausgabe wird in einen Operator eingespeist, der die zeilenorientierte Ausführungsmethode verwendet. Weitere Informationen finden Sie unter Abfrageausführung optimieren.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

RowToDataBlockAdapter

Das Spanner-Abfrageoptimierungstool fügt automatisch einen RowToDataBlockAdapter-Operator zwischen zwei Operatoren ein, die mit unterschiedlichen Ausführungsmethoden arbeiten. Die Eingabe ist ein Operator, der die zeilenorientierte Ausführungsmethode verwendet, und die Ausgabe wird in einen Operator eingespeist, der die batchorientierte Ausführungsmethode verwendet. Weitere Informationen finden Sie unter Abfrageausführung optimieren.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Serialize Result

Der Operator Serialize Result ist ein Spezialfall des Operators "Compute Struct", der jede Zeile des Endergebnisses der Abfrage serialisiert, um sie an den Client zurückzugeben.

Die folgende Abfrage veranschaulicht diesen Operator:

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"]]                              |
 | []                                                               |
 | []                                                               |
 +------------------------------------------------------------------*/

Der Ausführungsplan sieht so aus:

Ausführungsplan für den Operator „Serialize Result“

Der Operator "Serialize Result" erzeugt ein Ergebnis, das für jede Zeile der Tabelle Singers ein Array von SongName- und SongGenre-Paaren für die Lieder des Sängers enthält.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Sortieren

Der Operator Sort liest die Eingabezeilen aus, sortiert sie nach Spalten und gibt dann die sortierten Ergebnisse zurück.

Die folgende Abfrage veranschaulicht diesen Operator:

SELECT s.songgenre
FROM   songs AS s
ORDER  BY songgenre;

/*--------------------------+
 | SongGenre                |
 +--------------------------+
 | BLUES                    |
 | BLUES                    |
 | BLUES                    |
 | BLUES                    |
 | CLASSICAL                |
 | COUNTRY                  |
 | ROCK                     |
 | ROCK                     |
 | ROCK                     |
 +--------------------------*/

Der Ausführungsplan sieht so aus:

Ausführungsplan für Sortieroperator

In diesem Ausführungsplan erhält der Operator "Sort" die Eingabezeilen vom Operator Distributed Union, sortiert die Eingabezeilen und gibt die sortierten Zeilen an den Operator Serialize Result zurück.

Um die Anzahl der zurückgegebenen Zeilen zu beschränken, kann der Operator "Sort" optional die Parameter LIMIT und OFFSET haben. Bei verteilten Szenarien wird der Operator „Sort“ mit dem Operator LIMIT oder OFFSET in ein lokales/globales Paar aufgeteilt. Jeder Remoteserver führt die Sortierung der Eingabezeilen mit der Begrenzung und dem Startwert lokal durch und gibt dann seine Ergebnisse an den Stammserver zurück. Der Stammserver fasst die von den Remoteservern gesendeten Zeilen zusammen, sortiert sie und wendet dann global die Operatoren "Limit" und "Offset" an.

Die folgende Abfrage veranschaulicht diesen Operator:

SELECT s.songgenre
FROM   songs AS s
ORDER  BY songgenre
LIMIT  3;

/*--------------------------+
 | SongGenre                |
 +--------------------------+
 | BLUES                    |
 | BLUES                    |
 | BLUES                    |
 +--------------------------*/

Der Ausführungsplan sieht so aus:

Ausführungsplan für den Operator „Sort“ mit Limit

Im Ausführungsplan wird das lokale Limit für die Remoteserver und das globale Limit für den Stammserver aufgeführt.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

TVF

Der Operator Tabellenwertfunktion generiert eine Ausgabe. Dazu liest er seine Eingabezeilen und wendet die angegebene Funktion an. Die Funktion kann die Zuordnung implementieren und dieselbe Anzahl von Zeilen wie die Eingabe zurückgeben. Es kann sich auch um einen Generator handeln, der mehr Zeilen zurückgibt, oder um einen Filter, der weniger Zeilen zurückgibt.

Die folgende Abfrage veranschaulicht diesen Operator:

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

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.

Union Input

Der Operator Union Input gibt Ergebnisse an den Operator Union All zurück. Beim Operator Union All finden Sie ein Beispiel des Operators "Union Input" in einem Ausführungsplan.

Attribute und Ausführungsstatistiken

Eine Eigenschaft eines Operators beschreibt ein Merkmal, das bei der Ausführung des Operators verwendet wird. Eine Ausführungsstatistik ist ein Wert, der während der Ausführung einer Abfrage erfasst wird, um die Leistung des Operators zu bewerten.

Der Operator Filter hat zusätzliche eindeutige Eigenschaften.

Eigenschaften

Name Beschreibung
Bedingung Ein Prädikat, das auf jede Eingabezeile angewendet wird. Wenn „true“, wird die Zeile an den nächsten Operator übergeben. Wenn „false“, wird die Zeile verworfen.
Ausführungsmethode Bei der zeilenweisen Ausführung verarbeitet der Operator jeweils eine Zeile. Bei der Batchausführung verarbeitet der Operator einen Batch von Zeilen gleichzeitig.

Ausführungsstatistiken

Name Beschreibung
Latenz Verstrichene Zeit aller Ausführungen im Operator.
Kumulative Latenz Die Gesamtzeit des aktuellen Operators und seiner untergeordneten Elemente.
CPU-Zeit Summe der CPU-Zeit, die für die Ausführung des Operators aufgewendet wurde.
Kumulative CPU-Zeit Die gesamte CPU-Zeit, die für die Ausführung des Operators und seiner untergeordneten Elemente aufgewendet wurde.
Ausführungszeit Die Gesamtzeit, die zum Ausführen der Abfrage und zum Verarbeiten der Ergebnisse benötigt wurde.
Zurückgegebene Zeilen Die Anzahl der Zeilen, die von diesem Operator ausgegeben werden
Anzahl der Ausführungen Gibt an, wie oft der Operator ausgeführt wurde. Einige Ausführungen können parallel ausgeführt werden.