1.0.0
1.0.0
이 페이지는 Apache Pinot™ 1.0.0 릴리스에 포함된 최신 변경 사항(새 기능, 개선, 버그 수정)을 다루는 문서예요.
출처: 문서
본문
1.0.0 (2023-09-19)
이 릴리스에는 여러 새 기능, 개선, 버그 수정이 포함되며, 다음이 주요 내용이에요:
- Multi-stage 쿼리 엔진: 새 기능, 개선, 버그 수정. multi-stage 쿼리 엔진 활성화 및 사용법이나 multi-stage 쿼리 엔진의 동작을 알아보려면 참고하세요.
멀티-스테이지 쿼리 엔진 새 기능 (Multi-stage query engine new features)
- window 함수 지원
- Set 연산 지원:
- 쿼리 플래너에서 SetOperations(UNION, INTERSECT, MINUS) 컴파일 지원 (#10535)
- Timestamp 및 Date 연산
- TIMESTAMP 타입과 date ops 함수 지원 (#11350)
- 집계 함수
- Sketch 기반 함수 지원 (#11153), (#11517)
- Intermediate Stage Worker 할당을 테넌트 인지형으로 변경 (#10617)
- 쿼리 파싱 중 리터럴 표현식 평가로 더 효율적인 쿼리 실행 가능 (#11438)
- 파티션된 테이블 스캔에서 파티션 병렬 처리 지원 추가, 더 효율적인 데이터 검색 가능 (#11266)
- [multistage] 더 많은 tuple sketch 스칼라 함수와 통합 테스트 추가 (#11517)
멀티-스테이지 쿼리 엔진 개선 (Multi-stage query engine enhancements)
- 기본적으로 v2 엔진 켜기 (#10543)
- 더 효율적인 데이터 처리를 위해 leaf stage 블록 스트리밍 기능 도입 (#11472)
- limit이 있으면 SortOperator 조기 종료 (#11334)
- SortExchange를 위한 정렬 구현 (#10408)
- multistage 쿼리를 위한 테이블 수준 접근 검증, QPS 할당량, 단계 메트릭 (#10534)
- 파티션 기반 leaf stage 처리 지원 (#11234)
- queryOption을 leaf로 전달 (#10626)
- explain plan 쿼리를 controller에서 broker로 pushdown (#10505)
- 그룹 수를 제한하는 multi-stage group-by executor 강화, 쿼리 성능과 리소스 활용 개선 (#11424)
- multi-stage join 연산자 탄력성·신뢰성 개선, hash join 오른쪽 테이블 보호 지원 추가 (#11401)
멀티-스테이지 쿼리 엔진 버그 수정 (Multi-stage query engine bug fixes)
- Rule Collection 사용해 Predicate Pushdown 수정 (#10409)
- mailbox cancel 경쟁 조건 수정 시도 (#10432)
- 적절한 오류 메시지 전파를 위해 Throwable 캐치 (#10438)
- 테넌트 감지 문제 수정 (#10546)
- hashCode 기반 FieldSelectionKeySelector에서 Integer.MIN_VALUE 처리 (#10596)
- controller에서 존재하지 않는 테이블을 쿼리할 때 오류 메시지 개선 (#10599)
- PostgreSQL 호환되도록 SUM 반환 타입 파생 (#11151)
Index SPI
- 런타임에 Apache Pinot에서 새 인덱스 타입을 포함하는 기능 추가. 이는 독점 인덱스를 포함한 서드파티 인덱스를 추가하는 능력을 열어줘요. 자세한 내용은 여기
pinot 쿼리의 null 값 지원
- ORDER BY, DISTINCT, GROUP BY, 값 변환 함수와 필터링의 NULL 지원.
Upsert 개선
upsert 활성화 테이블의 삭제 지원 (#10703)
upsert를 확장하고 실시간 테이블에서 레코드를 삭제할 수 있도록 지원이 추가됐어요. 설계 세부 사항은 여기에서 찾을 수 있어요.
테이블 로딩 속도를 높이기 위한 upsert 스냅샷으로 세그먼트 프리로드 (#11020)
upsert 스냅샷 기능을 사용하는 테이블에서 세그먼트를 프리로드하는 기능을 추가해요. validDocIds 스냅샷이 있는 세그먼트를 더 효율적으로 프리로드해 테이블 로딩(따라서 서버 재시작)을 빠르게 할 수 있어요.
upsert 기본 키의 TTL 구성 (#10915)
upsert 기본 키 메타데이터 정리를 위한 만료 TTL 지정 지원을 추가해요.
upsert 실시간 테이블의 세그먼트 압축 (#10463)
upsert가 있는 실시간 테이블에 속한 세그먼트를 압축하는 새 minion 태스크를 추가해요.
Spark3용 Pinot Spark 커넥터 (#10394)
PinotDataBufferFactory와 새 PinotDataBuffer 구현 (#10528)
Unsafe java API와 foreign memory API를 사용하는 새 PinotDataBuffer 구현을 추가해요. 또한 커스텀 PinotDataBuffer 구현을 꽂을 수 있는 PinotDataBufferFactory 지원도 추가했어요.
쿼리 함수 개선
- PercentileKLL 집계 함수 추가 (#10643)
- ARG_MIN과 ARG_MAX 함수 지원 (#10636)
- argmin/max를 exprmin/max로 리팩터링하고 calcite 호환으로 변경 (#11296)
- Integer Tuple Sketch 지원 (#10427)
- 벡터 스칼라 함수 추가 (#11222)
- [feature] multi-value datetime transform 변형 (#10841)
- FUNNEL_COUNT 집계 함수 (#10867)
- [multistage] RANK와 DENSE_RANK 순위 window 함수 지원 추가 (#10700)
- theta sketch scalar 추가 (#11153)
- dateTimeConverter, timeConvert, dateTrunc, regexpReplace를 v2 함수로 등록 (#11097)
- extract(quarter/dow/doy) 지원 추가 (#11388)
- Funnel Count — 여러 전략(파티셔닝 요구 없음) (#11092)
- Boolean 단언(assertion) 변환 함수 추가 (#11547)
JSON과 CLP 인코딩 메시지 수집 및 쿼리
- CLP 인코딩 필드를 디코딩하는 clpDecode 변환 함수 추가 (#10885)
- 개별 컬럼 대신 컬럼 그룹 이름으로 clpDecode를 호출하기 쉽게 하는 CLPDecodeRewriter 추가 (#11006)
- 필드를 버리지 않고 다양한 키를 가진 레코드를 테이블 스키마에 맞게 변환하는 SchemaConformingTransformer 추가 (#11210)
Tier 수준 인덱스 구성 오버라이드 (#10553)
- tier 수준에서 인덱스 구성을 오버라이드할 수 있게 해, 다른 tier에 대해 더 유연한 인덱스 구성을 가능하게 함.
수집 커넥터와 기능
- Kinesis 스트림 헤더 추출 (#9713)
- Pulsar 소스에서 레코드 키, 헤더, 메타데이터 추출 (#10995)
- Distinct Count HLL과 Big Decimal의 실시간 사전 집계 (#10926)
- csv record reader에서 파싱할 수 없는 레코드 건너뛰기 지원 추가 (#11487)
- protobuf 수집의 null 지원 (#11553)
UI 개선
- 브라우저 세션에 인증 세부 사항을 유지하는 기능 추가. 앱을 새로고침해도 인증 세션이 만료될 때까지 로그인 상태가 유지돼요 (#10389)
- AuthProvider 로직을 업데이트해 access token을 디코딩하고 사용자 이름과 이메일을 추출. 이 정보는 이제 앱에서 기능이 사용할 수 있게 제공돼요 (#10925)
Pinot docker 이미지 개선 및 강화
- Pinot base 빌드와 런타임 이미지가 Amazon Corretto와 MS OpenJDK를 지원하도록 (#10422)
- multi-arch pinot docker 이미지 지원 (#10429)
- 최근 jdk distro 변경으로 dockerfile 업데이트 (#10963)
운영 개선
리밸런스 (Rebalance)
커스터마이즈된 브로커 쿼리 스레드 풀 구성 (#10614)
아래 새 구성 옵션을 추가해 제한된 스레드 풀 사용과 용량 할당을 가능하게 해요.
pinot.broker.enable.bounded.http.async.executor
pinot.broker.http.async.executor.max.pool.size
pinot.broker.http.async.executor.core.pool.size
pinot.broker.http.async.executor.queue.size
이 기능은 브로커 리소스를 더 잘 관리하게 해줘요.
결과 삭제 지원 (#10419)
queryOptions에 응답에서 resultTable을 삭제하는 매개변수를 추가해요. 이 모드는 메타데이터만으로 (결과에 민감한 데이터가 있을 수 있는) 쿼리를 트러블슈팅하는 데 사용할 수 있어요.
세그먼트에서 컬럼 순서를 결정적(deterministic)으로 만들기 (#10468)
세그먼트 메타데이터와 인덱스 맵에서 컬럼을 알파벳 순서로 저장해 결과가 결정적이도록 해요. 이 PR 전후로 생성된 세그먼트는 CRC가 다르므로, 업그레이드 중에는 이전·새 consuming 서버에서 다른 CRC의 세그먼트가 생길 수 있어요. 업그레이드 중 소비된 세그먼트는 일부 다운로드가 필요할 수 있어요.
Instance manager에서 EV 삭제를 위한 helix 타임아웃 구성 허용 (#10510)
helix 타임아웃을 구성하는 옵션 추가
external.view.dropped.max.wait.ms — external view가 삭제되기를 기다리는 시간(밀리초). 기본값 20분.
external.view.check.interval.ms — ZK에 최신 EV 상태를 ping하는 주기(밀리초).
기본적으로 대소문자 구분 없음 활성화 (#10771)
이 PR은 Pinot을 기본적으로 대소문자 구분 없이 만들고, 폐기된 속성 enable.case.insensitive.pql을 제거해요.
새로 추가된 API와 클라이언트 메서드
- 테넌트 풀을 가져오는 Server API 추가 (#11273)
- multi-stage 엔진 쿼리를 위한 새 broker 쿼리 지점 추가 (#11341)
- 시간 창이 있는 세그먼트 삭제를 위한 새 controller 엔드포인트 추가 (#10758)
- 테넌트 태그를 가져오는 새 API (#10937)
- 인스턴스 재태그 검증 확인 api (#11077)
- 테이블/인스턴스 활성화·비활성화에 PUT 요청 사용 (#11109)
- 브로커 태그가 지정된 테이블 반환을 지원하도록 pinot tenants tables api 업데이트 (#11184)
- pinot-broker와 java-client의 BrokerResponse에 requestId 추가 (#10943)
- java 클라이언트용 CompletableFuture로 결과 제공 및 메트릭 노출 (#10326)
정리 및 이전 버전과 호환되지 않는 변경
하이 레벨 consumer는 더 이상 지원되지 않음
쿼리 리터럴의 타입 정보 보존
- [feature] [backward-incompat] [null support #2] literal context와 literal transform에서 null 리터럴 정보 보존 (#10380) 숫자 값의 문자열 버전은 더 이상 허용되지 않아요. 예를 들어 "123"은 더 이상 숫자로 취급되지 않아요.
Controller 작업 상태 ZNode 경로 업데이트
- reload, force_commit에 대한 Zk 업데이트를 자체 Znodes로 이동 (#10451) 이 변경 배포 후에는 이전에 완료된 reload 작업의 상태를 사용할 수 없어요.
mutable 인덱스 메트릭 이름 변경
- Index SPI를 사용해 mutable index 구현 (#10687) mutable 인덱스의 일부 로그와 메트릭에 사용되는 IndexType enum 변경으로 인해 메트릭 이름이 약간 바뀔 수 있어요.
인스턴스 활성화/비활성화/삭제를 위한 controller API 업데이트
- controller의 getTenantInstances 호출 업데이트 및 그에 대한 POST 연산 분리 (#10993)
substring 쿼리 함수 정의 변경
- substring을 표준 sql 정의에 맞게 변경 (#11502)
추가된 전체 기능 목록
- 같은 테넌트의 여러 테이블 쿼리를 controller UI에서 실행 허용 #10336
- IndexLoadingConfig와 SegmentGeneratorConfig의 변경 캡슐화 #10352
- [Index SPI] IndexType (#10191)
- 필터된 aggregate transform 연산자 생성 단순화 (#10410)
- BaseProjectOperator와 ValueBlock 도입 (#10405)
- 로컬에서 실시간 세그먼트 생성 지원 추가 (#10433)
- 리팩터링: 연산자에 개별 인자 대신 context 전달 (#10413)
- MergeRollupTask에 "processAll" 모드 추가 (#10387)
- h2 버전을 1.x에서 2.x로 업그레이드 (#10456)
- 테이블 구성 업데이트 API에 선택적 force 매개변수 추가 (#10441)
- 서버 응답의 다른 컬럼 이름을 처리하도록 broker reduce 강화 (#10454)
- 사전 최적화를 활성화/비활성화하는 필드 추가 (#10484)
- BIG_DECIMAL의 변환된 H2 타입 NUMERIC(200, 100) 제거 (#10483)
- PinotQuery에 JOIN 지원 추가 (#10421)
- verifier에 testng 추가 (#10491)
- 서버 시작 중 임시 consuming 세그먼트 파일 정리 (#10489)
- pinot k8s sts와 deployment 시작 명령을 구성 가능하게 변경 (#10509)
- maxConnsPerRoute를 구성 가능하게 만들어 Server Bootstrap 병목 수정 (#10487)
- resultType과 함수의 dataType 간 타입 일치 (#10472)
- 세그먼트 zk 메타데이터 캐시 생성 (#10455)
- TransformFunction에서 ValueBlock 길이 증가 허용 (#10515)
- Instance manager에서 EV 삭제를 위한 helix 타임아웃 구성 허용 (#10510)
- 오류 보고 강화 (#10531)
- "GET /segments" API와 "GET /segments/{tableName}/select" 결합 (#10412)
- CSVRecordReader의 일부로 CSV 헤더 맵 노출 (#10542)
- reload, force_commit에 대한 Zk 업데이트를 자체 Znodes로 이동해 jobTypes 간 Zk 쓰기 부하 분산 (#10451)
- 세그먼트 리로드 경로에서도 사전 오버라이드 최적화 활성화 (#10557)
- 브로커의 rest 리소스 패키지를 구성 가능하게 변경 (#10588)
- 테이블 생성 허용 전에 EV 존재 확인 (#10593)
- endSegmentReplacement API에 매개변수(toSegments) 추가 (#10630)
- tierConfigs가 제공되면 세그먼트의 대상 tier 업데이트 (#10642)
- Percentile TDigest 집계 함수의 커스텀 압축 계수 지원 추가 (#10649)
- 테이블 구성을 업데이트된 형식으로 변환하는 유틸리티 (#10623)
- 세그먼트 수명주기 이벤트 리스너 지원 (#10536)
- gRPC 활동을 캡처하는 서버 메트릭 추가 (#10678)
- BloomFilter 기반 세그먼트 프루너 분리 및 병렬화 (#10660)
- pinot이 tableConfig에 부과하는 계약/규칙을 노출하는 API #10655
- Pinot 메트릭에 설명 필드 추가 (#10744)
- dedup 저장소를 플러그 가능하게 변경 #10639
- DATETRUNC 함수의 TimeUnit을 대소문자 구분 없이 변경 (#10750)
- [feature] 새 오프라인 세그먼트 할당 시 tierConfigs 고려 #10746
- 추정 크기에 따라 idealstate 압축 #10766
- 10689: pinot helm 릴리스 버전 0.2.7 업데이트 (#10723)
- 필터의 rhs에 NULL이 있으면 쿼리 실패 (#11188)
- Native Text Indices의 Off Heap 지원 (#10842)
- 무제한 스레드 생성을 피하도록 세그먼트 리로드 executor 개선 #10837
- seal 시 nullvector 비트맵 압축 (#10852)
- 기본적으로 대소문자 구분 없음 활성화 (#10771)
- 전체 upsert의 순서 어긋난 이벤트 메트릭 push (#10944)
- [feature] pinot-broker와 java-client의 BrokerResponse에 requestId 추가 #10943
- java 클라이언트용 CompletableFuture로 결과 제공 및 메트릭 노출 #10326
- 세그먼트 업로드/다운로드 실패의 minion 관측성 추가 (#10978)
- combine 연산자의 조기 종료 강화 (#10988)
- PinotClientTransport를 받는 fromController 메서드 추가 (#11013)
- 세그먼트 메타데이터에서 min/max 값 생성 보장 (#10891)
- GrpcSendingMailbox에 일부 할당 최적화 적용 (#11015)
- 사례 구분 없음 활성화 시 기존 컬럼과 같은 소문자 이름을 가진 새 컬럼 추가 금지 (#10991)
- boxing을 줄이기 위해 Long 속성을 기본형 값으로 교체 (#11059)
- KafkaPartitionLevelConnectionHandler.java에서 KafkaConsumer 생성 재시도 (#253) (#11040)
DateTimeGranularitySpec에서 size를 명시적으로 설정하지 않고 새 dataTime 형식 지원 (#11057)- 인증 실패 시 403 상태 코드 반환 (#11136)
- 자기 자신에 대한 테스트를 피하도록 compatible 테스트 단순화 (#11163)
- 세그먼트 min/max 속성 값 설정 코드 업데이트 (#10990)
- valid doc id 스냅샷이 있는 세그먼트 수를 추적하는 stat 추가 (#11110)
- 브로커 응답 통계에 brokerId와 brokerReduceTimeMs 추가 (#11142)
- 오버플로를 막기 위해 정수를 안전하게 곱하기 (#11186)
- 가장 큰 비교 값 업데이트 로직을 map 접근 밖으로 이동 (#11157)
- 불필요한 로딩을 중단하도록 DimensionTableDataManager 최적화 (#11192)
- isNullsLast와 isAsc 함수 개선 (#11199)
- 브로커 태그가 지정된 테이블 반환을 지원하도록 pinot tenants tables api 업데이트 (#11184)
- native text index에 multi-value 지원 추가 (#11204)
- QuerySummary에 percentiles 보고 추가 (#11299)
- 사용할 수 없는 세그먼트가 있는 브로커 응답용 meter 추가 (#11301)
- Minion 태스크 관리 강화 (#11315)
- 추가 lucene 인덱스 구성 추가 (#11354)
- orc record reader에 DECIMAL 데이터 타입 추가 (#11377)
- 좋지 않은 상태 체커에서 서버 시작 실패 구성 추가 (#11347)
- idle 임계값 이후 freshness 체커 전달 허용 (#11345)
- 하이브리드 tableConfig 생성을 위한 broker 검증 추가 (#7908)
- 파티션된 테이블 스캔의 파티션 병렬 처리 지원 (#11266)
취약점 수정, 버그 수정, 정리 및 폐기
- Apache Pinot에서 하이 레벨 consumer 지원 제거 (#11017)
- JDBC 드라이버의 username 확인 수정 (#10416)
- [Clean up] AggregationFunction 인터페이스에서 getColumnName() 제거 (#10431)
- jersey TerminalWriterInterceptor의 MessageBodyWriter not found 문제 수정 (#10462)
- Bug fix: 첫 NoOp 블록부터 연산자 실행 시간 계산 시작 (#10450)
- StrictReplicaGroup의 사용 불가능한 인스턴스 문제 수정 (#10466)
- shell을 bash로 변경 (#10469)
- 서버 종료 중 세그먼트 데이터 매니저 이중 파괴 수정 (#10475)
- ForwardIndexHandler의 "isSorted()" 사전 조건 확인 제거 (#10476)
- 스트리밍 selection 연산자의 null 처리 수정 (#10453)
- jackson 의존성 수정 (#10477)
- Startree 인덱스 빌드 강화 (#10905)
- 프레디킷의 lhs와 rhs가 같은 쿼리 최적화 (#10444)
- static checker가 감지한 경고에 대한 사소한 수정 (#10492)
- 강제 커밋 시 전체 세그먼트 커밋 프로토콜 대기 (#10479)
- 정렬된 컬럼의 noDict → Dict 변환 버그 수정 및 테스트 추가 (#10497)
- 세그먼트에서 컬럼 순서를 결정적으로 변경 (#10468)
- resultType과 함수의 dataType 간 타입 일치 (#10472)
- 세그먼트 교체 프로토콜에 빈 segmentsTo 허용 (#10511)
- coalesce의 기본 호환 타입으로 문자열 사용 (#10516)
- MemoryOptimizedTable을 스레드 안전하게 만들기 위해 genericRow에 threadlocal 변수 사용 (#10502)
- spark2 connector pom 파일의 shading 수정 (#10490)
- 오랫동안 지속되는 필터링되지 않은 메시지 시퀀스로 인한 ramping 지연 수정 (#10418)
- 각 연산자에서 메트릭 직렬화 안 함 (#10473)
- bin-dist 프로필 사용 시 pinot-controller가 webpack production 모드를 적용하도록 (#10525)
- /ingestFromUri 사용 시 FS props 처리 수정 (#10480)
- v0_deprecated 배치 수집 작업 정리 (#10532)
- kafka 0.9 지원 폐기 (#10522)
- 오버플로를 막기 위해 정수를 안전하게 곱하기 (#11186)
- codecov 타임아웃 줄이고 어떤 경우에도 작업 실패로 만들지 않음 (#10547)
- 빈 배열의 DataTableV3 serde 버그 수정 (#10583)
- 추적 활성화 시 연산자 통계 기록 안 함 (#10447)
- logger API의 auth 토큰을 controller에서 다른 controller들과 brokers로 전달 (#10590)
- Bug fix: 부분 upsert 기본 전략이 null (#10610)
- 테이블 생성 중 EV 확인으로 인한 flaky 테스트 수정 (#10616)
- withDissabledTrue 오타 수정 (#10624)
- 불필요한 mailbox id ser/de 정리 (#10629)
- 모든 세그먼트가 가지치기된 쿼리에 대한 오류 메트릭 없음 (#10589)
- bug fix: RealtimeLuceneTextIndex 클래스에서 많은 읽기 요청 처리 시 QueryParser를 스레드 안전하게 유지 (#10620)
- static DictionaryIndexConfig.DEFAULT_OFFHEAP이 실제로 onheap인 문제 수정 (#10632)
- 10567: [cleanup pinot-integration-test-base], 쿼리 생성 정리 및 기타 리팩터링 (#10648)
- 세그먼트 push 작업 러너의 SegmentGenerationJobSpec 이전 버전 비호환성 수정 (#10645)
- toSegments 목록을 올바르게 가져오는 버그 수정 (#10659)
- 10661: where 절의 실패하는 숫자 비교의 IllegalStateException 수정 (#10662)
- 부분 upsert가 여러 비교 컬럼 값을 반영하지 않는 문제 수정 (#10693)
- Min Consuming Freshness의 타이머 값 보고 버그 수정 (#10690)
- rowSize → columnSize 오타 수정 (#10699)
- 테이블 리밸런스 전에 세그먼트 대상 tier 업데이트 (#10695)
- 문서를 잘못 필터링할 수 있는 star-tree 필터 연산자 버그 수정 (#10707)
- 쿼리가 DocIdSetOp를 거치지 않는 코너 케이스의 계측 강화 (#10729)
- bug fix: 인스턴스 구성 편집 시 누락된 속성 추가 (#10741)
- segmentMapper가 RecordReader의 초기화와 정리를 하도록 (#10874)
- quickstart 레시피의 githubEvents 테이블 수정 (#10716)
- 실시간 세그먼트 커밋 업로드 사소한 개선 (#10725)
- 모든 중단된 쿼리에 503 반환. 쿼리 종료 코드 리팩터링 (#10683)
- 서버의 오류 캐시에 디코더 초기화 오류 추가 (#10773)
- bug fix: SegmentAssignmentConfig에 @JsonProperty 추가 (#10759)
- 종료 전에 전체 no query 타임아웃 대기 보장 (#10784)
- 폐기된 규약으로 KLL 함수 정리 (#10795)
- SEGMENT_STREAMED_DOWNLOAD_UNTAR_FAILURES 메트릭의 의미를 개별 세그먼트 fetch 실패 수로 재정의 (#10777)
- 교환 라우팅 중 예외가 stucked pipeline을 유발하는 문제 수정 (#10802)
- [bugfix] 부동 소수점과 정수 타입의 이전 버전 비호환 문제 수정 (#10650)
- [pinot-core] 세그먼트 데이터 매니저 생성 후 consumption 시작 (#11227)
- 필터된 집계 group-by의 IndexOutOfBoundException 수정 (#11231)
- 세그먼트 디버그 엔드포인트의 null 포인터 예외 수정 #11228
- RangeIndexBasedFilterOperator 정리 (#11219)
- 메타데이터의 속성 값 escape/unescape 문제 수정 (#11223)
- order by 비교기의 버그 수정 (#10818)
- 병합된 비교 컬럼 값의 nullness 속성 유지 (#10704)
- H3IndexResolution에 필수 JSON 애노테이션 추가 (#10792)
- SELECT DISTINCT ORDER BY의 버그 수정 (#10827)
- jsonPathString은 문자열 리터럴 "null" 대신 null을 반환해야 함 (#10855)
- Bug Fix: 스키마 진화 후 Segment Purger가 이전 세그먼트를 정리하지 못함 (#10869)
- metainfo에 구성보다 더 높은 우선순위를 줘서 #10713 수정 (#10851)
- Data Manager 종료 후 PinotFS 닫기 (#10888)
- http conn 누출 버그 수정을 위해 awssdk 버전 상향 (#10898)
- MultiNodesOfflineClusterIntegrationTest.testServerHardFailure() 수정 (#10909)
- SELECT DISTINCT ORDER BY LIMIT의 버그 수정 (#10887)
- 정수 오버플로 버그 수정 (#10940)
_resultSet이 null이 아니면 true 반환 (#10899)- lateral join 쿼리의 테이블 이름 추출 수정 (#10933)
- 2GB보다 큰 mmap'd 세그먼트 프리페치 시 캐스팅 수정 (#10936)
- 리더 닫기 전 null 확인 (#10954)
- LIKE 쿼리의 SQL 와일드카드 이스케이프 수정 (#10897)
- [Clean up] DISTINCT를 집계로 계산하지 않음 (#10985)
- 세그먼트가 파괴되면 lucene 리더를 큐에 다시 추가하지 않음 #10989
- 메시지 배치 수집 지연 수정 (#10983)
- snapshot lock의 오타 수정 (#11007)
- 복합 타입 처리의 루트 수준 필드 이름 추출 시 전체 구분자 사용 (#11005)
- Denial of Service(DoS) 수정을 위해 jersey 업데이트 (#11021)
- controller의 getTenantInstances 호출 업데이트 및 그에 대한 POST 연산 분리 (#10993)
- Server-side Template Injection 수정을 위해 freemaker 업데이트 (#11019)
- h2 결과와 비교하도록 double 0을 올바르게 포맷 (#11049)
- ConnectionFactory의 double-checked locking 수정 (#11014)
- presto-pinot-driver와 pinot-java-client-jdk8 모듈 제거 (#11051)
- RequestUtils가 getTableNames시 항상 문자열 배열을 반환하도록 (#11069)
- BOOL_AND와 BOOL_OR 결과 타입 수정 (#11033)
- [cleanup] 통합 테스트에서 일부 쿼리와 controller/broker 메서드 통합 (#11064)
- multi-stage 엔진의 grpc 회귀 수정 (#11086)
- 오래된 TODO 삭제 (#11080)
- AddTableCommand.toString()의 사소한 수정 (#11082)
- mutable MV 컬럼에서 Lucene 텍스트 인덱스 사용 허용 (#11093)
- 같은 테이블의 여러 세그먼트 병렬 오프로드 허용 (#11107)
- minion-stateless에 serviceAccount 추가 (#11095)
- Bug fix: TableUpsertMetadataManager가 null (#11129)
- reload 버그 수정 (#11131)
- RealtimeToOfflineSegmentsTask에서 추가 집계 타입 허용 (#10982)
- range index로 EQ 프레디킷 해결 시 버그 수정 (#11146)
- 파일 경로 변수로 사용되는 API 입력 살균 (#11132)
- 중첩 쿼리에 gapfill이 없을 때 NPE 수정 (#11155)
- 쿼리 응답 오류 스트림이 null일 때 NPE 수정 (#11154)
- java 8 호환성을 위해 인터페이스 메서드를 non private으로 변경 (#11164)
- geo 인덱싱 실패에도 nextDocId 증가 (#11158)
- 스트림 연결 오류로 consuming 세그먼트가 ERROR 상태가 되는 문제 수정 (#11166)
- TableRebalancer에서 인스턴스 재할당 시에만 instance partitions 제거 (#11169)
- JDK 8 미지원 코드 제거 (#11176)
- pinot-integration-tests 빌드에 -am 플래그를 추가해 compat 테스트 수정 (#11181)
- CalciteSchema에서 스칼라 함수를 중복 등록하지 않음 (#11190)
- 메타데이터 push의 스토리지 할당량 확인 수정 (#11193)
- NULL 지원 필터링 데드 코드 경로 삭제 (#11198)
- [bugfix] 재시작 시 실시간 세그먼트를 working dir로 이동하지 않음 (#11226)
- multi-value의 ExpressionScanDocIdIterator 버그 수정 (#11253)
- PredicateEvaluator::isAlwaysTrue가 true일 때 NULL 제외 (#11261)
- UI: sql 쿼리 옵션 구분자 수정 (#10770)
- ScalarTransformFunctionWrapper의 NullPointerException 버그 수정 (#11309)
- [refactor] 부분 upsert 핸들러의 디스크 읽기 개선 (#10927)
- 응답이 비어 있을 때 잘못된 쿼리 시간 수정 (#11349)
- getMessageAtIndex가 호환성을 위해 streamMessage의 값을 실제로 반환해야 함 (#11355)
- presto jdk8 관련 의존성 제거 (#11285)
- 여러 consuming 세그먼트에 대한 특별 라우팅 처리 제거 (#11371)
- TableDataManager 종료 제대로 처리 (#11380)
_tableTenantServersMap의 오래된 pinot ServerInstance 수정 (#11386)- mutable forward index의 스레드 안전성 문제 수정 (#11392)
- RawStringDistinctExecutor 정수 오버플로 수정 (#11403)
- [logging] 1분 임계값을 존중하도록 consume rate 로깅 버그 수정 (#11421)