세그먼트 프루닝
세그먼트 프루닝 (Segment Pruning)
Pinot이 쿼리에서 불필요한 세그먼트를 걸러내는 세그먼트 프루닝(segment pruning) 메커니즘을 안내해요.
출처: 문서
본문
개요 (Overview)
세그먼트 프루닝은 쿼리의 조건(WHERE 절)을 기준으로 관련 없는 세그먼트를 스캔에서 제외하는 최적화예요. 프루닝 덕분에 브로커가 일부 세그먼트만으로 쿼리를 라우팅해 조회에 필요한 I/O와 CPU를 크게 줄일 수 있어요.
프루닝 유형 (Types of pruning)
Pinot은 여러 프루닝 전략을 지원해요:
- 시간 범위 프루닝 (Time-range pruning) — 테이블에 시간 컬럼이 있으면 브로커가 시간 조건을 사용해 해당 시간 범위의 세그먼트만 선택해요.
- 파티션 프루닝 (Partition pruning) — 테이블이 파티셔닝되어 있고 쿼리가 파티션 키에 등가 조건을 쓰면 관련 파티션만 조회해요.
- 세그먼트 메타데이터 프루닝 (Segment metadata pruning) — 세그먼트의 메타데이터(최소/최대, 사전)를 이용해 어떤 값이 세그먼트에 없는지 판단해 제외해요.
- 인덱스 기반 프루닝 — 정렬 인덱스, 블룸 필터, 범위 인덱스를 이용한 프루닝.
프루닝을 위한 구성 (Configuring for pruning)
- 시간 컬럼을 설정해 시간 범위 프루닝을 활성화하세요.
- 등가 필터에 자주 쓰이는 컬럼으로 파티셔닝해 파티션 프루닝을 활용하세요.
- 사전 인덱스와 최소/최대 메타데이터가 프루닝에 활용되도록 하세요.
모범 사례 (Best practices)
EXPLAIN PLAN으로 어떤 프루닝이 적용되는지 확인하세요.- 시간 필터가 없는 쿼리는 모든 세그먼트를 스캔할 수 있으므로 항상 시간 범위 조건을 권장해요.