אופרטורים אונריים

לאופרטור אונארי יש צאצא יחיד שמייצג קשר.

האופרטורים הבאים הם אופרטורים אונריים:

סכימת מסד נתונים

השאילתות ותוכניות הביצוע בדף הזה מבוססות על סכימת מסד הנתונים הבאה:

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

אפשר להשתמש בהצהרות הבאות של שפת טיפול בנתונים (DML) כדי להוסיף נתונים לטבלאות האלה:

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

במצטבר

אופרטור aggregate מיישם הצהרות SQL של GROUP BY ופונקציות aggregate (כמו COUNT). הקלט של אופרטור aggregate מחולק באופן לוגי לקבוצות שמסודרות בעמודות מפתח (או לקבוצה אחת אם לא מופיע GROUP BY). לכל קבוצה מחושב צבירה אחת או יותר.

השאילתה הבאה מדגימה את האופרטור הזה:

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

השאילתה מקבצת לפי SingerId ומבצעת צבירה של AVG וצבירה של COUNT.

פלח תוכנית הביצוע מופיע כך:

תוכנית ביצוע של אופרטור מצטבר

אופרטורים של צבירה יכולים להיות מבוססי-סטרימינג או מבוססי-גיבוב. תוכנית הביצוע הקודמת מציגה צבירה מבוססת-זרם. מצטברים מבוססי-זרם נקראים מקלט ממוין מראש (אם יש GROUP BY) ומחשבים את הקבוצה בלי חסימה. מצטברים מבוססי-גיבוב יוצרים טבלאות גיבוב כדי לשמור על מצטברים מצטברים של מספר שורות קלט בו-זמנית. מצטברים מבוססי-זרם מהירים יותר וצורכים פחות זיכרון ממצטברים מבוססי-גיבוב, אבל הם דורשים שהקלט יהיה ממוין (לפי עמודות מפתח או לפי אינדקסים משניים).

בתרחישים מבוזרים, האופרטור המצטבר מתפצל לצמד מקומי-גלובלי. כל שרת מרוחק מבצע את צבירת הנתונים המקומית בשורות הקלט שלו, ואז מחזיר את התוצאות לשרת הבסיס. שרת הבסיס מבצע את הצבירה הגלובלית.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

מאפיינים

שם תיאור
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

החלת מוטציות

האופרטור apply mutations מחיל את המוטציות מהצהרה של שפת טיפול בנתונים (DML) על הטבלה. זהו האופרטור העליון בתוכנית שאילתה עבור פקודת DML.

השאילתה הבאה מדגימה את האופרטור הזה:

DELETE FROM singers
WHERE  firstname = 'Alice';

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

תוכנית הביצוע מוצגת כך:

החלת תוכנית ביצוע של אופרטור מוטציות

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

מאפיינים

שם תיאור
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

יצירת קבוצה

אופרטור create batch מאגד את שורות הקלט לרצף. פעולת יצירת חבילה מתרחשת בדרך כלל כחלק מפעולת החלה מבוזרת. אפשר לשנות את הסדר של שורות הקלט במהלך יצירת הבאצ'ים. מספר שורות הקלט שמצורפות לקבוצה בכל הפעלה של אופרטור הקבוצה משתנה.

דוגמה לאופרטור ליצירת אצווה בתוכנית ביצוע מופיעה במאמר בנושא אופרטור distributed cross apply.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

מאפיינים

שם תיאור
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

Compute

אופרטור חישוב יוצר פלט על ידי קריאת שורות הקלט והוספה של עמודה אחת או יותר שמחושבות באמצעות ביטויים סקלריים. דוגמה לאופרטור חישוב בתוכנית ביצוע מופיעה במאמר בנושא האופרטור union all.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

מאפיינים

שם תיאור
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

מבנה Compute

אופרטור compute struct יוצר משתנה למבנה שמכיל שדות לכל אחת מעמודות הקלט.

השאילתה הבאה מדגימה את האופרטור הזה:

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

תוכנית הביצוע מוצגת כך:

תוכנית ביצוע של אופרטור לחישוב מבנה

בתוכנית הביצוע, אופרטור שאילתת המשנה של המערך מקבל קלט מאופרטור של מבנה חישוב. אופרטור המבנה compute יוצר מבנה מהעמודות SongName ו-SongGenre בטבלה Songs.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

מאפיינים

שם תיאור
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

מסנן

אופרטור filter קורא את כל השורות מהקלט שלו, מחיל פרדיקט סקלרי על כל שורה ואז מחזיר רק את השורות שעומדות בפרדיקט.

השאילתה הבאה מדגימה את האופרטור הזה:

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

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

תוכנית הביצוע מוצגת כך:

תוכנית ביצוע של אופרטור סינון

מערכת Spanner מטמיעה את התנאי לזמרים ששם המשפחה שלהם מתחיל ב-Rich כמסנן. המסנן מקבל קלט מסריקת אינדקס ומחזיר שורות שבהן LastName מתחיל ב-Rich.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

הגבלה

