연속 쿼리에서 스트림 간 조인 사용

이 기능에 대한 지원을 요청하거나 의견을 제공하려면 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 절에서 더 긴 시간 간격을 사용하는 경우) 더 많은 상태를 보존해야 하므로 슬롯 사용률이 높아집니다.

다음 단계