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.
  • valueIn MV 변환 함수 지원 추가 #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 리소스 격리 #12459 #12786

  • 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으로 설정할 수 있는 새 UpsertConfig consistencyMode 추가.
  • 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 처리 옵션을 늘리는 isJson UDF 추가. 쿼리와 수집 시 잘못된 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, uniqueNgrams UDF. #12392.
  • 잘못된 JSON 처리 옵션을 늘리는 isJson UDF 추가. 쿼리와 수집 시 잘못된 json 컬럼 값 필터링에 사용 가능. #12603.
  • splitPart UDF 사소한 개선. #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
  • database http 헤더로 데이터베이스 컨텍스트 전달 허용 #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

더 알아보기 (Learn more)