연속 쿼리에서 윈도우 집계 이해
이 기능에 대한 지원을 요청하거나 의견을 제공하려면 bq-continuous-queries-feedback@google.com으로 이메일을 보내세요.
BigQuery 연속 쿼리는 집계 및 윈도우를 스테이트풀(Stateful) 작업으로 지원합니다. 스테이트풀(Stateful) 작업을 사용하면 연속 쿼리가 여러 행 또는 시간 간격에 걸쳐 정보를 보관해야 하는 복잡한 분석을 실행할 수 있습니다. 이 기능을 사용하면 쿼리가 실행되는 동안 필요한 데이터를 메모리에 저장하여 30분 평균과 같은 시간 경과에 따른 측정항목을 계산할 수 있습니다.
윈도우 함수는 변경을 수행한 트랜잭션의 커밋 시간을 나타내는 시스템 시간을 기준으로 데이터를 논리적 구성요소 또는 윈도우에 할당합니다. BigQuery에서 이러한 함수는 모든 원래 열과 두 개의 추가 열(window_start 및 window_end)을 포함하는 테이블을 반환하는 테이블 반환 함수(TVF)입니다. 이러한 열은 각 윈도우의 시간 간격을 식별합니다. 스테이트풀(Stateful) 작업에 대한 자세한 내용은
지원되는 스테이트풀(Stateful) 작업을 참고하세요.
윈도우 TVF는 BigQuery 연속 쿼리에서만 지원됩니다.
윈도우 TVF는 윈도우 함수 호출과 다릅니다.
지원되는 집계 함수
지원되는 집계 함수는 다음과 같습니다.
ANY_VALUEAPPROX_COUNT_DISTINCTAPPROX_QUANTILESAPPROX_TOP_COUNTAPPROX_TOP_SUMARRAY_CONCAT_AGGAVGBIT_ANDBIT_ORBIT_XORCORRCOUNTCOUNTIFCOVAR_POPCOVAR_SAMPLOGICAL_ANDLOGICAL_ORMAXMAX_BYMINMIN_BYSTDDEVSTDDEV_POPSTDDEV_SAMPSUMVAR_POPVAR_SAMPVARIANCE
지원되지 않는 집계 함수
지원되지 않는 집계 함수는 다음과 같습니다.
ARRAY_AGGAVG(차등 개인 정보 보호)COUNT(차등 개인 정보 보호)DISTINCT표현식을 포함하는 함수GROUPINGPERCENTILE_CONT(차등 개인 정보 보호)ST_CENTROID_AGGST_EXTENTST_UNION_AGGSTRING_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 테이블 이름입니다. 이 값은 표준 BigQuery 테이블APPENDS함수 내에 래핑되어야 합니다. 이 인수 앞에는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 윈도우 집계를 실행하는 경우 쿼리가 _CHANGE_TIMESTAMP가 10:20 이상인 레코드를 처리한 후에만 [10:15; 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 연속 쿼리는 작업이 실행되는 동안 사용된 컴퓨팅 용량 (슬롯) 을 기준으로 요금을 청구합니다. 이 컴퓨팅 기반 모델은 윈도우와 같은 스테이트풀(Stateful) 작업에도 적용됩니다. 윈도우를 사용하려면 쿼리가 활성 상태인 동안 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
다음 단계
- JOIN, 집계, 윈도우를 실행하는 방법을 알아보세요.
- BigQuery 연속 쿼리에 대해 자세히 알아보세요.
- 여러 스트림의 데이터를 조인하는 방법을 알아보세요.