1.2.0
1.2.0
Apache Pinot 1.2.0 릴리스 노트 문서예요. 이 릴리스는 Multistage 엔진, Upsert, Compaction에 대한 여러 개선과 버그 수정을 포함하며, 그 외에도 많은 작은 기능과 일반 버그 수정이 있어요.
출처: 문서
본문
Multistage 엔진 개선 (Multistage Engine Improvements)
기능 (Features)
새 window 함수: LEAD, LAG, FIRST_VALUE, LAST_VALUE #12878 #13340
- LEAD는 프레임의 현재 행 뒤 값을 접근할 수 있게 함.
- LAG는 프레임의 현재 행 앞 값을 접근할 수 있게 함.
- FIRST_VALUE와 LAST_VALUE는 프레임의 각 극값을 반환.
V2 엔진의 논리적 데이터베이스 지원 #12591 #12695
- V2 엔진이 이제 "database" 구조를 지원해 같은 Pinot 클러스터 내 테이블 네임스페이스 격리를 가능하게 함.
- 여러 사용자가 같은 Pinot 클러스터를 사용할 때 사용자 경험 개선.
- 데이터베이스 수준에서 접근 제어 정책 설정 가능.
- 데이터베이스는
SET database=my_db;같은 SET 문으로 쿼리에서 선택 가능.
Multi-Value(MV)와 Array 함수 지원 개선
- point-wise 배열 연산용 array sum 집계 함수 추가 #13324.
valueInMV 변환 함수 지원 추가 #13443.- 필터에서 MV 컬럼의 숫자 캐스트 버그 수정 #13425.
- 컬럼에 데이터가 없을 때 ArrayAgg의 NPE 수정 #13358.
- array 리터럴 처리 수정 #13345.
WITHIN GROUP 절과 ListAgg 지원 #13146
WITHIN GROUP절은 그룹 내에서 주어진 순서로 행을 처리하는 데 사용할 수 있음.- 가장 흔한 사용 사례 중 하나는
ListAgg함수로,WITHIN GROUP과 결합하면 주어진 순서로 문자열을 연결할 수 있음.
Scalar/Transform 함수와 Set 연산 개선
- v2 쿼리 엔진의 중간 stage에서 사용할 지리공간 스칼라 함수 지원 추가 #13457.
- 'WEEK' 변환 함수 수정 #13483.
EXTRACT를 스칼라 함수로 지원 #13463.- INTERSECT와 EXCEPT Set 연산에 ALL 수정자 지원 추가 #13151 #13166.
리터럴 처리 지원 개선
- Percentile 같은 집계 함수의 리터럴 인자 처리 버그 수정 #13282.
- INT와 FLOAT 리터럴 허용 #13078.
- 모든 타입의 리터럴 처리 수정 #13344 #13345.
- null 불관용 함수의 null 리터럴 처리 수정 #13255.
메트릭 개선
- 전역 및 테이블 수준에서 실행된 쿼리를 추적하는 새 메트릭 추가 #12982.
- 조인 카운트와 window 함수 카운트를 추적하는 새 메트릭 #13032.
- Multistage 엔진 내부를 추적하는 여러 meter와 timer #13035.
주요 개선 및 버그 수정
- window가 너무 커지지 않도록 하는 새 확인을 추가해 Window 연산자 탄력성 개선 #13180 #13428 #13441.
- Group Key 생성 최적화 #12394.
- 최대 1개의 EOS 블록을 끌어오는 규약을 지키도록
SortedMailboxReceiveOperator수정 #12406. - 실행 통계 처리 방식 개선 #12517 #12704 #13136.
- 계획 직렬화에 Reflection 대신 Protobuf 사용 #13221.
Upsert Compaction과 Minion 개선
기능과 개선
- Minion이 이제 인스턴스 태그에 기반한 리소스 격리를 지원.
- 인스턴스 태그는 테이블 수준에서 구성되며, 테이블의 각 태스크에 설정할 수 있음.
- 이를 통해 임의의 리소스 격리 전략을 구현할 수 있음. 예: Minion 노드 집합을 사용해 임의 테이블 집합에서 임의 태스크 집합을 실행 가능.
Greedy Upsert Compaction 스케줄링 #12461
- upsert compaction이 이제 유효하지 않은 문서 수에 기반해 compaction할 세그먼트를 스케줄링.
- 이는 compaction 태스크가 invalid docs의 임의 시간 분포를 처리하는 데 도움.
주요 개선
- Minion은 이제 deepstore 사본이 누락된 경우 서버에서 세그먼트를 다운로드할 수 있음. 이 기능은 클러스터 수준 구성
allowDownloadFromServer로 활성화 #12960 #13247. - Minion의 TLS 포트 지원 추가 #12943.
- Minion의 세그먼트/레코드 처리 정보를 추적하는 새 메트릭 추가 #12710.
버그 수정
- Minion이 Task Config의 잘못된 인스턴스 태그를 이제 우아하게 처리. 이 변경 전에는 Minion이 태스크 타임아웃까지
IN_PROGRESS상태에 갇혀 있었음 #13092. - 모든 서버에서 validDocIDsMetadata를 반환하는 버그 수정 #12431.
- upsert compaction이 maxLength 정보를 유지하지 않고 문자열 필드를 자르는 문제 #13157.
Upsert 개선
기능과 개선
Upsert 테이블의 일관된 테이블 뷰 #12976
- Upsert 테이블에 대한 다양한 일관성 보장 모드 추가.
NONE, SYNC, SNAPSHOT으로 설정할 수 있는 새 UpsertConfigconsistencyMode추가.SYNC는 데이터 신선도를 위해 최적화되지만 쿼리 지연이 높아질 수 있으며 저-qps 사용 사례에 가장 적합. 이 모드에서 수집 스레드는 validDocID 비트맵 업데이트 시 WLock을 가짐.SNAPSHOT모드는 validDocID 스냅샷에서 유효 문서 목록을 얻어 high-qps/high-ingestion 사용 사례를 처리할 수 있음. 스냅샷은 몇 초마다 새로고침할 수 있고, 허용 오차는 쿼리 옵션upsertViewFreshnessMs로 설정할 수 있음.
플러그 가능한 부분 Upsert Merger #11983
- 부분 Upsert는 이전 레코드와 새로 들어오는 레코드를 병합해 최종 수집 레코드를 생성.
- Pinot은 이제 사용자가 이전 행과 새 행의 병합 계산 방식을 커스터마이즈할 수 있게 함.
- 이는 새 행의 컬럼 값이 이전 행과 새 행의 임의 함수가 되도록 허용.
Upsert Backfill용 외부 파티션 세그먼트 업로드 지원 13107
- Upsert Backfill용으로 업로드된 세그먼트가 이제 속한 Kafka 파티션을 명시적으로 지정할 수 있음.
- 이는 외부 생성 세그먼트가 임의 기본 키에 임의 해시 함수로 파티셔닝된 Upsert 테이블을 백필할 수 있게 함.
기타 개선 및 버그 수정
- 데이터 불일치로 이어질 수 있는 Upsert의 Equals 비교 컬럼 값 처리 버그 수정 (#12395)
- upsert 스냅샷은 이제 업데이트가 있는 세그먼트만 스냅샷함. #13285.
주요 기능 (Notable Features)
JSON 지원 개선
- JSON Index를 이제 Regex와 Range 프레디킷 평가에 사용할 수 있음. #12568
jsonExtractIndex가 이제 컨텍스트 배열 필터를 지원. #12683 #12532.- JSON 컬럼 타입이 이제
=,!=,IN,NOT IN같은 필터 프레디킷을 지원. JSON 값이 매우 작은 시나리오에 편리. #13283. JSON_MATCH가 이제 배타적 프레디킷을 올바르게 지원. 예:JSON_MATCH(person, '"$.addresses[*].country" != ''us'''같은 프레디킷으로 미국에 없는 주소를 최소 하나 가진 사람을 찾을 수 있음. #13139.jsonExtractIndex가 Multi-Value JSON 필드 추출을 지원하고, 키가 없을 때 기본값 제공도 지원. #12748.- 잘못된 JSON 처리 옵션을 늘리는
isJsonUDF 추가. 쿼리와 수집 시 잘못된 json 컬럼 값 필터링에 사용 가능. #12603. jsonExtractIndex의ArrayIndexOutOfBoundsException수정. #13479.
Lucene과 텍스트 검색 개선
- Lucene 텍스트 인덱스 세그먼트 빌드 시간 40-60% 개선. 이 개선은 consuming 세그먼트가 커밋되어
ImmutableSegment로 바뀔 때 실현됨. 큰 텍스트 인덱스 때문에 커밋 시 수집 지연을 낮추는 데 크게 도움 #12744 #13094 #13050. - Lucene 인덱스 구성
enablePrefixSuffixMatchingInPhraseQueries가true로 설정되면 Phrase Search가 3배 더 빠르게 실행될 수 있음. 이는 phrase search 쿼리를 와일드카드와 prefix 매칭 쿼리로 재작성해 달성 #12680. - 필터 표현식에 우선순위를 올바르게 적용하지 않아 잘못된 결과로 이어질 수 있는
TextMatchFilterOptimizer버그 수정. #13009. - 잘못된 결과를 반환할 수 있는
NOT text_match처리 버그 수정. #12372. - 텍스트 검색 능력을 강화하는
SchemaConformingTranformerV2추가. #12788. - Lucene NRT Refresh Delay를 추적하는 메트릭 추가 #13307.
- 실시간 세그먼트에
NRTCachingDirectory로 전환하고, 쿼리 시간IndexOutOfBounds예외를 피하기 위해 실시간 Lucene 인덱스 중복 방지. #13308. - Lucene 버전을 9.11.1로 업그레이드. #13505.
새 Funnel 함수** #13176 #13231 #13228
- 주어진 슬라이딩 윈도우에 대한 최대 funnel 단계를 계산할 수 있는
funnelMaxStep함수 추가. - 완료된 funnel 수를 계산하는
funnelCompleteCount와 funnel 일치 배열을 가져오는funnelMatchStep추가.
OnHeapByteDictionary의 Interning 지원** #12342
- 중복 값의 특정 분포에서 dictionary 인코딩된 바이트 컬럼의 힙 사용량을 줄일 수 있음. 상세는 #12223 참고.
새 테이블의 Column Major Builder 기본 활성화** #12770
- 이 기능 전에는 세그먼트 커밋 시 Pinot이 Mutable Segment의 모든 컬럼 데이터를 row-major로 변환한 다음 column major Immutable Segment를 다시 빌드했음.
- 이 기능은 row-major 변환을 건너뛰므로 공간과 시간 모두 효율적일 것으로 기대됨.
- 세그먼트 커밋의 수집 지연을 낮추는 데 도움이 되며, 특히 세그먼트가 큰 경우 유용.
쿼리 편집기의 SQL 포맷팅 지원** #11725
- 이제 Controller UI에서 바로 SQL을 예쁘게 만들 수 있어요!
UUID 기본 키의 해시 함수** #12538
- UUID에 최적화된 Upsert 기본 키용 무손실 해시 함수 추가.
- 해시 함수는 Old Gen을 최대 30% 줄일 수 있음.
- UUID를 36바이트가 필요한 UTF 문자열로 인코딩하는 대신 16바이트 배열에 매핑.
컬럼 수준 인덱스 건너뛰기 쿼리 옵션** #12414
- 쿼리 성능이나 결과에 대한 인덱스의 영향을 디버깅하는 데 편리.
skipIndexes옵션을 쿼리에 추가해 원하는 수의 인덱스를 건너뛸 수 있음. 예:SET skipIndexes=inverted,range;
새 UDF와 Scalar 함수
- 새 GeoHash 함수:
encodeGeoHash,decodeGeoHash,decodeGeoHashLatitude,decodeGeoHashLongitude. dateBin은 timestamp를 가장 가까운 시간 버킷에 정렬하는 데 사용할 수 있음.- 문자열 입력에서 모든 문자열 부분수열을 생성하는
prefixes,suffixes,uniqueNgramsUDF. #12392. - 잘못된 JSON 처리 옵션을 늘리는
isJsonUDF 추가. 쿼리와 수집 시 잘못된 json 컬럼 값 필터링에 사용 가능. #12603. splitPartUDF 사소한 개선. #12437.
Forward Index의 CLP 압축 코덱** #12504
- CLP는 특정 로그 타입에 대해 매우 높은 압축률을 가진 압축 로그 프로세서.
- 활성화하려면 대상 컬럼의
fieldConfigList에서compressionCodec을 설정할 수 있음.
기타 개선 (Misc. Improvements)
- 파티션 수준에서 세그먼트 프리로드 활성화 #12451.
- AdoptOpenJdk 대신 Temurin 사용 #12533
- record transformer에 record reader config/context param 추가 #12520
- 레거시 commons-lang 의존성 제거 #13480
- 12508: 세그먼트 행 flush 구성 기능 추가 #12681
- ADSS 경쟁 조건 및 클라이언트 오류 코드 업데이트 #13104
- Broker REST API의 예외를 Response 개체로 변환하는 ExceptionMapper 추가 #13292
- FunnelMaxStepAggregationFunction과 FunnelCompleteCountAggregationFunction 추가 #13231
- GZIP 압축 코덱 추가 (#11434) #12668
- Pinot Helm 차트에 PodDisruptionBudgets 추가 #13153
- 문자열 함수의 Postgres 호환 이름 별칭 추가 #12795
- 텍스트 검색 능력을 강화하는 SchemaConformingTransformerV2 추가 #12788
- multi-stage 블록 serde 비용 측정 벤치마크 추가 #13336
- QueryRequest Protobuf 메시지에 plan version 필드 추가 #13267
- bytes로의 cast가 없는지 확인하는 post-validator visitor 추가 #12475
- 경로 이동을 금지하는 안전한
CLStaticHttpHandler버전 추가 #13124 - 필터된 메시지 오프셋 추적 기능 #12602
- BrokerResponse에 'numRowsResultSet' 다시 추가, 결과 테이블 숨김 시 유지 #13198
- shade용 프로필 다시 추가 #12979
- hadoop-mapreduce-client-core에서 일부 제외 의존성 다시 추가 #12638
- multi-stage 쿼리 엔진용 이전 버전 호환 회귀 테스트 스위트 추가 #13193
- 커스텀 개체 축적기용 base 클래스 추가 #12685
- funnel 분석용 clickstream 예제 테이블 추가 #13379
- timezone 구성 옵션 추가 #12386
- 문자열 컬럼 길이가 구성된 최대 스키마 길이를 초과할 때 레코드 수집을 건너뛰는 구성 추가 #13103
- allLiveInstances를 가져오는 controller API 추가 #12498
- isJson UDF 추가 #12603
- asf.yaml에 기여자 목록 추가 #13346
- upsert 테이블의 일관된 테이블 뷰를 위한 잠금 로직 추가 #12976
- upsert-snapshot에서 누락된 세그먼트 수 추적 메트릭 추가 #12581
- SEGMENTS_WITH_LESS_REPLICAS 모니터링 메트릭 추가 #12336
- 일치하지 않는 단계에 더미 이벤트 추가 허용 모드 #13382
- offset 기반 lag 메트릭 추가 #13298
- protobuf codegen 디코더 추가 #12980
- 리밸런싱 중 job id가 유지되기를 기다리는 재시도 정책 추가 #13372
- downloadSegmentFromPeer 중 라운드 로빈 로직 추가 #12353
- 디코더에 스키마 입력 추가 #12981
- splitPartWithLimit과 splitPartFromEnd UDF 추가 #12437
- 세그먼트 리로드 중 raw 파생 컬럼 생성 지원 추가 #13037
- raw JSON 필터 프레디킷 지원 추가 #13283
- compressionCodec으로 ForwardIndex 구성 가능성 추가 #12218
- upsert-snapshot timer 메트릭 추가 #12383
- REALTIME 테이블일 때 forward index 비활성화 검증 확인 추가 #12838
- 릴리스 1.1.0에 대한 PR 호환성 테스트 추가 #12921
- 메타데이터에 kafka 파티션 번호 추가 #13447
- 쿼리 응답에 pinot-error-code 헤더 추가 #12338
- SegmentPreProcessorTest.java에 추가 데이터 타입 테스트 추가 #12755
- 테이블 구성에서 instance pool과 replica group 구성을 활성화하는 클러스터 구성 추가 #13131
- WindowFunction의 batch api 지원 추가 #12993
- bytes string 데이터 타입 통합 테스트 추가 #12387
- 다양한 서비스에 추가 컴포넌트 등록을 허용하는 registerExtraComponents 추가 #13465
- insecure TLS 지원 추가 #12416
- SSLFactory 생성 시 insecure TLS 지원 추가 #12425
- AGGREGATE_CASE_TO_FILTER 규칙 추가 #12643
- 컬럼별, 쿼리 시간 인덱스 건너뛰기 옵션 추가 #12414
- Case 표현식의 집계 허용 #12613
- 오버라이드 가능한 PinotHelixResouceManager 개체 생성자 함수 제공으로 controller starter에서 PinotHelixResourceManager 서브클래스 사용 허용 #13495
- RequestContext가 http-headers 대소문자 무시 고려 #13169
- 최대 CPU·디스크 활용을 위해 서버에서 쿼리 실행 직전 서버 스로틀링 허용 #12930
- star-tree 인덱스의 모든 raw 인덱스 구성 허용 #13225
- 사용자와 테이블 구성에 환경 변수와 시스템 속성 둘 다 적용 허용, 환경 변수가 시스템 속성보다 우선 #13011
- Pinot 서버 측 GrpcQueryServer의 구성 가능한 queryWorkerThreads 허용 #13404
- 명시적으로 구성되지 않은 로거에도 로그 수준 동적 설정 허용 #13156
- SegmentProcessorFramework에서 커스텀 record reader를 init/close하도록 전달 허용 #12529
databasehttp 헤더로 데이터베이스 컨텍스트 전달 허용 #12417- stop이 consumer 스레드를 중단하고 리소스를 안전하게 해제하도록 허용 #13418
- 쿼리용 사용자 구성 가능 regex 라이브러리 허용 #13005
- 서버 파티션 테이블 최적화를 위한 'serverReturnFinalResult' 사용 허용 #13208
- 리로드 시 새로 추가된 파생 컬럼에 기본값 할당 #12648
- 통합 테스트의 포트 충돌 방지 #13390
- null tableNames 더 잘 처리 #12654
- compressionCodec으로 CLP #12504
- Apache Pinot 최신 릴리스 버전의 helm 앱 버전을 1.0.0으로 변경 #12436
- Google 의존성 정리 #13297
- BrokerRequestHandler와 BrokerResponse 정리 #13179
- /GrpcBrokerClusterIntegrationTest의 임의 sleep 정리 #12379
- 벡터 인덱스 주석과 예외 정리 #13150
- HTTP 컴포넌트 의존성 정리 및 Thrift 업그레이드 #12905
- Javax와 Jakarta 의존성 정리 #12760
- 폐기된 쿼리 옵션 정리 #13040
- consumer 인터페이스와 레거시 코드 정리 #12697
- pinot-s3 아래 불필요한 의존성 정리 #12904
- 사용하지 않는 aggregate internal hint 정리 #13295
- live broker의 API 응답 일관성 #12201
- bouncycastle 라이브러리 통합 #12706
- nimbus-jose-jwt 버전을 9.37.3으로 통합 #12609
- ControllerRequestClient가 헤더를 받음. authN 테스트에 유용 #13481
- 세그먼트 메타데이터 파일용 커스텀 구성 속성 리더 #12440
- 데이터베이스 삭제 API #12765
- PinotHelixResourceManager#getAllTables()를 getAllTables(String databaseName)로 폐기 #12782
- Kafka에서 만료된 메시지 감지. 로그 및 gauge 설정. #12608
- BaseClusterIntegrationTest에서 리소스 클래스 하드코딩 안 함 #13400
- upsert 스냅샷 플로우 오류 시 수집 일시 중지 안 함 #13257
- flatten 중 원본 필드 버리지 않음 #13490
- broker 테넌트 생성 시 -realTimeInstanceCount와 -offlineInstanceCount 옵션 강제하지 않음 #13236
- skip indexes 사소한 변경 #12514
- Broker Adaptive Server Selector 타입 메트릭 발행 #12482
- 테이블 크기 관련 메트릭을 lead controller에서만 발행 #12747
- SegmentProcessFramework에서 complexType 처리 활성화 #12942
- v2 multi-stage 쿼리 엔진에서 더 많은 통합 테스트 실행 #13467
- avroParquet이 Int96을 bytes로 읽도록 활성화 #12484
- Kinesis consumer 강화 #12806
- Parquet 테스트 강화 #13082
- 클래스 이동을 처리하도록 ProtoSerializationUtils 강화 #12946
- Pulsar consumer 강화 #12812
- PulsarConsumerTest 강화 #12948
- rows를 0으로 설정하지 않고 크기 임계값을 받도록 commit 임계값 강화 #12684
- regexp와 range 프레디킷 평가를 지원하도록 json 인덱스 강화 #12568
- 개선: Sketch 값 축적기 성능 #13020
- FieldConfig.getEncodingType()가 절대 null이 아니도록 보장 #12430
- PinotQuery에서 사용되는 모든 리스트가 ArrayList임을 보장 #13017
- BrokerResponse에서 brokerId와 requestId가 항상 설정되도록 보장 #13200
- 파티션 수준 세그먼트 프리로드 진입 #12451
- star-tree 인덱스 저장 타입 확인에서 차원 제외 #13355
- TableDataManager에서 더 많은 헬퍼 API 노출 #13147
- flakiness를 줄이기 위해 compatibility verifier 운영 타임아웃을 1m에서 2m으로 확장 #13338
- transform 함수 jsonExtractIndex용 json 인덱스에서 개별 배열 요소 추출 #12466
- 쿼리 할당량 용량 사용률 메트릭을 콜백 함수로 가져오기 #12767
- First with time #12235
- GitHub Actions checkout v4 #12550
- Gzip 압축, 압축 버퍼에서 압축되지 않은 크기 계산 보장 #12802
- 브로커의 multi-stage 통계 수집 중 오류를 우아하게 처리 #13496
- kafka factory의 모든 메서드에서 shaded 클래스 처리 #13087
- UUID 기본 키 해시 함수 #12538
- Direct Memory OOM 확인 시 대소문자 무시 #12657
- Retention Manager 세그먼트 lineage 정리 개선 #13232
- join limit 위반 시 최대 행 수 오류 메시지 개선 #13394
- 메시지 인덱스/변환 실패 시 예외 로깅 개선 #12594
- 인덱스 업데이트의 range index 핸들러 로깅 개선 #13381
- upsert compaction 임계값 검증 개선 #13424
- validDocID 스냅샷 요청의 warn 로그 개선 #13280
- server grpc 쿼리 메트릭 개선 #13177
- varargs null 확인 개선 #12673
- lucene 텍스트 인덱스 실시간→오프라인 변환의 세그먼트 빌드 시간 개선 #12744
- ClusterTest에서 Kafka와의 잠재적 충돌을 피하기 위해 시작 포트를 높게 #13402
- PinotLogicalAggregate 도입 및 internal hint 제거 #13291
- 견고성을 위해 스트림 메시지 디코더 생성 중 재시도 도입 #13036
- broker 시작 단계에서 잘못된 서버 구성 격리 #12931
- 이슈 #12367 #12922
- Json extract index 필터 지원 #12683
- Json extract index mv #12532
- database 있음/없음 get tables API 유지 #12804
- Lint 실패 #12294
- 예외를 던지는 대신 warn 메시지 로깅 #12546
- 차원 테이블 크기 오류 메시지를 더 명확하게 #13163
- Helix 상태 전환 처리를 멱등하게 #12886
- 비호환성을 피하기 위해 KafkaConsumerFactory 메서드를 덜 제한적으로 #12815
- 태스크 매니저 API를 database 인지형으로 #12766
- 다양한 tier 백엔드로 구성된 테이블 수 메트릭 #12940
- upsert 테이블 수 메트릭 #12505
- Realtime Rows Fetched와 Stream Consumer Create Exceptions 메트릭 #12522
- Minmaxrange null #12252
- 몇 개의 서버가 실패했는지 나타내도록 consumingSegmentsInfo 엔드포인트 수정 #12523
- offset 검증 로직을 consumer 클래스로 이동 #13015
- org.apache.calcite 패키지를 org.apache.pinot.calcite로 이동 #12837
- resolveComparisonTies를 addOrReplaceSegment에서 base 클래스로 이동 #13396
- pinot-core 아래의 잘못 위치한 테스트 이동 #12884
- wildfly-openssl 의존성 관리를 root pom으로 이동 #12597
- deleteSegment 호출을 POST에서 DELETE 호출로 이동 #12663
- 세그먼트 리로드 중 raw 파생 컬럼의 불필요한 추가 배열 할당·변환 최적화 #13115
- MV jsonPath 평가 시 명시적 TypeRef 전달 #12524
- null을 지원하는 Percentile 연산 #12271
- 다음 개발 반복 준비 #12530
- Http 클라이언트에 Disable User Agent 구성 전파 #12479
- 세그먼트 프로세서 프레임워크에서 복합 타입 변환기 제대로 처리 #13258
- SegmentCompletion 중단 시 응답 제대로 반환 #13206
- helm 0.2.8 게시 #12465
- helm 0.2.9 게시 #13230
- janino 의존성을 root pom으로 이동 #12724
- pulsar 버전 정의를 root POM으로 이동 #13002
- 쿼리 응답 최적화 #13420
- Java 21용 Spotless 플러그인 재활성화 #12992
- Readme - Pinot UI 개발 설정 방법 #12408
- 레코드 강화자 #12243
- PinotTaskManager 클래스 리팩터링 #12964
- properties 구성 로딩용 CommonsConfigurationUtils 리팩터링 #13201
- compatibility-verifier 모듈 리팩터링 #13359
- upsert의 removeSegment 플로우 리팩터링 #13449
- PeerServerSegmentFinder 개선 #12933
- SegmentFetcherFactory 개선 #12936
- 커스텀 fmpp 플러그인을 fmpp-maven-plugin으로 교체 #12737
- 적응형 서버 선택의 쿼리 제출 지점 재배치 #13327
- ControllerTest에서 컨트롤러 중지 시 컨트롤러 포트 리셋 #13399
- ZNode 생성 REST 엔드포인트 #12497
- 다른 테넌트의 테이블이 있는 multi-stage 쿼리에 공통 브로커가 없을 때 명확한 오류 메시지 반환 #13235
- Multi State Engine 쿼리 예외에서 인증 실패 테이블 이름 반환 #13195
- "record transformer에 record reader config/context param 추가 (#12520)" 되돌림 #12526
- "원격에서 다운로드하는 대신 세그먼트 로컬 사본 사용 (#12863)" 되돌림 #13114
- 아직 다중 하위 계획을 지원하지 않으므로 SubPlanFragmenter 단락 #13306
- BOM 가져오기로 Google 의존성 단순화 #12456
- commons-validator 버전 지정 #12935
- StarTree 인덱스에서 NOT 지원 #12988
- 빈 문자열을 json 노드로 지원 #12555
- 브로커 응답 크기 구성 시 사람이 읽기 쉬운 형식 지원 #12510
- SortOperator에서 LinkedList 대신 ArrayList 사용 #12783
- multi-stage 쿼리 엔진 이전 버전 호환 회귀 테스트 스위트에 두 서버 설정 사용 #13371
- URLEncoder::encode와 URLDecoder::decode의 더 효율적인 변형 사용 #13030
- 문자열 연결 대신 매개변수화 로그 메시지 사용 #13145
- /tasks/scheduler/jobDetails API에 별도 동작 사용 #13054
- LocalPinotFS에서 try-with-resources로 file walk stream 닫기 #13029
- 원격에서 다운로드하는 대신 세그먼트 로컬 사본 사용 #12863
- [Adaptive Server Selector] Stats Manager Queue Size 메트릭 추가 #12340
- [Cleanup] pinot-common의 클래스를 올바른 패키지로 이동 #13478
- [Feature] 쿼리 편집기 SQL 포맷팅 지원 추가 #11725
- [HELM]: 추가 probes 옵션과 startup probe 추가 #13165
- [HELM]: broker, controller, server의 stateful set에 checksum 구성 애노테이션 추가 #13059
- [HELM]: K8s 배포에 namespace 지원 추가 #13380
- [HELM]: zookeeper 차트를 버전 13.2.0으로 업그레이드 #13083
- [Minor] BrokerRequestHandler의 HttpHeaders에 Nullable 애노테이션 추가 #12816
- [Minor] raw 인덱스 생성자 생성자를 더 명확하게 소규모 리팩터링 #13093
- [Multi-stage] RelNode to Operator 처리 정리 #13325
- [null-aggr]
mode집계에 null 처리 지원 추가 #12227 - [partial-upsert] RealtimeSegmentDataManager에서
_partitionGroupConsumerSemaphore의 조기 해제 구성 #13256 - [spark-connector] 잘못된 세그먼트가 있을 때 읽기 실패 옵션 추가 #13080
- Netty arm64 의존성 추가 #12493
- Netty 단위 테스트 추가 #12486
- 여러 세그먼트에 대한 validDocIds 비트맵을 함께 수집하는 SegmentContext 추가 #12694
skipUnavailableServers쿼리 옵션 추가 #13387- Pinot이 TLS 연결을 사용할 때 insecure 모드 추가 #12525
- json 인덱스 getMatchingFlattenedDocsMap() 계측 추가 #13164
- realtimeRowsFiltered에 jmx to promethues 메트릭 내보내기 규칙 추가 #12759
- IdeaState 업데이트 메트릭 추가 #13266
- upsert 테이블 프리로드 메트릭 일부 추가 #12722
- jsonPathString에 테스트 일부 추가 #12954
- RequestUtilsTest에 테스트 케이스 추가 #12557
- JsonAsyncHttpPinotClientTransport 단위 테스트 추가 #12633
- QueryServer 단위 테스트 추가 #12599
- ServerChannels 단위 테스트 추가 #12616
- StringFunctions encodeUrl 단위 테스트 추가 #13391
- pinot-jdbc-client 단위 테스트 추가 #13137
- SegmentCompletionProtocolTest에 url 단언 추가 #13373
- llc 파티션 consuming 메트릭 보고 로직 조정 #12627
- translateTableName에 null http headers 개체 전달 허용 #12764
- SegmentProcessorFramework 사용 시 세그먼트 설정 허용 #13341
- 파일에서 로드된 jvm 기본 sslcontext 자동 갱신 #12462
- VarChunkV4Reader의 getStringMV에서 쓸데없는 중간 byte 배열 할당 회피 #12978
- aws sdk 2.25.3 #12562
- build-helper-maven-plugin 3.5.0 #12548
- ssl context 캐시 및 재사용 #12404
- jetbrain nullable 애노테이션 정리 #13427
- cleanup: maven no transfer progress #12444
- JDBC 연결 닫기 #12494
- 중복 relaxed vars에서 실패하지 않음 (#13214)
- dropwizard metrics 4.2.25 #12600
- v4 raw forward index의 동적 chunk 크기 조정 #12945
- Netty 누출 감지 활성화 #12483
- pinot linter 스크립트에서 병렬 Maven 활성화 #12751
- 역 And/OrFilterOperator 구현이 쿼리와 일치하도록 보장 #13199
- source assembly에서 .mvn 디렉터리 제외 #12558
- CompactedPinotSegmentRecordReader가 deleteRecord를 건너뛸 수 있도록 확장 #13352
- executor 태스크 밖에서 startTime을 가져와 flaky 시간 확인 방지 #13250
- catchup 체커가 빠지지 않도록 부재 세그먼트 처리 #12883
MutableOffHeapByteArrayStore버퍼 시작 크기의 오버플로 처리 #13215- 파티션 mgr가 추적하지 않는 세그먼트 처리 및 skipUpsertView 쿼리 옵션 추가 #13415
- 놓친 api 리소스의 테이블 이름 변환 처리 #12792
- hash4j 버전 업그레이드 0.17.0 #12968
- 로그 출력에 근본 예외 포함 #13248
- 네이티브 parquet 리더와 int96 패리티 #12496
- 기본값 배열 지원 jsonExtractIndex #12748
- 삭제된 브로커 로그의 log rate limiter rate 로그 #13041
- http listener ssl 구성 교체 가능 #12455
- 0.9.11과 호환되는 reflection 호출 #12958
- maven: no transfer progress #12528
- temp 디렉터리 삭제 누락 #12637
- shouldReplaceOnComparisonTie를 base 클래스로 이동해 더 재사용 가능하게 #13353
- TimerContext에서 Java enum .values() 사용 줄이기 #12579
- SpecialValueTransformer 로깅 줄이기 #12970
- Pinot jdbc에서 regex 패턴 컴파일 줄이기 #13138
- TlsUtils 클래스 리팩터링 #12515
- 더 나은 데이터 일관성을 위해 upsert 테이블의 addSegment/replaceSegment 중 registerSegment 시점 정제 #12709
- AdminConsoleIntegrationTest.java 재포맷 #12552
- ClusterTest.java 재포맷 #12531
- 세그먼트 mgr 더 확실하게 해제 #13216
- getServer를 getServers로 교체 #12545
- noops 같은 조기 반환에 대해 리밸런스 작업 상태 보고 #13281
- aggregationConfigs와 함께 noDictionaryColumns 요구 #12464
- 같은 테이블 구성 개체 공유 #12463
- 모든 비교를 잃어도 스냅샷용 세그먼트 추적 #13388
- TTL 밖 세그먼트 추적 해제 #12449
- ControllerJobType을 enum에서 string으로 업데이트 #12518
- expr min max가 "parent"로 시작하는 컬럼과 충돌하지 않도록 RewriterConstants 업데이트 #13357
- 접근 제어 확인 오류 처리 업데이트 — throwable 포착 및 오류 로그 #13209
버그 수정 (Bug Fixes)
- 버그가 있는 between() 대신 gte(lte) 사용 #12595
- And/Or DocIdSet의 ConcurrentModificationException 수정 #12611
- RangeBitmap.between() 수정을 위해 RoaringBitmap을 1.0.5로 업그레이드 #12604
- bugfix: LZ4 length prefixed decompress에서 src ByteBuffer 위치 이동 안 함 #12539
- Bug Fix: createDictionaryForColumn이 inverted index를 고려하지 않음 #13048
- Cluster Manager 오류 수정 #12632
- quick start Cluster Manager 문제 수정 #12610
- 실시간 consumer의 client ID 접미사 구성 추가 #13168
- pull request 12389의 코멘트 반영 및 테스트 수정. /uptime과 /start-time 엔드포인트가 모든 컴포넌트에서 동작 #12512
- Bigfix: 누락된 paramName 추가 #13060
- Bug fix: scheme 속성 무시 안 함 #12332
- Bug fix: Kafka의 누락된 shade 구성 덮어쓰기 처리 #13437
- BugFix: 한 개 이상 서버의 병합 결과 수정 #12778
- Bugfix: downtime true로 테넌트 리밸런스 허용 #13246
- Bugfix: 번역 유틸에 null 테이블 이름 입력 전달 방지 #12726
- Bugfix: scheduleTask()에서 scheduleTaskForDatabase()로의 잘못된 메서드 호출 수정 #12791
- Bugfix: 함수 평가 중 리터럴 데이터 타입 유지 #12607
- Cleanup: 오류 메시지 문법 수정 및 가독성 개선 #13451
- Upsert의 Equals 비교 컬럼 값 처리 버그 수정 #12395
- ColumnMinMaxValueGenerator 수정 #12502
- JavaEE 관련 의존성 수정 #13058
- CPU 기반 쿼리 중단의 로깅 위치 수정 #13318
- 버퍼를 공유하지 않도록 PulsarUtils 수정 #12671
- override 플래그가 true일 때 AddSchema 명령줄 도구가 동작하도록 URI 구성 수정 #13320
- [Type]ArrayList elements() 메서드 사용 수정 #13354
- 쿼리 신선도 계산 시 오타 수정 #12947
- PinotDataBuffer.readFrom의 오버플로 수정 #13152
- UpsertCompaction 태스크 로깅 버그 수정 #12419
- 모든 서버의 validDocIDsMetadata를 반환하는 버그 수정 #12431
- JDBC와 Hikari 사용 시 연결 문제 수정 (#12267) #12411
- admin 명령의 controller host/port/protocol CLI 옵션 설명 수정 #13237
- 테이블 생성 시 환경 변수가 적용되지 않는 문제 수정 #12560
- 테넌트 생성 시 태그 없는 브로커 부족 오류 메시지 수정 #13234
- database 접두사 처리로 영향을 받은 몇몇 메트릭 규칙 수정 #13290
- Pinot Driver의 파일 핸들 누출 수정 (apache#12263) #12356
- ControllerPeriodicTasksIntegrationTest의 flakiness 수정 #13337
- 이름에 '\_'가 있는 컬럼의 startree 인덱스 메타데이터 로딩 문제 수정 #12554
- 메트릭 규칙 패턴 regex 수정 #12856
- pinot-parquet NoClassFound 문제 수정 #12615
- OfflineClusterIntegrationTest의 세그먼트 크기 확인 수정 #13389
- 테스트의 일부 리소스 누출 수정 #12794
- IS 업데이트 메트릭의 NPE 수정 #13313
- delete 컬럼 없이 metadataTTL 활성화 시 NPE 수정 #13262
- swagger의 ServletConfig 로딩 문제 수정 #13122
- map flatten이 레코드에서 map 필드를 제거하지 않아야 하는 문제 수정 #13243
- H3InclusionIndexFilterOperator의 경쟁 조건 수정 #12487
- TIMESTAMP 데이터 타입의 시간 세그먼트 프루너 수정 #12789
- SegmentIndexCreationDriverImpl의 시간 통계 수정 #13429
- avro union 스키마에서 논리 타입 이름 추론 수정 #13224
- #12677과 #12678 해결을 위해 인스턴스 타입 수정
- Helm: 차트 렌더링 문제 버그 수정 #13264
- kafka common 패키지를 pinot shaded 패키지 접두사로 보완 시도 #13056
- getValidDocIdsMetadataFromServer를 배치로 서버에 호출하도록 업데이트 및 기타 버그 수정 #13314
- CVE 수정을 위해 com.microsoft.azure:msal4j를 1.3.5에서 1.3.10으로 업그레이드 #12580
- [bugfix] kafka client id 접미사의 null 값 처리 #13279
- bugfix: jdbc 클라이언트 sql 기능 미지원 예외 수정 #12480
- bugfix:
not text_match지원 다시 추가 #12372 - bugfix: QueryLogger의 enum 배열 할당 줄이기 #12478
- bugfix: lucene 실시간 세그먼트 변환 시 consumerDir 사용 #13094
- cleanup: apache rat 위반 수정 #12476
- GuavaRateLimiter acquire 메서드 수정 #12500
- 디코더에 없는 fieldsToRead 클래스 수정 #13186
- flakey 테스트 수정, 조기 finalization 방지 #13095
- 부분 upsert에서 null multi value 병합 수정 #13031
ScalingThreadPoolExecutor의 경쟁 조건 수정 #13360- 공유 버퍼, 테스트 수정 #12587
- fix(build): node 버전 16으로 업데이트 #12924
- kerby/jline과 wildfly 라이브러리를 해결해 CVE critical 이슈 수정 #12566
- pinot-adls high severity CVE 수정 #12571
- localhost를 호스트 이름으로 사용하는 swagger 설정 수정 #13254
- swagger-ui 5.15.0 업그레이드 #12908 수정
- CVE 수정을 위해 jettison 버전 업그레이드 #12567