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

이 기능에 대한 지원을 요청하거나 의견을 제공하려면 bq-continuous-queries-feedback@google.com으로 이메일을 보내세요.

연속 쿼리는 JOIN를 상태 저장 작업으로 지원합니다. 스테이트풀(Stateful) 작업은 연속 쿼리가 여러 행 또는 시간 간격에 걸쳐 정보를 유지해야 하는 복잡한 분석을 실행하도록 지원합니다. 이 기능을 사용하면 쿼리가 실행되는 동안 필요한 데이터를 메모리에 저장하여 서로 다른 스트림의 이벤트를 상호 연관시킬 수 있습니다. 스테이트풀 작업에 대한 자세한 내용은 지원되는 스테이트풀 작업을 참고하세요.

스트림 간 조인은 시간 중심 데이터 수집을 수신하는 두 개 이상의 테이블 간의 조인 작업입니다.

지원되는 JOIN 유형

연속 쿼리에서 지원되는 JOIN 유형은 다음과 같습니다.

  • 스트림 간 조인: 시간 중심 데이터 수집을 수신하는 두 개 이상의 테이블 간의 조인 작업입니다.
  • INNER 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 절에서 더 긴 시간 간격을 사용하는 경우) 더 많은 상태를 유지해야 하므로 슬롯 사용률이 높아집니다.

다음 단계