1.5.0
1.5.0
Apache Pinot 1.5.0 릴리스 노트 문서예요. 이 릴리스는 Multi-stage Query Engine(새 UNNEST 지원, 강화된 조인, 집계 재작성), Upsert(오프라인 테이블 지원, 커밋 시 압축, xxhash 압축), 새 Federation/Multi-Cluster 라우팅 프레임워크, Kafka 4.x 지원, 실시간 자동 리셋, 시계열 엔진 개선, 새 인덱싱 능력(N-gram, IFST, 결합 Lucene), 쿼리 리소스 격리와 수많은 성능 최적화·보안 강화·버그 수정을 제공해요. 커뮤니티의 1100개가 넘는 커밋을 포함해요.
출처: 문서
본문
Multi-stage 쿼리 엔진 개선
UNNEST / CROSS JOIN UNNEST 지원 #17168
multi-stage 엔진이 이제 CROSS JOIN UNNEST(...)를 통해 배열 언네스팅을 네이티브 지원하며, 선택적으로 WITH ORDINALITY를 지원해요. 이는 자주 요청되는 SQL 기능으로, 우회책 없이 쿼리에서 배열 컬럼을 평탄화할 수 있게 해요.
강화된 조인 연산자 #16123
MSE 조인 연산자가 개선된 실행 전략으로 강화되어, 복잡한 다중 테이블 쿼리의 조인 성능과 유연성을 향상해요.
MSE 라이트 모드 개선
- 라이트 모드에서 조인 비활성화: scatter-gather만 유지해야 하는 워크로드를 위해 MSE Lite Mode에서 조인을 명시적으로 금지하는 구성을 추가. #17030
- Fan-out 조정 limit: 라이트 모드가 이제 전송 데이터를 줄이기 위해 fan-out에 기반한 조정 limit을 지원. #16822
- Exchange에서 Sort로 collation push: collation 요구 사항을 정렬 연산자로 push해 라이트 모드 쿼리 최적화. #16551
논리 테이블용 물리 최적화기 #17447
물리 최적화기를 논리 테이블을 지원하도록 확장해, 논리 테이블 추상화에 대한 쿼리의 교환 단순화와 최적화된 실행 계획을 가능하게 해요.
UNION (Distinct) 지원 #16570
기존 UNION ALL에 더해 UNION(distinct) set 연산 지원을 추가해, 결합 쿼리 결과의 더 성능 좋은 중복 제거를 가능하게 해요.
기타 MSE 개선
- 비교에서 Row() 값 표현식 지원. #17317
- 쿼리 응답 메타데이터에
maxRowsInJoin,maxRowsInWindow,numGroups추가. #17784 - 기본적으로 비활성화된 플래너 규칙 구성 지원 Broker 구성. #17258
- 스키마에서 가상 컬럼 제외 쿼리 옵션. #17047
- 비결정적 해시 분산 교환 라우팅 수정. #17323
- stage 간 결정적 workerId-to-server 매핑을 위한 서버 정렬. #17342
- 핫스팟 서버 순환을 보장하기 위해 최종 정렬 stage에 항상 싱글톤 worker 사용. #17347
- 서버 재활성화 시 gRPC 연결 백오프 리셋. #17466
- leaf stage 오류의 오류 처리와 오류 메시지 개선. #17306, #17207, #17161
- 더 나은 관측성을 위한 새 MSE 메트릭. #17419
- multi-stage 쿼리의 MSE 지연 메트릭. #16398
- 플래너 규칙 생산 추적 지원. #16581
Federation / Multi-Cluster 라우팅 (신규)
Pinot 1.5.0은 단일 브로커가 여러 독립 Pinot 클러스터에 걸쳐 쿼리를 라우팅할 수 있게 하는 새 federation 프레임워크를 도입해요. 이는 여러 Pinot 클러스터를 운영하며 통합 쿼리 접근이 필요한 조직을 위한 기반 능력이에요.
- SSE 쿼리의 멀티 클러스터 라우팅. #17439
- MSE 쿼리의 멀티 클러스터 라우팅. #17444
- Federated broker 쿼리 지원. #17296
- MultiClusterHelixBrokerStarter — federated 모드에서 broker 시작용. #17421
- 쉬운 설정·테스트를 위한 Multi-cluster QuickStart. #17581
- BrokerResponse에서 사용 불가능한 원격 클러스터 경고. #17510
- 논리 테이블의 TLS 라우팅 지원. #17663
- 멀티 클러스터 라우팅의 물리 최적화기 지원. #17516
- 물리 테이블의 멀티 클러스터 라우팅 금지(논리 테이블만). #17731
Logical Table 개선
1.4.0에서 도입된 logical table 지원을 바탕으로 이 릴리스는 상당한 개선을 추가해요:
- Controller의 logical table 관리 UI. #17878
- Query Console의 Logical tables 패널. #17199
- logical tables용 QuickStart. #17166
- 플러그 가능한 LogicalTableConfig 직렬화/역직렬화. #17678
- Logical table TLS 통합 테스트. #17683
Upsert와 Dedup 개선
오프라인 테이블의 Upsert 지원 #17789
upsert(기본 키 중복 제거)를 OFFLINE 테이블로 확장해요. 이 능력은 이전에 REALTIME 테이블로만 제한됐어요. 이제 배치 수집 데이터가 같은 의미로 기본 키 기반 중복 제거를 활용할 수 있어, 스트리밍 인프라 없이도 upsert 보장이 필요한 배치 전용 아키텍처를 단순화해요.
커밋 시간 압축 (Commit Time Compaction) #16344
세그먼트가 불변이 되기 전에 커밋 중 유효하지 않고 오래된 레코드를 제거하는 성능 최적화에요. 이는 커밋된 세그먼트가 논리적으로 유효한 레코드보다 훨씬 많은 물리 레코드를 포함하는 근본적인 과제를 해결해 스토리지와 쿼리 성능을 개선해요. 컬럼 메이저 빌드와 함께 커밋 시간 압축 지원도 추가됐어요. #16769
기본 키 압축용 xxHash #17253
upsert 기본 키 압축 옵션으로 xxHash(xxh_128)를 도입해요. xxHash는 MD5보다 낮은 메모리 풋프린트를 제공하고 충돌 확률도 크게 낮아 upsert 메모리 사용량을 줄여요.
조회 가능한 QueryableDocIds 디스크에 유지 #16517
QueryableDocIds가 이제 validDocIds 스냅샷과 함께 디스크에 유지돼요. 이는 디스크 기반 upsert 구현과 더 빠른 세그먼트 프리로드를 지원하는 데 필수예요.
결정적 데이터 전용 CRC #17264, #17380
새 세그먼트의 (메타데이터 제외) 데이터 전용 CRC 계산을 추가하고 ZK에 유지해요. 이는 replace 연산 중 실시간 커밋 세그먼트에 사용되어 레플리카 간 메타데이터 차이와 무관하게 결정적 세그먼트 식별을 보장해요.
기타 Upsert/Dedup 개선
- 불일치 중 세그먼트의 Upsert 메타데이터 되돌림. #17324
- Upsert Compaction 태스크 중 레플리카 간 불일치 방지. #17696
- 압축·삭제용 세그먼트 선택 전 합의 확인. #17352
- 테이블 생성 후 upsert/dedup 구성 업데이트 방지 확인 추가. #17645
- dedupTimeColumn의 TIMESTAMP 지원. #17200
- UpsertCompactMerge 태스크의 새
minNumSegmentsPerTask속성. #17104 - dedup 테이블이 multi-tier 지원과 함께 StrictRealtimeSegmentAssignment를 사용하도록. #17154
- upsert 메타데이터 되돌림의 이전 레코드 위치 키 처리를 최적화. #17503
- 서버가 ZK 커밋 offset보다 앞설 때 감지하는 메트릭 추가. #17139
실시간 수집
Kafka 4.x 클라이언트 지원 #17633
Kafka 4.1.1 클라이언트 지원으로 새 pinot-kafka-4.0 스트림 수집 모듈을 추가했어요. 이 모듈은 KRaft 모드(ZooKeeper 의존성 없음)를 사용하고 Kafka 4.x 클러스터와 완전한 호환성을 제공해요.
Kafka 서브셋 파티션 수집 #17587
테이블이 이제 stream.kafka.partition.ids로 구성된 Kafka topic 파티션의 서브셋만 소비할 수 있어요. 이는 단일 테이블이 모든 파티션을 필요로 하지 않는 사용 사례의 유연한 파티션 할당을 가능하게 해요.
Kafka 2.0 플러그인 제거 #17602
폐기된 Kafka 2.0 플러그인이 제거됐어요. 모든 수집이 이제 Kafka 3.x(및 4.x) 클라이언트로 표준화됐어요. 기본 Kafka consumer도 Kafka 3으로 변경됐어요. #16858
수집 지연 중 자동 리셋 offset #16492, #16692, #16724
수집 지연이 구성 가능한 임계값(offset 수 또는 시간 기준)을 초과할 때 자동 offset 리셋을 활성화하는 3부분 기능이에요. 세그먼트 커밋 시 지연이 임계값을 초과하면 새 세그먼트는 다음 offset 대신 최신 offset부터 시작해요. Part 2는 topic "inactive" 상태를 도입하고, Part 3는 건너뛴 데이터 복구를 위한 backfill 매니저와 핸들러 인터페이스를 추가해요.
배치 단위 소비 일시 중지 #17194
파티션이 많은 테이블의 경우 소비 일시 중지는 모든 consumer가 커밋을 서두르면서 컨트롤러에 과부하를 줄 수 있어요. 이는 소비 일시 중지 API에 배치 구성 매개변수를 추가해 부하를 분산해요.
클러스터 간 실시간 테이블 복제 #17235
두 Pinot 클러스터 간 실시간 테이블 복제를 가능하게 하는 첫 부분이에요. 소스 테이블의 ZK 메타데이터에서 소비 세그먼트 워터마크로 새 실시간 테이블을 만드는 기능을 도입해요.
기타 수집 개선
- 스트림 consumer의 모든 경쟁 조건 수정. #17089
- consumer 재생성 재시도 정책 개선. #17062
- 종단 간 수집 지연 메트릭. #17163
- 신선도 체커가 최소 수집 지연 사용. #17598
- offset lag을 지원하지 않는 스트림의 신선도 확인 건너뛰기. #17560
- multi-topic 수집 라우팅 테이블 오류 수정. #17810
- multi-stream 실시간 소비의 잘못된 스트림 파티션 id 수정. #17953
- Kafka 3.9.1과 일치하도록 Confluent 라이브러리를 7.9.5로 상향. #17614
- SimpleAvroMessageDecoder: 헤더 접두사 페이로드(예: Confluent magic+schemaId) 지원. #17077
시계열 엔진 (GA)
시계열 엔진이 1.4.0의 베타를 바탕으로 Pinot 1.5.0에서 GA가 됐어요.
Delta/DeltaDelta 저장 인코딩 #15258
시계열 저장용 Delta와 DeltaDelta 압축 코덱을 추가해, 단조 증가하거나 천천히 변하는 숫자 데이터의 압축률을 개선해요.
쿼리 실행 개선
- Controller UI의 쿼리 옵션과 explain plan 지원. #17511
- 종단 간 쿼리 통계 전파. #17170
- 논리 explain plan 지원. #17484
- 부분 결과 지원. #17278
- 쿼리 이벤트 리스너. #17464
- 커스텀 토크나이저를 대체하는 M3QL JavaCC 파서. #17192
- BrokerResponse 호환 API인 POST /query/timeseries. #16531
- Controller UI의 Apache ECharts 시각화. #16390
- Timeseries 언어 엔드포인트와 UI 통합. #16424
- timeseries UI의 쿼리 통계 패널. #17423
- DeltaDelta/Delta 압축 테이블 구성 검증. #17252
집계 함수 개선
ANY_VALUE 지원 #16678
새 ANY_VALUE 집계 함수로 각 그룹에 대해 컬럼에서 임의 값을 반환해요. GROUP BY 컬럼과 1:1 매핑되는 컬럼을 GROUP BY 절에 강제하지 않고 SELECT에 포함하는 데 유용해요.
스마트 distinct count 함수
- DistinctCountSmartHLL: 사전 인코딩 컬럼에 대해 개선됨 — 낮은 카디널리티에서는 정확한 계산, 높은 카디널리티에서는 HLL++를 자동 선택. #17411, #17011
- DistinctCountSmartULL: 정확한 집합에서 ULL sketch로의 승격 임계값을 구성 가능하게 한 UltraLogLog(ULL) 기반 스마트 distinct count. #16605
자동 집계 재작성
쿼리 엔진이 이제 집계 함수를 타입별 최적화된 변형으로 자동 재작성해요:
- 문자열 컬럼의
MIN/MAX이MINSTRING/MAXSTRING으로 재작성. #16980 - long 컬럼의
MIN/MAX/SUM이MINLONG/MAXLONG/SUMLONG으로 재작성. #17058 - 최적화된 INT 컬럼 집계용 새
SumIntAggregationFunction. #16704 - LONG 특화 MIN/MAX/SUM 집계 함수. #17001
- MINSTRING/MAXSTRING의 사전/메타데이터 기반 최적화. #16983
- 여러 함수용 종합 AggregationOptimizer 프레임워크. #16399
Multi-Value 집계 통합 #17519, #17109
multi-value 집계 함수(예: COUNTMV, SUMMV)가 일반 단일값 집계 함수로 통합되어 사용자 경험을 단순화해요.
MV 컬럼의 Star-Tree 인덱스 #16836
Star-tree 인덱스가 이제 multi-value 컬럼(예: AVGMV)의 집계를 지원해, MV 데이터에 사전 집계 쿼리를 가능하게 해요.
기타 집계 개선
- AVG window 함수 값 축적기. #17268
- distinct 변형이 있는 ListAggMv(다중값 목록 집계). #17155
- multi-value 컬럼의 ArrayAgg. #17153
- 다양한 집계 함수의 빈 테이블 처리. #17750
새 스칼라 함수와 연산자
- INITCAP: 각 단어의 첫 글자를 대문자로. #17642
- IP 주소 함수: IP 주소 조작 함수 모음. #17127
- 논리 함수: AND, OR, NOT, IF 및 관련 부울 로직 함수. #17189
- 결정성 있는 RAND: 스칼라 함수가 이제 결정성을 알리며, RAND는 런타임 전용과 시드 모드를 모두 지원. #17208
- arrayPushFront / arrayPushBack: 배열에 요소 추가 또는 앞에 붙이기. #17140
- ARRAYHASANY: 두 배열이 공통 요소를 공유하는지 확인. #17156
- Ngrams MV UDF: 텍스트에서 n-gram을 multi-value 컬럼으로 생성. #16671
- regex와 distance용 문자열 함수: 새 문자열 조작 함수. #17372
- jsonExtractKey 깊이 제어와 점 표기법. #16306
- Sanitization, Special, Time 컬럼 변환기. #17740
- LIKE 프레디킷 이제 대소문자 구분 없음. #16568
- REGEXP_LIKE 개선: 사전이 작으면 스캔하고, 사전 대 raw 스캔 전환 구성. #16478, #16879
- StringFunctions.replace() 강화. #16528
인덱싱과 저장
N-gram 필터링 인덱스 #16364
새 실시간 N-gram 필터링 인덱스로, 최종 regex 검증 전에 일치하지 않는 문자열을 효율적으로 가지치기해요. 벤치마크는 무차별 regex 매칭 대비 100배 매칭 속도 개선을 보여줘요. 인덱스는 구성 가능한 길이의 N-gram을 추출하고 각 N-gram에 대해 포스팅 목록을 구축해요.
대소문자 구분 없는 regex용 IFST 인덱스 #16276
대소문자 구분 없는 regex 매칭을 위해 기존 FST와 함께 새 IFST(Insensitive FST) 인덱스 타입을 추가했어요. REGEXP_LIKE의 세 번째 매개변수가 대소문자 구분을 지정해요.
Lucene 텍스트 검색의 Minimum Should Match #16650
TEXT_MATCH 쿼리용 OpenSearch 호환 minimum_should_match 지원을 추가해, 부울 쿼리에서 몇 개의 용어가 일치해야 하는지 제어할 수 있게 해요. 정수와 백분율 기반 지정을 모두 지원해요.
결합 Lucene 텍스트 인덱스 파일 #16688
Lucene 텍스트 인덱스 파일을 이제 columns.psf 세그먼트 파일로 결합·병합할 수 있어, 세그먼트당 파일 수를 줄이고 저장 관리를 개선해요.
Column Major 세그먼트 빌드 #16727
컬럼식 입력 데이터 소스(예: Pinot 세그먼트, Parquet 파일)에 대해 세그먼트를 컬럼식으로 빌드하는 새 기능. 스키마나 인덱스 구성 변경 같은 minion 연산의 세그먼트 재빌드 성능을 크게 개선해요.
기타 인덱싱 개선
- MAP 데이터 타입용 JSON 인덱스 활성화. #16808
- prefix phrase 쿼리 Lucene 파서 일치. #16476
- NoDict 하이브리드 카디널리티: 2,048까지 정확한 계산, 그 후 +10% 캡으로 HLL++. #17186
- v4를 기본 raw 인덱스 버전으로 사용. #16943
- storeInSegmentFile이 true일 때 오프라인 세그먼트의 Lucene doc ID 매핑. #17437
- ForwardIndexReader를 플러그 가능하게. #16363
- star-tree 인덱스 빌드 실패 시 세그먼트 빌드를 실패시키지 않고 건너뛰고 롤백 지원. #17028
- 비-COUNT 함수의 * 컬럼 star-tree 검증. #17008
- 해상도 구성이 업데이트되면 세그먼트 리로드 시 H3 인덱스 재빌드. #16953
쿼리 성능 최적화
- AND/OR 최적화로 조기 단락: 결과가 이미 결정되면 나머지 프레디킷 평가 건너뛰기. #16583
- DescDocIdSetOperator: 정렬된 컬럼의 ORDER BY DESC 성능을 역순 스캔으로 개선. #16789
- orderBy = groupBy일 때 그룹 트림: ORDER BY 키가 GROUP BY 키와 일치할 때 sort-aggregate와 pair-wise 병합 최적화, 세그먼트당 LIMIT까지 트림. #16308
- 타입이 이미 일치하면 FunctionOperand의 행당 convertTypes() 건너뛰기. #17730
- LookupJoinOperator의 비-등가 조인 조건 배열 복사 감소. #17542
- semi-join에
is_colocated_by_join_keys가 제공되면 colocated join 강제. #17273 - PinotFS의 페이지별 필터링과 조기 종료로 클라우드 파일 나열 최적화. #17847
- JSON 메시지 디코딩 최적화: 중간 JsonNode를 피하고 직접 Map으로 파싱. #17485
- 필드 디스크립터 캐싱으로 ProtoBufRecordExtractor 최적화. #17593
- 메모리 할당을 줄여 그룹 id 생성을 최적화. #16798
- MailboxContentObserver와 ReceivingMailbox의 메모리 풋프린트 감소. #16872
쿼리 리소스 격리
Workload Scheduler #16018
허용 시점에 CPU/메모리 예산을 검증하는 Binary Workload Scheduler의 개선이에요. 스케줄링 전에 WorkloadBudgetManager.canAdmitQuery()를 사용하며, O(1) 원자 카운터 예산 확인으로 오버헤드를 무시할 수 있어요.
Cost-Split 지원 #16672
워크로드 예산(CPU/메모리)을 이제 테이블/테넌트에 걸쳐 분할할 수 있으며, 전파 스킴별(예: CONSUMING vs COMPLETED stage) 커스텀 오버라이드를 통한 실시간 분할을 지원해요.
기타 리소스 격리 개선
- ThrottleOnCriticalHeapUsageExecutor의 큐 기반 스로틀링(즉시 거부 대신 우아한 성능 저하). #16409
- 바이트 기반 스로틀링. #16572
- 패닉 모드에서 쿼리 자체 종료. #16380
- QUERIES_THROTTLED 메트릭. #16676
- Workload 통계 수집 인터페이스. #16340
보안과 TLS
- TLS 프로토콜 허용 목록: 허용된 TLS 프로토콜 구성과 강화된 JVM SSL 초기화 허용. #17776
- 중앙 집중 SSL 컨텍스트: 일관된 TLS 구성을 위해 Controller/Broker/Server 컨텍스트에 SSL 컨텍스트 설정. #17358
- gRPC와 HTTPS 연결의 런타임 TLS 진단. #17559
- 세그먼트 다운로드 API의 접근 제어. #17508
- MSE gRPC 채널 인증. #16475
- 중요 엔드포인트의 @Authenticate 애노테이션. #17552
- 커스텀 감사 신원 해석용 SPI 기반 토큰 해석기. #17658
- 감사 로깅 시스템: 클러스터 구성 리스너, 응답 감사, 크기 제한이 있는 요청 본문 처리, URL 필터 패턴, 컴포넌트별 구성 접두사가 있는 종합 감사 로깅 지원. #16616, #16649, #16851, #16747, #16807, #16823, #16766
- Azure Data Lake Storage(ADLS)용 SAS 토큰 인증. #16343
- 연결 시 gRPC broker 연결 검증. #17835
- 런타임에 AWS 자격 증명 새로고침. #16553
Minion / 태스크 프레임워크
- 컨트롤러 간 원자적 minion 태스크 생성을 위한 테이블 수준 분산 잠금. #16857
- minion 인스턴스당 구성 가능한 최대 태스크 수. #16981
- 클러스터 수준 최대 하위 태스크 구성. #16571
- 하위 태스크 타이밍 메트릭. #17190
- 테이블 삭제 시 태스크 데이터 정리. #16307
- minion을 Drained로 태그. #17375
- GET /minions/status API 엔드포인트. #17475
- 모든 minion 태스크와 요약용 API. #17330
- ZK 비대화 방지를 위한 task queue 크기 상한. #17741
- 완전한 backfill 지원용 LaunchBackfillIngestionJob. #16890
- BaseSingleSegmentConversionExecutor의 메타데이터 push 모드. #17632
- PurgeTask가 빈 세그먼트 자동 삭제. #16368
리밸런스와 클러스터 관리
- Controller/Cluster 구성으로서의 재해 복구 모드. #17243
- 테넌트 리밸런스 취소. #16886
- 향상된 모니터링용 TenantRebalanceChecker. #16455
- 피어 다운로드 활성 테이블 리밸런스 처리. #16341
- 상태 전환 메시지의 Helix 제약. #16933
- SegmentOnlineOfflineStateModelFactory의 executor를 오버라이드하는 StateTransitionThreadPoolManager. #17453
- controller 검증에서 부분적으로 오프라인 레플리카 재개. #17754
- 구성 가능한 서버 세그먼트 predownload. #17287
- 삭제된 디렉터리 세그먼트 배치 삭제. #16848
- 활성화되면 비동기 세그먼트 새로고침 처리. #16931
- Pauseless의 deep store 업로드 재시도를 기본으로 활성화. #17241
관측성과 메트릭
- Query Fingerprint: 리터럴을
?로 대체해 표준 쿼리 표현을 만드는 구성 가능한 AST 기반 쿼리 핑거프린팅. MDC와 구조적 로그로 로깅을 강화. #17177 - 클록 시간과 할당 모드가 있는 MSE 쿼리 stage 통계의 FlameGraph 시각화. #17263
- 쿼리 실행 통계의 메모리와 GC 시간 추적. #16576
- broker의 SLA 스타일 쿼리당 오류 메트릭. #17457
- broker와 server의 쿼리 응답 크기 메트릭. #17412, #17710
- 세그먼트 다운로드 지연 메트릭. #16375
- Netty와 gRPC 메모리 메트릭(총 최대와 사용). #16939
- broker의 zone 장애 허용 세그먼트 메트릭. #16334
- 인메모리 상태 캐시와 세그먼트 수준 상세가 있는 세그먼트 리로드 실패 추적. #17099, #17234
커넥터와 클라이언트
Pinot CLI #17029
Apache Pinot용 현대적 대화형·배치 명령줄 클라이언트를 제공하는 새 pinot-cli 모듈. 기능에는 히스토리가 있는 다중 라인 SQL REPL, 여러 출력 형식(CSV/TSV/JSON/ALIGNED/VERTICAL/MARKDOWN), properties 파일로 구성, 추가 HTTP 헤더 지원이 포함돼요.
종합 Pinot Admin 클라이언트 #17040
pinot-java-client의 새 admin 클라이언트로 모든 Pinot controller REST 엔드포인트에 대한 완전한 프로그래밍 접근을 제공해요. 6개 서비스 클라이언트(Table, Schema, Instance, Segment, Tenant, Task), 인증 지원, 비동기 연산, 종합 오류 처리를 포함해요.
기타 클라이언트 개선
- Java 클라이언트의 커서 기반 페이지네이션 지원. #16782
- 20-30% Kafka 데이터 볼륨 감소가 있는 스트림 데이터 수집용 Apache Arrow 형식 디코더. #17031
- Java 클라이언트 HTTP 요청의 X-Correlation-Id 헤더. #17863
- Spark 커넥터 개선: Pinot Proxy, 통합 secureMode, 종합 gRPC 지원. #16666
Controller UI 개선
- Logical table 관리 UI. #17878
- 스키마 UI의 기본 키 표시. #17566
- 인스턴스 liveness vs health 구분. #17450, #17248
- Minion 태스크 통계와 상태 필터링. #16521
- 클러스터 매니저의 Package Versions 섹션. #16534
- 시간대 지원과 요약의 세그먼트 시작/종료 시간. #16489
- Webpack 5와 TypeScript 5.8 마이그레이션. #16365
기타 주요 기능
- ignoreMissingSegments 쿼리 옵션: broker 자동 구성과 함께 SERVER_SEGMENT_MISSING 오류 건너뛰기. #16556
- $partitionId 가상 컬럼: 쿼리에서 파티션 ID를 가상 컬럼으로 접근. #16721
- 쿼리 라우팅 전략 플러그 가능. #17364
- 미리 계산된 broker 라우팅 항목이 있는 플러그 가능한 테이블 샘플러. #17532
- 배치 세그먼트 업로드의 스토리지 할당량 확인. #17512
- 디스크 사용량 확인을 오프라인 세그먼트 업로드로 확장. #17579
- 세그먼트 다운로드용 PinotFS 스트리밍 untar. #17586
- MD5 가드를 강제하는 전역
pinot.md5.disabled스위치. #17800 - 세그먼트 메타데이터와 업로드의 커스텀 맵 메타데이터. #17055
- 세그먼트 tier 이동 API: tier 마이그레이션을 위해 모든 세그먼트를 한 번에 선택. #17812
- 추적되지 않는 세그먼트의 커스텀 보존 시간. #16719
- 클러스터 인지 검증이 있는 강화된 /tableConfigs/validate. #16675
주요 버그 수정
- OOM 보호의 깨진 Lucene 쿼리 추적·취소 수정. #17884
- consuming 세그먼트의 NOT TEXT_MATCH 오탐 수정. #17880
- multi-stream 실시간 소비의 잘못된 스트림 파티션 id 수정. #17953
- single-stage 엔진의 SQL 문자열 리터럴 이중 이스케이프 수정. #17438
- ServerChannels의 broker 쓰기 실패 처리 수정. #17861
- 좀비 채널을 만드는 서버 아웃바운드 쓰기 실패 수정. #17845
- 종료 시 QueryServer 채널 정리 수정. #17854
- 음수 reload 예상 시간과 2088년 리밸런스 타임스탬프 수정. #17833
- 무제한 응답 저장소 성장을 일으키는 ResponseStoreCleaner 버그 수정. #17622
- 타임아웃/취소에 응답하지 않는 funnel 집계 worker 스레드 수정. #17692
- off-heap 메모리 스파이크 문제 수정. #17489
- 하이브리드 테이블의 SSE 쿼리 최적화 회귀 수정. #17751
- null 처리가 활성화된 star-tree 인덱스 사용 시 COUNT(col) 버그 수정. #17106
- 문자열에서 timestamp 캐스트의 null 처리 문제 수정. #16885
- 기본값 지원이 있는 JsonExtractScalarTransformFunction의 null 값 수정. #16683
- SSE 사후 집계 함수에서 null 값 우아하게 처리. #16711
- MSQE의 리터럴 전용 피연산자 CAST 평가 수정. #16421
- S3PinotFS의 AWS SDK 자격 증명 제공자 스레드 누출 수정. #17869
- S3 호환 스토리지의 S3PinotFS URL 인코딩 수정. #17691
- GcsPinotFS deleteBatch 탄력성 개선. #17713
- Netty direct memory OOM의 DirectOOMHandler 문자열 매칭 버그 수정. #17684
- MSE 연산자의 조기 종료 수정. #16696
- 행 수를 넘어 채우는 lead/lag window 함수 수정. #17348
- truncate(value)의 signed-zero와 비유한 동작 수정. #17677
- 복합 필드 ser/de 수정. #17685
- dedup 테이블의 기본 키 수를 보고하도록 메타데이터 API 수정. #17736
- RenewableTlsUtils의 JVM 종료를 차단하는 비-daemon 스레드 수정. #17221
- TableRebalancer의 NPE 수정. #17723
- UNNEST로 인한 multi-stage 쿼리 통계 serde 호환 문제 수정. #17590