אופרטור limit מגביל את מספר השורות שמוחזרות. פרמטר אופציונלי OFFSET מציין את השורה הראשונה שתוחזר. בתרחישים מבוזרים, אופרטור הגבלת התוצאות מתפצל לצמד מקומי-גלובלי. כל שרת מרוחק מחיל את המגבלה המקומית על שורות הפלט שלו, ואז מחזיר את התוצאות לשרת הבסיס. השרת הראשי מצבר את השורות שנשלחות מהשרתים המרוחקים ואז מחיל את המגבלה הגלובלית.

השאילתה הבאה מדגימה את האופרטור הזה:

SELECT s.songname
FROM   songs AS s
LIMIT  3;

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

תוכנית הביצוע מוצגת כך:

תוכנית ביצוע של אופרטור הגבלה

המגבלה המקומית היא המגבלה לכל שרת מרוחק. השרת הראשי מצבר את השורות מהשרתים המרוחקים ואז מחיל את המגבלה הגלובלית.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

הקצאת מזהה רנדומלי

אופרטור הקצאת מזהה אקראי יוצר פלט על ידי קריאת שורות הקלט והוספת מספר אקראי לכל שורה. היא פועלת עם האופרטורים Filter או Sort כדי להשיג שיטות דגימה. שיטות הדגימה הנתמכות הן ברנולי וReservoir.

לדוגמה, השאילתה הבאה משתמשת בדגימת ברנולי עם שיעור דגימה של 10 אחוזים.

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

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

התוצאה היא מדגם, ולכן היא יכולה להיות שונה בכל הרצה של השאילתה, גם אם השאילתה זהה.

תוכנית ביצוע של מפעיל לדגימת ברנולי

בתוכנית הביצוע הזו, האופרטור Random Id Assign מקבל את הקלט שלו מאופרטור של איחוד מבוזר, שמקבל את הקלט שלו מסריקת אינדקס. האופרטור מחזיר את השורות עם מזהים אקראיים, ואז האופרטור Filter מחיל פרדיקט סקלרי על המזהים האקראיים ומחזיר כ-10 אחוז מהשורות.

בדוגמה הבאה השתמשנו ב-Reservoir

דגימה עם תדירות דגימה של 2 שורות.

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

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

התוצאה היא מדגם, ולכן היא יכולה להיות שונה בכל הרצה של השאילתה, גם אם השאילתה זהה.

זוהי תוכנית הביצוע:

תוכנית ביצוע של מפעיל דגימות מאגר

בתוכנית הביצוע הזו, האופרטור Random Id Assign מקבל את הקלט שלו מאופרטור של איחוד מבוזר, שמקבל את הקלט שלו מסריקת אינדקס. האופרטור מחזיר את השורות עם מזהים רנדומליים, ואז האופרטור Sort מחיל את סדר המיון על המזהים הרנדומליים ומחיל את LIMIT עם 2 שורות.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

איגוד מקומי מפוצל

אופרטור local split union מוצא פיצולים של טבלה שמאוחסנים בשרת המקומי, מריץ שאילתת משנה על כל פיצול ואז יוצר איחוד שמשלב את כל התוצאות.

איחוד מקומי של פיצול מופיע בתוכניות ביצוע שסורקות טבלת מיקום. מיקומים יכולים להגדיל את מספר הפיצולים בטבלה, וכך להפוך את הסריקה של הפיצולים ליעילה יותר בקבוצות על סמך מיקומי האחסון הפיזיים שלהם.

לדוגמה, נניח שטבלת Singers משתמשת במפתח מיקום כדי לחלק למחיצות נתוני זמרים:

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

עכשיו, נניח שיש לכם את השאילתה הבאה:

SELECT BirthDate FROM Singers;

זוהי תוכנית הביצוע:

תוכנית ביצוע של אופרטור איחוד פיצול מקומי

הפונקציה distributed union שולחת שאילתת משנה לכל חבילה של פיצולים שמאוחסנים פיזית יחד באותו שרת. בכל שרת, האיחוד המקומי של הפיצולים מוצא פיצולים שמאחסנים נתוני Singers, מריץ את שאילתת המשנה על כל פיצול ומחזיר את התוצאות המשולבות. כך, הפעולות המפוצלות המקומיות והפעולות המפוצלות המבוזרות פועלות יחד כדי לסרוק את הטבלה Singers ביעילות. בלי איחוד מקומי מפוצל, האיחוד המפוצל ישלח RPC אחד לכל פיצול במקום לכל קבוצת פיצולים, וכתוצאה מכך יהיו נסיעות הלוך ושוב מיותרות של RPC אם יש יותר מפיצול אחד בכל קבוצה.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

DataBlockToRowAdapter

אופטימיזציית השאילתות של Spanner מוסיפה באופן אוטומטי אופרטור DataBlockToRowAdapter בין זוג אופרטורים שפועלים בשיטות ביצוע שונות. הקלט שלו הוא אופרטור שמשתמש בשיטת ההפעלה מבוססת-הקבוצות, והפלט שלו מוזן לאופרטור שמופעל בשיטת ההפעלה מבוססת-השורות. מידע נוסף זמין במאמר בנושא אופטימיזציה של ביצוע שאילתות.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

