첫 쿼리

첫 쿼리 (First Query)

Query Console과 REST API를 사용해 Pinot에 첫 SQL 쿼리를 실행하는 페이지예요. 온보딩 경로의 마지막 단계로, 실제 데이터를 대상으로 SELECT, 집계, count, 필터 쿼리를 실행해 보고 쿼리 인터페이스를 이해하게 돼요.

출처: First Query

본문

이 페이지를 마치면 알게 되는 것 (Outcome)

Pinot에 첫 SQL 쿼리를 실행하고 쿼리 인터페이스를 이해할 수 있어요.

사전 요구 사항 (Prerequisites)

  • 첫 배치 수집 또는 첫 스트림 수집 완료. transcript 테이블이 존재하고 데이터가 있어야 해요.
  • Pinot 클러스터가 실행 중 (Controller는 9000 포트, Broker는 8099 포트).

단계 (Steps)

1. Query Console 열기

브라우저에서 http://localhost:9000으로 이동합니다. 왼쪽 사이드바에서 Query Console을 클릭합니다. 왼쪽 테이블 탐색기에 transcript 테이블이 나열된 것을 볼 수 있을 거예요.

2. 간단한 SELECT 실행

쿼리 편집기에 다음 쿼리를 붙여 넣고 Run Query를 클릭합니다:

SELECT * FROM transcript LIMIT 10

결과 패널에 transcript 테이블의 모든 칼럼(studentID, firstName, lastName, gender, subject, score, timestamp)이 표시돼요. 반환되는 행은 로드한 데이터(배치, 스트림, 또는 둘 다)에서 와요. LIMIT 10은 결과 집합을 제한해서 응답을 빠르게 만들어 줘요.

3. 집계 실행

SELECT subject, AVG(score) AS avg_score
FROM transcript
GROUP BY subject
ORDER BY avg_score DESC

이 쿼리는 과목별 평균 점수를 계산하고 결과를 높은 순에서 낮은 순으로 정렬해요. Pinot는 각 서버의 세그먼트 데이터에서 직접 집계를 실행하고 Broker에서 결과를 병합해요. 그래서 대규모 데이터셋에서도 GROUP BY 쿼리가 빨라요.

4. count 실행

SELECT COUNT(*) FROM transcript

테이블의 전체 행 수를 반환해요. 정확한 개수는 완료한 수집 단계에 따라 달라요:

  • 배치 수집만 -- 4행
  • 스트림 수집만 -- 게시한 이벤트 수 (튜토리얼에서 최대 12)
  • 둘 다 -- 합산된 총 개수

5. 필터 실행

SELECT firstName, lastName, score
FROM transcript
WHERE score > 3.5

이 쿼리는 점수가 3.5보다 큰 학생만 보여주도록 행을 필터링해요. Pinot는 필터 조건을 서버로 푸시 다운해 일치하는 행만 스캔해서 반환해요.

6. REST API 시도

Query Console UI는 탐색에 편리하지만, 프로덕션 애플리케이션은 REST API로 Pinot를 쿼리해요. 터미널을 열고 실행합니다:

curl -X POST http://localhost:8099/query/sql \
  -H 'Content-Type: application/json' \
  -d '{"sql": "SELECT * FROM transcript LIMIT 5"}'

8099 포트는 모든 쿼리 요청을 처리하는 Broker예요. Query Console UI도 내부적으로 같은 API를 사용해요. 응답은 결과 행, 스키마, 쿼리 실행 메타데이터를 포함하는 JSON 객체예요.

확인 (Verify)

다섯 개의 쿼리가 모두 오류 없이 결과를 반환해요. 이제 엔드투엔드 온보딩 흐름을 성공적으로 완료했어요. Pinot 클러스터를 설정하고, 스키마와 테이블을 정의하고, 데이터를 로드하고, UI와 REST API 양쪽으로 쿼리했답니다.

다음 단계 (What's next)

선형적인 Start Here 경로를 끝냈어요. 이제부터는 자신의 사용 사례에 가장 관련 있는 영역을 탐색해 보세요:

더 알아보기 (Learn more)