시간 경계

시간 경계 (Time Boundary)

하이브리드 테이블의 시간 경계에 대해 배우는 페이지예요. Pinot 브로커가 시간 경계를 사용해 오프라인 테이블과 실시간 테이블에서 각각 어떤 레코드를 읽을지 결정하는 방식을 이해할 수 있어요.

출처: Time Boundary

본문

하이브리드 테이블의 시간 경계에 대해 배워 봅니다. 하이브리드 테이블은 같은 이름의 오프라인과 실시간 테이블을 가진 경우예요.

이 테이블들을 쿼리할 때 Pinot 브로커는 오프라인 테이블에서 어떤 레코드를 읽을지, 실시간 테이블에서 어떤 레코드를 읽을지를 결정해요. 브로커는 시간 경계를 사용해 이를 수행해요.

시간 경계는 어떻게 결정되나요? (How is the time boundary determined?)

시간 경계는 오프라인 세그먼트의 최대 종료 시간과 오프라인 테이블에 지정된 세그먼트 수집 빈도를 살펴봐서 결정돼요.

시간별(hourly)로 설정되면:

timeBoundary = Maximum end time of offline segments - 1 hour

그렇지 않으면:

timeBoundary = Maximum end time of offline segments - 1 day

API(V 0.12.0+)를 호출해 하이브리드 테이블이 max(모든 오프라인 세그먼트의 end time)를 사용하도록 강제할 수 있어요:

curl -X POST \
  "http://localhost:9000/tables/{tableName}/timeBoundary" \
  -H "accept: application/json"

이것은 더 많은 세그먼트가 오프라인 테이블에 추가될 때 시간 경계를 자동으로 업데이트하지 않으며, 더 최근 종료 시간의 세그먼트가 오프라인 테이블에 업로드될 때마다 호출해야 해요. 다음 API를 호출해 파생된 시간 경계 사용으로 되돌릴 수 있어요:

curl -X DELETE \
  "http://localhost:9000/tables/{tableName}/timeBoundary" \
  -H "accept: application/json"

쿼리 (Querying)

Pinot 브로커가 하이브리드 테이블에 대한 쿼리를 받으면, 브로커는 시간 경계로 주석이 달린 버전의 쿼리를 오프라인과 실시간 테이블로 보내요.

예를 들어 다음 쿼리를 실행한다면:

SELECT count(*)
FROM events

브로커는 오프라인 테이블에 다음 쿼리를 보내요:

SELECT count(*)
FROM events_OFFLINE
WHERE timeColumn <= $timeBoundary

그리고 실시간 테이블에 다음 쿼리를 보내요:

SELECT count(*)
FROM events_REALTIME
WHERE timeColumn > $timeBoundary

두 쿼리의 결과는 브로커가 병합한 후 클라이언트에 반환돼요.

더 알아보기 (Learn more)