연속 쿼리에서 스트림 간 조인 사용
이 기능에 대한 지원을 요청하거나 의견을 제공하려면 bq-continuous-queries-feedback@google.com으로 이메일을 보내세요.
연속 쿼리는 JOIN을 스테이트풀(Stateful) 작업으로 지원합니다. 스테이트풀(Stateful) 작업을 사용하면 연속 쿼리가 여러 행 또는 시간 간격에 걸쳐 정보를 보관해야 하는 복잡한 분석을 실행할 수 있습니다. 이 기능을 사용하면 쿼리가 실행되는 동안 필요한 데이터를 메모리에 저장하여 여러 스트림의 이벤트를 상호 연결할 수 있습니다. 스테이트풀(Stateful) 작업에 대한 자세한 내용은
지원되는 스테이트풀(Stateful) 작업을 참고하세요.
스트림 간 조인은 시간 지향 데이터 수집을 수신하는 두 개 이상의 테이블 간의 조인 작업입니다.
지원되는 JOIN 유형
연속 쿼리에서 지원되는 JOIN 유형은 다음과 같습니다.
- 스트림 간 JOIN: 시간 지향 데이터 수집을 수신하는 두 개 이상의 테이블 간의 조인 작업입니다.
- INNER JOIN.
지원되지 않는 JOIN 유형
연속 쿼리에서 지원되지 않는 JOIN 유형은 다음과 같습니다.
- 스트림-정적 테이블 JOIN: 조인된 테이블 중 하나 이상이 시간 지향 데이터 수집을 수신하지 않는 정적 테이블인 조인입니다. 정적 테이블의 예로는 측정기준 테이블이 있습니다.
INNER이외의 다른 형태의 JOIN 작업.- 시간 지향 JOIN 절이 없는 JOIN.
여러 스트림의 데이터 조인
다음 쿼리는 택시 탑승 테이블을 택시 요청 테이블에 조인하고 5분 시간 창 내에서 요청자에게 가장 가까운 사용 가능한 택시를 식별한 후 이 데이터를 다른 BigQuery 테이블로 내보내는 방법을 보여줍니다.
INSERT INTO
`real_time_taxi_streaming.matched_rides`
SELECT
requests.timestamp AS request_time,
requests.request_id,
taxis.taxi_id,
ST_DISTANCE(
ST_GEOGPOINT(requests.longitude, requests.latitude),
ST_GEOGPOINT(taxis.longitude, taxis.latitude)
) AS distance_in_meters,
taxis.timestamp AS taxi_available_time
FROM
APPENDS (TABLE `real_time_taxi_streaming.ride_requests`,
CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) AS requests
INNER JOIN
APPENDS (TABLE `real_time_taxi_streaming.taxirides`,
CURRENT_TIMESTAMP() - INTERVAL 10 MINUTE) AS taxis
ON
requests.geohash = taxis.geohash
WHERE
taxis.ride_status = 'available'
AND taxis._CHANGE_TIMESTAMP BETWEEN(requests._CHANGE_TIMESTAMP - INTERVAL 5 MINUTE) AND requests._CHANGE_TIMESTAMP
AND ST_DWITHIN(
ST_GEOGPOINT(requests.longitude, requests.latitude),
ST_GEOGPOINT(taxis.longitude, taxis.latitude),
2000 -- Distance in meters
);
조인 고려사항
다음 섹션에서는 스트림 간 조인을 실행할 때 필요한 고려사항을 설명합니다.
제한사항
INNER JOIN작업만 지원됩니다.LEFT또는FULL OUTER와 같은 다른 형태는 지원되지 않습니다.INNER JOIN작업의 각 측면에서 연속 쿼리의 시작 시간을 지정해야 합니다.- 조인 키 (예:
table1.user_id = table2.user_id) 외에도JOIN절에는 타임스탬프 열을 상수 간격으로 제한하는 조건이 포함되어야 합니다. 이 조건은 시스템이 일치하는 이벤트가 다른 스트림에 도착할 때까지 기다리는 시간을 제한합니다. 예를 들어 타임스탬프가 5분 간격 내에 있는 경우 한 스트림의 이벤트만 다른 스트림의 이벤트와 조인할 수 있다고 지정할 수 있습니다. 대칭 간격으로 제한되지는 않습니다. 예를 들어 조인 조건의 한쪽에는 5분 간격을 사용하고 다른 쪽에는 1시간 간격을 사용할 수 있습니다. - 스트림 간 조인으로 연속 쿼리를 시작할 때는
APPENDS함수만 지원됩니다.CHANGES함수는 지원되지 않습니다. _CHANGE_TIMESTAMP로 정의된 BigQuery 시스템 시간 열은 조인 작업에 지원되는 유일한 타임스탬프 열입니다. 사용자 정의 열은 지원되지 않습니다.- 윈도우 집계와 함께 사용하는 경우 문서화된 모든 윈도우 집계 제한사항을 따라야 합니다.
가격 책정 고려사항
BigQuery 연속 쿼리는 작업이 실행되는 동안 사용된 컴퓨팅
용량 (슬롯)을 기준으로 청구됩니다. 이 컴퓨팅 기반 모델은 조인과 같은 스테이트풀(Stateful) 작업에도 적용됩니다. 조인을 사용하려면 쿼리가 활성 상태인 동안 시스템에서 '상태'를 저장해야 하므로 추가 슬롯 리소스가 사용됩니다. 조인 내에 저장된 컨텍스트 또는 데이터가 많을수록(예: JOIN 또는 WHERE 절에서 더 긴 시간 간격을 사용하는 경우) 더 많은 상태를 보존해야 하므로 슬롯 사용률이 높아집니다.
다음 단계
- BigQuery 연속 쿼리에 대해 자세히 알아보세요.
- 윈도우 집계를 사용하는 방법을 알아보세요.
- JOIN, 집계, 윈도우를 실행하는 방법을 알아보세요.