단항 연산자에는 하나의 관계형 하위 요소가 있습니다.
다음 연산자들이 단항 연산자입니다.
- 집계
- 변형 적용
- 배치 만들기
- 컴퓨팅
- 컴퓨팅 구조체
- DataBlockToRowAdapter
- 필터
- 한도
- 로컬 분할 통합
- 임의 ID 할당
- RowToDataBlockAdapter
- 결과 직렬화
- 정렬
- TVF
- 통합 입력
데이터베이스 스키마
이 페이지의 쿼리 및 실행 계획은 다음 데이터베이스 스키마를 기반으로 합니다.
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");
집계
집계 연산자는 GROUP BY SQL 문과 집계 함수(예: COUNT)를 실행합니다. 집계 연산자의 입력은 키 열에 정렬된 그룹(또는 GROUP BY가 없는 경우 단일 그룹)으로 논리적으로 분할됩니다. 각 그룹에 대해 0개 이상의 집계가 계산됩니다.
다음 쿼리는 이 연산자를 보여줍니다.
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 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
변형 적용
변형 적용 연산자는 데이터 조작 언어 (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 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
배치 만들기
배치 만들기 연산자는 입력 행을 하나의 시퀀스로 일괄 처리합니다. 배치 만들기 연산은 일반적으로 분산 교차 적용 연산의 일부로 수행됩니다. 입력 행은 일괄 처리 중에 다시 정렬될 수 있습니다. 일괄 연산자를 실행할 때마다 일괄 처리되는 입력 행 수는 달라집니다.
실행 계획에서 배치 만들기 연산자의 예시를 보려면 분산 교차 적용 연산자를 참조하세요.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
속성
| 이름 | 설명 |
|---|---|
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
컴퓨팅
컴퓨팅 연산자는 입력 행을 읽고 스칼라 표현식을 사용하여 계산된 추가 열을 한 개 이상 추가하여 출력을 생성합니다. 실행 계획에서 컴퓨팅 연산자의 예시를 보려면 전체 통합 연산자를 참조하세요.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
속성
| 이름 | 설명 |
|---|---|
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
컴퓨팅 구조체
컴퓨팅 구조체 연산자는 각 입력 열의 필드가 있는 구조체 변수를 만듭니다.
다음 쿼리는 이 연산자를 보여줍니다.
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"]] |
+-----------+------------------------------------------------------*/
실행 계획은 다음과 같이 표시됩니다.

실행 계획에서 배열 서브 쿼리 연산자는 컴퓨팅 구조체 연산자로부터 입력을 받습니다. 컴퓨팅 구조체 연산자는 Songs 테이블의 SongName 및 SongGenre 열에서 구조체를 만듭니다.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
속성
| 이름 | 설명 |
|---|---|
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
필터
필터 연산자는 입력에서 모든 행을 읽고 각 행에서 스칼라 조건자를 적용한 후 이 조건자를 충족하는 행만 반환합니다.
다음 쿼리는 이 연산자를 보여줍니다.
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로 시작하는 행을 출력합니다.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
한도
제한 연산자는 반환되는 행 수를 제한합니다. 선택사항인 OFFSET 매개변수는 반환할 시작 행을 지정합니다. 분산 시나리오에서 제한 연산자는 로컬-전역 쌍으로 분리됩니다. 각 원격 서버는 출력 행에 대해 로컬 제한을 적용한 후 결과를 루트 서버에 반환합니다. 루트 서버는 원격 서버가 보낸 행을 집계한 후 전역 제한을 적용합니다.
다음 쿼리는 이 연산자를 보여줍니다.
SELECT s.songname
FROM songs AS s
LIMIT 3;
/*----------------------+
| SongName |
+----------------------+
| Not About The Guitar |
| The Second Time |
| Starting Again |
+----------------------*/
실행 계획은 다음과 같이 표시됩니다.

로컬 제한은 각 원격 서버에 대한 제한입니다. 루트 서버는 원격 서버의 행을 집계한 후 전역 제한을 적용합니다.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
임의 ID 할당
임의 ID 할당 연산자는 입력 행을 읽고 각 행에 임의의 숫자를 추가하여 출력을 생성합니다. Filter 또는 Sort 연산자와 함께 작동하여 샘플링 방법을 수행합니다. 지원되는 샘플링 방법으로는 Bernoulli와 Reservoir가 있습니다.
예를 들어 다음 쿼리에서는 샘플링 레이트가 10%인 Bernoulli 샘플링을 사용합니다.
SELECT s.songname
FROM songs AS s TABLESAMPLE bernoulli (10 PERCENT);
/*----------------+
| SongName |
+----------------+
| Starting Again |
+----------------*/
결과는 샘플이므로 쿼리가 동일해도 쿼리를 실행할 때마다 결과가 달라질 수 있습니다.

이 실행 계획에서 Random Id Assign 샘플 연산자는 분산 통합 연산자로부터 입력을 받으며 분산 통합 연산자는 색인 스캔 연산자로부터 입력을 받습니다. 연산자는 임의 ID가 있는 행을 반환하고 Filter 연산자는 임의 ID에 스칼라 조건자를 적용하고 행의 약 10%를 반환합니다.
다음 예시는 행 2개의 샘플링 레이트로 Reservoir
샘플링을 사용합니다.
SELECT s.songname
FROM songs AS s TABLESAMPLE reservoir (2 rows);
/*------------------------+
| SongName |
+------------------------+
| I Knew You Were Magic |
| The Second Time |
+------------------------*/
결과는 샘플이므로 쿼리가 동일해도 쿼리를 실행할 때마다 결과가 달라질 수 있습니다.
다음은 실행 계획입니다.

이 실행 계획에서 Random Id Assign 샘플 연산자는 분산 통합 연산자로부터 입력을 받으며 분산 통합 연산자는 색인 스캔 연산자로부터 입력을 받습니다. 연산자는 임의 ID가 있는 행을 반환하고 Sort 연산자는 임의 ID에 정렬 순서를 적용하고 2개의 행으로 LIMIT을 적용합니다.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
로컬 분할 통합
로컬 분할 통합 연산자는 로컬 서버에 저장된 테이블 분할을 찾고 각 분할에서 서브 쿼리를 실행한 후 모든 결과를 결합하는 통합을 만듭니다.
배치 테이블을 스캔하는 실행 계획에 로컬 분할 통합이 표시됩니다. 배치를 사용하면 테이블의 분할 수가 늘어나므로 물리적 스토리지 위치에 따라 일괄적으로 분할을 스캔하는 것이 더 효율적입니다.
예를 들어 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;
다음은 실행 계획입니다.

분산 통합은 동일한 서버에 물리적으로 함께 저장된 각 분할 배치로 서브 쿼리를 전송합니다. 각 서버에서 로컬 분할 통합은 Singers 데이터를 저장하는 분할을 찾고 각 분할에서 서브 쿼리를 실행한 후 결합된 결과를 반환합니다. 이렇게 하면 분산 통합과 로컬 분할 통합이 함께 작동하여 Singers 테이블을 효율적으로 스캔합니다. 로컬 분할 통합이 없으면 분산 통합은 분할 배치당이 아닌 분할당 하나의 RPC를 보내므로 배치당 둘 이상의 분할이 있는 경우 중복된 RPC 왕복이 발생합니다.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
DataBlockToRowAdapter
Spanner 쿼리 옵티마이저는 서로 다른 실행 메서드를 사용하여 작동하는 연산자 쌍 사이에 DataBlockToRowAdapter 연산자를 자동으로 삽입합니다. 입력은 일괄 지향 실행 메서드를 사용하는 연산자이고 출력은 행 지향 실행 메서드에서 실행되는 연산자에 제공됩니다. 자세한 내용은 쿼리 실행 최적화를 참조하세요.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
RowToDataBlockAdapter
Spanner 쿼리 옵티마이저는 서로 다른 실행 메서드를 사용하여 작동하는 연산자 쌍 사이에 RowToDataBlockAdapter 연산자를 자동으로 삽입합니다. 입력은 행 지향 실행 메서드를 사용하는 연산자이고 출력은 일괄 지향 실행 메서드에서 실행되는 연산자에 제공됩니다. 자세한 내용은 쿼리 실행 최적화를 참조하세요.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
결과 직렬화
결과 직렬화 연산자는 클라이언트에 반환하기 위해 쿼리의 최종 결과에 있는 각 행을 직렬화하는 컴퓨팅 구조체 연산자의 특수한 경우입니다.
다음 쿼리는 이 연산자를 보여줍니다.
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"]] |
| [] |
| [] |
+------------------------------------------------------------------*/
실행 계획은 다음과 같이 표시됩니다.

결과 직렬화 연산자는 Singers 테이블의 각 행에 대해 가수의 곡에 대한 SongName과 SongGenre 쌍의 배열을 포함하는 결과를 만듭니다.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
정렬
정렬 연산자는 입력 행을 읽고 열을 기준으로 이를 정렬한 후 정렬된 결과를 반환합니다.
다음 쿼리는 이 연산자를 보여줍니다.
SELECT s.songgenre
FROM songs AS s
ORDER BY songgenre;
/*--------------------------+
| SongGenre |
+--------------------------+
| BLUES |
| BLUES |
| BLUES |
| BLUES |
| CLASSICAL |
| COUNTRY |
| ROCK |
| ROCK |
| ROCK |
+--------------------------*/
실행 계획은 다음과 같이 표시됩니다.

이 실행 계획에서 정렬 연산자는 분산 통합 연산자로부터 입력 행을 받아 입력 행을 정렬하고 정렬된 행을 결과 직렬화 연산자로 반환합니다.
반환되는 행 수를 제한하기 위해 정렬 연산자는 선택적으로 LIMIT 및 OFFSET 매개변수를 사용할 수 있습니다. 분산 시나리오의 경우, LIMIT 또는 OFFSET 연산자가 있는 정렬 연산자는 로컬-전역 쌍으로 분리됩니다. 각 원격 서버는 입력 행에 대한 정렬 순서와 로컬 제한 또는 오프셋을 적용한 후 결과를 루트 서버에 반환합니다. 루트 서버는 원격 서버가 보낸 행을 집계하고 정렬한 후 전역 제한/오프셋을 적용합니다.
다음 쿼리는 이 연산자를 보여줍니다.
SELECT s.songgenre
FROM songs AS s
ORDER BY songgenre
LIMIT 3;
/*--------------------------+
| SongGenre |
+--------------------------+
| BLUES |
| BLUES |
| BLUES |
+--------------------------*/
실행 계획은 다음과 같이 표시됩니다.

실행 계획에는 원격 서버에 대한 로컬 제한과 루트 서버에 대한 전역 제한이 표시됩니다.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 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 |
+-----------------------+--------------------------*/
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |
통합 입력
통합 입력 연산자는 결과를 전체 통합 연산자로 반환합니다. 실행 계획에서 통합 입력 연산자의 예시를 보려면 전체 통합 연산자를 참조하세요.
속성 및 실행 통계
연산자의 속성은 연산자가 실행될 때 사용되는 특성을 설명합니다. 실행 통계는 쿼리 실행 중에 수집되는 값으로, 연산자의 성능을 평가하는 데 도움이 됩니다.
필터 연산자에는 추가적인 고유 속성이 있습니다.속성
| 이름 | 설명 |
|---|---|
| 조건 | 각 입력 행에 적용되는 프레디케이트입니다. true이면 행이 다음 연산자에 전달되고, false이면 행이 삭제됩니다. |
| 실행 메소드입니다. | 행 실행에서 연산자는 한 번에 한 행을 처리합니다. 일괄 실행에서 연산자는 한 번에 행 배치를 처리합니다. |
실행 통계
| 이름 | 설명 |
|---|---|
| 지연 시간 | 연산자에서 실행된 모든 실행의 경과 시간입니다. |
| 누적 지연 시간 | 현재 연산자와 그 하위 요소의 총 시간입니다. |
| CPU 시간 | 연산자를 실행하는 데 사용된 CPU 시간의 합계입니다. |
| 누적 CPU 시간 | 연산자와 그 하위 요소를 실행하는 데 소요된 총 CPU 시간입니다. |
| 실행 시간 | 쿼리를 실행하고 결과를 처리하는 데 걸린 총시간입니다. |
| 반환된 행 | 이 연산자가 출력한 행 수 |
| 실행 횟수 | 연산자가 실행된 횟수입니다. 일부 실행은 동시에 실행할 수 있습니다. |