RowToDataBlockAdapter

אופטימיזציית השאילתות של Spanner מוסיפה באופן אוטומטי אופרטור RowToDataBlockAdapter בין זוג אופרטורים שפועלים בשיטות ביצוע שונות. הקלט שלה הוא אופרטור שמשתמש בשיטת ההפעלה מבוססת-השורה, והפלט שלה מוזן לאופרטור שמופעל בשיטת ההפעלה מבוססת-הקבוצה. מידע נוסף זמין במאמר בנושא אופטימיזציה של ביצוע שאילתות.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

סריאליזציה של התוצאה

האופרטור serialize result הוא מקרה מיוחד של האופרטור compute struct, שמבצע סריאליזציה של כל שורה בתוצאה הסופית של השאילתה, כדי להחזיר אותה ללקוח.

השאילתה הבאה מדגימה את האופרטור הזה:

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

תוכנית הביצוע תיראה כך:

‫Serialize result operator execution plan

אופרטור התוצאה של הסריאליזציה יוצר תוצאה שמכילה, לכל שורה בטבלה Singers, מערך של זוגות SongName ו-SongGenre של השירים של הזמר.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

מיון

אופרטור sort קורא את שורות הקלט, מסדר אותן לפי עמודות ואז מחזיר את התוצאות הממוינות.

השאילתה הבאה מדגימה את האופרטור הזה:

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

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

תוכנית הביצוע מוצגת כך:

מיון תוכנית הביצוע של האופרטור

בתוכנית הביצוע הזו, אופרטור המיון מקבל את שורות הקלט שלו מאופרטור distributed union, ממיין את שורות הקלט ומחזיר את השורות הממוינות לאופרטור serialize result.

כדי להגביל את מספר השורות שמוחזרות, אפשר להוסיף לאופרטור sort את הפרמטרים LIMIT ו-OFFSET. בתרחישים מבוזרים, אופרטור מיון עם האופרטור LIMIT או OFFSET מתפצל לצמד מקומי-גלובלי. כל שרת מרוחק מחיל את סדר המיון ואת המגבלה או ההיסט המקומיים על שורות הקלט שלו, ואז מחזיר את התוצאות לשרת הבסיס. שרת הבסיס (root) צובר את השורות שנשלחו על ידי השרתים המרוחקים, ממיין אותן ואז מיישם את המגבלה או ההיסט הגלובליים.

השאילתה הבאה מדגימה את האופרטור הזה:

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

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

תוכנית הביצוע תיראה כך:

מפעיל מיון עם תוכנית ביצוע של מגבלה

בתוכנית הביצוע מוצגת המגבלה המקומית של השרתים המרוחקים והמגבלה הגלובלית של שרת הבסיס.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

TVF

אופרטור של פונקציה שמחזירה טבלה מייצר פלט על ידי קריאת שורות הקלט והחלת הפונקציה שצוינה. יכול להיות שהפונקציה תיישם מיפוי ותחזיר את אותו מספר שורות כמו הקלט. יכול להיות גם שמדובר בגנרטור שמחזיר יותר שורות או במסנן שמחזיר פחות שורות.

השאילתה הבאה מדגימה את האופרטור הזה:

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

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.

קלט של איחוד

אופרטור union input מחזיר תוצאות לאופרטור union all. בדוגמה של אופרטור קלט של איחוד בתוכנית ביצוע אפשר לראות את האופרטור union all.

מאפיינים ונתונים סטטיסטיים של הרצה

מאפיין של אופרטור מתאר תכונה שמשמשת כשהאופרטור מופעל. סטטיסטיקת ביצוע היא ערך שנאסף במהלך ביצוע השאילתה כדי לעזור לכם להעריך את הביצועים של האופרטור.

לאופרטור Filter יש מאפיינים ייחודיים נוספים.

מאפיינים

שם תיאור
תנאי פרדיקט שמוחל על כל שורת קלט. אם הערך הוא True, השורה מועברת לאופרטור הבא. אם הערך הוא False, השורה מושמטת.
שיטת הביצוע בביצוע שורה, האופרטור מעבד שורה אחת בכל פעם. בביצוע באצ'ים, האופרטור מעבד באצ' של שורות בבת אחת.

נתוני ביצוע

שם תיאור
זמן אחזור הזמן שחלף מאז ההפעלה הראשונה של האופרטור.
זמן אחזור מצטבר הזמן הכולל של האופרטור הנוכחי והצאצאים שלו.
זמן CPU (מעבד) סכום הזמן שהמעבד השקיע בהרצת האופרטור.
זמן מצטבר של CPU (יחידת עיבוד מרכזית) הזמן הכולל של השימוש במעבד (CPU) במהלך ההפעלה של האופרטור ושל צאצאיו.
זמן הביצוע הזמן הכולל שנדרש להרצת השאילתה ולעיבוד התוצאות.
שורות שהוחזרו מספר השורות שהאופרטור הזה מוציא
מספר ההפעלות מספר הפעמים שהאופרטור הופעל. חלק מההרצות יכולות לפעול במקביל.