연속 쿼리의 윈도우 집계 이해
이 기능에 대한 지원을 요청하거나 의견을 제공하려면 bq-continuous-queries-feedback@google.com으로 이메일을 보내세요.
BigQuery 연속 쿼리는 집계 및 윈도잉을 상태 저장 작업으로 지원합니다. 상태 저장 작업을 사용하면 연속 쿼리가 여러 행 또는 시간 간격에 걸쳐 정보를 유지해야 하는 복잡한 분석을 실행할 수 있습니다. 이 기능을 사용하면 쿼리가 실행되는 동안 필요한 데이터를 메모리에 저장하여 30분 평균과 같은 시간 경과에 따른 측정항목을 계산할 수 있습니다.
윈도잉 함수는 변경사항을 적용한 트랜잭션의 커밋 시간을 나타내는 시스템 시간을 기반으로 데이터를 논리적 구성요소(창)에 할당합니다. BigQuery에서 이러한 함수는 모든 원본 열과 window_start 및 window_end이라는 두 개의 추가 열을 포함하는 테이블을 반환하는 테이블 값 함수(TVF)입니다. 이 열은 각 윈도우의 시간 간격을 식별합니다. 상태 저장 작업에 관한 자세한 내용은 지원되는 상태 저장 작업을 참고하세요.
윈도우 TVF는 BigQuery 연속 쿼리에서만 지원됩니다.
윈도우 TVF는 윈도우 함수 호출과 다릅니다.
지원되는 집계 함수
다음 집계 함수가 지원됩니다.
ANY_VALUEAPPROX_COUNT_DISTINCTAPPROX_QUANTILESAPPROX_TOP_COUNTAPPROX_TOP_SUMARRAY_AGG다음 요구사항을 충족해야 합니다.LIMIT절이 필요하며 최댓값은 10,000입니다.ORDER BY절은 선택사항입니다.
ARRAY_CONCAT_AGGAVGBIT_ANDBIT_ORBIT_XORCORRCOUNTCOUNTIFCOVAR_POPCOVAR_SAMPLOGICAL_ANDLOGICAL_ORMAXMAX_BYMINMIN_BYSTDDEVSTDDEV_POPSTDDEV_SAMPSTRING_AGG다음 요구사항을 충족해야 합니다.LIMIT절이 필요하며 최댓값은 100입니다.ORDER BY절은 선택사항입니다.
SUMVAR_POPVAR_SAMPVARIANCE
지원되지 않는 집계 함수
다음 집계 함수는 지원되지 않습니다.
AVG(차등 개인 정보 보호)COUNT(차등 개인 정보 보호)DISTINCT표현식이 포함된 함수GROUPINGPERCENTILE_CONT(차등 개인 정보 보호)ST_CENTROID_AGGST_EXTENTST_UNION_AGGSUM(차등 개인 정보 보호)
TUMBLE 함수
TUMBLE 함수는 데이터를 지정된 크기의 겹치지 않는 시간 간격 (텀블링 기간)에 할당합니다. 예를 들어 5분 윈도우는 이벤트를 [2026-01-01 12:00:00, 2026-01-01 12:05:00) 및 [2026-01-01 12:05:00, 2026-01-01 12:10:00)과 같은 개별 간격으로 그룹화합니다. 타임스탬프 값이 2026-01-01 12:03:18인 행이 첫 번째 윈도우에 할당됩니다. 이러한 윈도우는 분리되어 있고 겹치지 않으므로 타임스탬프가 있는 모든 요소는 정확히 하나의 윈도우에 할당됩니다.
다음 다이어그램은 TUMBLE 함수가 중복되지 않는 시간 간격에 이벤트를 할당하는 방법을 보여줍니다.
이 함수를 실시간 이벤트 처리에서 사용하여 집계를 실행하기 전에 시간 범위별로 이벤트를 그룹화할 수 있습니다.
구문
TUMBLE(TABLE table, "timestamp_column", window_size)
정의
table: BigQuery 테이블 이름입니다.APPENDS함수 내에 래핑된 표준 BigQuery 테이블이어야 합니다. 이 인수 앞에는TABLE단어가 와야 합니다.timestamp_column: 이벤트 시간이 포함된 입력 테이블의 열 이름을 지정하는STRING리터럴입니다. 이 열의 값은 각 행을 윈도우에 할당합니다. BigQuery 시스템 시간을 정의하는_CHANGE_TIMESTAMP열은 지원되는 유일한timestamp_column입니다. 사용자 정의 열은 지원되지 않습니다.window_size: 각 텀블링 윈도우의 기간을 정의하는INTERVAL값입니다. 기간은 최대 24시간입니다. 예를 들면INTERVAL 30 SECOND입니다.
출력
TUMBLE 함수는 다음 열이 포함된 출력을 반환합니다.
쿼리 실행 시점에 입력 테이블의 모든 열입니다.
window_start: 레코드가 속한 기간의 시작 시간(포함)을 나타내는TIMESTAMP값입니다.window_end: 레코드가 속한 기간의 배타적 종료 시간을 나타내는TIMESTAMP값입니다.
출력 구체화
BigQuery 연속 쿼리에서 윈도우화된 집계는 BigQuery가 해당 윈도우를 완료하거나 닫을 때까지 특정 시간 간격에 대한 출력을 생성하지 않습니다. 이 동작은 BigQuery가 해당 윈도우의 관련 데이터를 모두 처리한 후에만 집계된 결과를 내보내도록 합니다.
예를 들어 user_clickstream 테이블에서 5분 TUMBLE 기간 집계를 실행하면 [10:15; 10:20) 간격의 결과는 쿼리에서 _CHANGE_TIMESTAMP가 10:20 이상인 레코드를 처리한 후에만 내보내집니다. 이때 BigQuery는 윈도우가 닫힌 것으로 간주합니다.
또한 특정 기간에 속하는 첫 번째 레코드가 표시되는 순간 창이 열리고 데이터가 누적되기 시작합니다.
창이 열려 있는 동안 BigQuery는 중간 집계 결과를 유지해야 합니다. 이렇게 하려면 상태를 저장해야 하므로 BigQuery가 중간 집계 결과를 보존해야 합니다. 이 상태는 창이 닫힐 때까지 활성 메모리에 유지되어야 하므로 창 기간을 길게 사용하거나 대량 스트림을 처리하면 저장된 컨텍스트의 증가된 양을 관리하기 위해 슬롯 사용률이 높아집니다. 자세한 내용은 가격 책정 고려사항을 참고하세요.
제한사항
TUMBLE함수는 BigQuery 연속 쿼리에서만 지원됩니다.TUMBLE함수로 연속 쿼리를 시작할 때는APPENDS함수만 사용할 수 있습니다.CHANGES함수는 지원되지 않습니다._CHANGE_TIMESTAMP로 정의된 BigQuery 시스템 시간 열만 지원되는timestamp_column입니다. 사용자 정의 열은 지원되지 않습니다.- 기간은 최대 24시간입니다.
TUMBLE윈도우 함수가 실행되면window_start및window_end라는 두 개의 추가 출력 열이 생성됩니다. 창 집계를 실행하는SELECT문 내의GROUP BY문에 이러한 열 중 하나 이상을 포함해야 합니다.- 연속 쿼리 조인과 함께
TUMBLE함수를 사용하는 경우 모든 연속 쿼리 조인 제한사항을 따라야 합니다.
가격 책정 고려사항
BigQuery 연속 쿼리는 작업이 실행되는 동안 소비된 컴퓨팅 용량 (슬롯)을 기준으로 요금을 청구합니다. 이 컴퓨팅 기반 모델은 윈도우화와 같은 상태 저장 작업에도 적용됩니다. 윈도우 처리를 사용하면 쿼리가 활성 상태일 때 BigQuery에서 '상태'를 저장해야 하므로 추가 슬롯 리소스가 소비됩니다. 일반적으로 창 내에 저장된 컨텍스트나 데이터가 많을수록(예: 더 긴 창 기간을 사용하는 경우) BigQuery에서 유지해야 하는 상태가 많아집니다. 이렇게 하면 슬롯 활용도가 높아집니다.
예시
다음 쿼리는 택시 탑승 테이블을 쿼리하여 30분마다 스트리밍 평균 탑승 수, 승객 수, 택시당 평균 요금을 가져오고 이 데이터를 BigQuery의 테이블로 내보내는 방법을 보여줍니다.
INSERT INTO
`real_time_taxi_streaming.driver_stats`
WITH ride_completions AS (
SELECT
_CHANGE_TIMESTAMP as bq_changed_ts,
CAST(timestamp AS DATE) AS ride_date,
taxi_id,
meter_reading,
passenger_count
FROM
APPENDS(TABLE `real_time_taxi_streaming.taxirides`,
CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE)
WHERE
ride_status = 'dropoff')
SELECT
ride_date,
window_end,
taxi_id,
COUNT(taxi_id) AS total_rides_per_half_hour,
ROUND(AVG(meter_reading),2) AS avg_fare_per_half_hour,
SUM(passenger_count) AS total_passengers_per_half_hour
FROM
tumble(TABLE ride_completions,"bq_changed_ts",INTERVAL 30 MINUTE)
GROUP BY
window_end,
ride_date,
taxi_id
다음 단계
- 조인, 집계, 윈도우 함수를 실행하는 방법을 알아보세요.
- BigQuery 연속 쿼리에 대해 자세히 알아보세요.
- 여러 스트림의 데이터를 결합하는 방법을 알아보세요.