0.12.0

0.12.0

Apache Pinot 0.12.0 릴리스 노트 문서예요. 이 릴리스는 Multi-Stage 쿼리 엔진에 새 조인 의미론과 새 SQL 의미 지원을 추가하고, 다양한 주요 업데이트와 버그 수정을 포함해요.

출처: 문서

본문

Multi-Stage 쿼리 엔진

새 조인 의미론 지원 (New join semantics support)

새 SQL 의미 지원 (New sql semantics support):

성능 개선 (Performance enhancement)

  • 스레드 안전 쿼리 계획 (#9344)
  • 부분 쿼리 실행 및 라운드 로빈 스케줄링 (#9753)
  • data table serde 개선 (#9731)

주요 업데이트 (Major updates)

  • @sajjad-moradi가 consuming 세그먼트 강제 커밋 #9197
  • @jadami10이 신선도 기반 consumption 상태 체커 추가 #9244
  • @gviedma가 진행 중인 controller 세그먼트 다운로드·업로드 요청 추적 메트릭 추가 #9258
  • @xiangfu0가 각 컴포넌트의 로컬 로그 파일 다운로드 엔드포인트 추가 #9259
  • [Feature] @61yao가 수집 작업에서 입력 파일 재귀 검색 옵션 추가. 기본값은 이전 버전과 호환되도록 true #9265
  • @klsince가 브로커의 기능을 기반으로 한 controller의 쿼리 취소 API 추가 #9276
  • @KKcorps가 Spark Job Launcher 도구 추가 #9288
  • @yuanbenson이 Standalone 세그먼트 push 작업 러너의 일관된 데이터 push 활성화 #9295
  • @Jackie-Jiang이 서버가 최종 집계 결과를 직접 반환하도록 허용 #9304
  • @klsince이 세그먼트를 multi-datadir에 유지하는 TierBasedSegmentDirectoryLoader #9306
  • @vvivekiyer의 적응형 서버 선택 (Adaptive Server Selection) #9311
  • [Feature] @61yao가 IsDistinctFrom과 IsNotDistinctFrom 지원 #9312
  • @KKcorps가 잘못된 데이터 타입의 오류 레코드 수집 허용 #9320
  • @saurabhd336이 하이브리드 테이블 쿼리의 커스텀 시간 경계 설정 허용 #9356
  • @klsince이 최대 허용 지연으로 늦은 cron 작업 건너뛰기 #9372
  • @Jackie-Jiang이 BOOLEAN과 TIMESTAMP의 암시적 cast 허용 안 함 #9385
  • @KKcorps이 CSV 플러그인에 누락된 속성 추가 #9399
  • @klsince이 MDC를 설정해 minion 태스크 로그를 별도 파일로 깔끔하게 라우팅 #9400
  • @KKcorps이 메타데이터에서 세그먼트 날짜 시간을 고치는 새 API 추가 #9413
  • @61yao이 문자열의 raw 바이트를 반환하도록 get bytes 업데이트 및 getBytesMV 지원 #9441
  • @navina이 /consumingSegmentsInfo에서 consumer의 레코드 지연 노출 #9515
  • @KKcorps이 높은 카디널리티 컬럼에 사전 생성 안 함 #9527
  • @klsince이 Helix에서 추적되는 태스크 런타임 구성 가져오기 #9540
  • @Jackie-Jiang이 json 인덱스에 더 많은 옵션 추가 #9543
  • @klsince이 SegmentTierAssigner 추가 및 세그먼트 tier 정보를 가져오는 restful API 개선 #9598
  • @saurabhd336이 세그먼트 수준 디버그 API 추가 #9609
  • @navina이 Kafka 커넥터에 레코드 가용성 지연 추가 #9621
  • @klsince이 SegmentReloadMessage로 세그먼트를 새 tier로 이동해야 하는 서버에 알림 #9624
  • @klsince이 인스턴스 구성으로 multi-datadirs 구성 허용 및 이에 대한 Quickstart 예제 #9705
  • @jasperjiaguo이 Lucene 인덱스의 stopword 커스터마이즈 #9708
  • @KKcorps이 메모리 최적화 차원 테이블 추가 #9802
  • @xiangfu0의 ADLS 파일시스템 업그레이드 #9855
  • @bagipriyank이 Delete Schema/Table pinot admin 명령 추가 #9857
  • @xiangfu0이 새로운 ADLSPinotFS auth 타입 DEFAULT 추가 #9860
  • @KKcorps이 Kinesis 요청에 rate limit 추가 #9863
  • @xiangfu0이 zk 클라이언트 타임아웃 구성 추가 #9975

기타 기능/변경 (Other features/changes)

  • @satishwaghela이 가장 최근 스케줄링 오류 표시 #9161
  • @Jackie-Jiang이 IntermediateResultsBlock의 distinct 쿼리에 집계 결과 사용 안 함 #9262
  • @sajjad-moradi이 실시간 테이블에서 실제 소비율 대 rate limit 비율 메트릭 발행 #9201
  • @walterddr이 offlineTableCount 메트릭 항목 추가 #9270
  • @klsince이 쿼리 취소 응답 메시지 개선 #9242
  • @apucher이 비표준 엔드포인트에 @ManualAuthorization 애노테이션 추가 #9252
  • @Jackie-Jiang이 output stream 사용을 피하도록 ser/de 최적화 #9278
  • @SabrinaZhaozyf이 Covariance 함수 지원 추가 #9236
  • @somandal이 selection order-by 전용 쿼리의 order-by 표현식 목록에 MV 컬럼이 있을 때 예외 던짐 #9078
  • @jasperjiaguo이 실행 중 서버 쿼리 취소와 타임아웃 확인 개선 #9286
  • @sajjad-moradi이 실시간 테이블을 비활성화하지 않고 다른 스트림에서 수집하는 기능 추가 #9289
  • @npawar이 불필요한 needPreprocess를 피하기 위한 minMaxInvalid 플래그 추가 #9238
  • @walterddr이 array cardinality 함수 추가 #9300
  • @klsince이 세그먼트를 multi-datadir에 유지하는 TierBasedSegmentDirectoryLoader #9306
  • @KKcorps이 CSV record reader의 커스텀 null 값 지원 추가 #9318
  • @saurabhd336이 파일 메타데이터 기반 parquet reader 타입 추론 #9294
  • @SabrinaZhaozyf이 MV 컬럼의 Cast 함수 지원 추가 #9296
  • @KKcorps이 잘못된 데이터 타입의 오류 레코드 수집 허용 #9320
  • [Feature] @61yao의 NOT 연산자 변환 #9330
  • @KKcorps이 CSV 디코더에서 null 문자열 처리 #9340
  • [Feature] @61yao의 NOT 스칼라 함수 #9338
  • @tanmesh이 EXTRACT 문법 지원 추가 및 적절한 Pinot 표현식으로 변환 #9184
  • @KKcorps이 java 쿼리 클라이언트의 controller 요청 Auth 지원 추가 #9230
  • @zhtaoxiang이 테이블 삭제 시 관련 minion 태스크 메타데이터 모두 삭제 #9339
  • @yuanbenson은 BloomFilterRule이 지원되는 컬럼 타입에만 추천하도록 #9364
  • @xiangfu0이 ParquetNativeRecordReader에서 모든 타입 지원 #9352
  • @zhtaoxiang이 메타데이터 push의 세그먼트 이름 확인 개선 #9359
  • @xiangfu0이 오류에도 표현식 변환기가 계속하도록 허용 #9376
  • @klsince이 최대 허용 지연으로 늦은 cron 작업 건너뛰기 #9372
  • @jasperjiaguo이 and 필터 프레디킷 평가 효율 향상 #9336
  • @ankitsultana이 Broker/Minion 특정 구성의 instanceId Config 폐기 #9308
  • @Jackie-Jiang이 스레드를 완전히 활용하도록 combine 연산자 최적화 #9387
  • @jasperjiaguo이 계획 생성 후 타임아웃이면 쿼리 종료 #9386
  • [Feature] @61yao이 IsDistinctFrom과 IsNotDistinctFrom 지원 #9312
  • [Feature] @61yao이 컬럼 이름의 Coalesce 지원 #9327
  • @KKcorps이 kinesis의 interrupted 예외 로깅 비활성화 #9405
  • @jasperjiaguo이 thread cpu 시간 벤치마크 #9408
  • @KKcorps이 SIMPLE_DATE_FORMAT의 기본값으로 ISODateTimeFormat 사용 #9378
  • @Jackie-Jiang이 upsert 메타데이터 매니저의 공통 로직 추출 #9435
  • @saurabhd336이 minion 태스크 메타데이터 매니저 메서드를 더 일반적으로 변경 #9436
  • @navina이 kafka의 consumer 속성에 항상 clientId 전달 #9444
  • @vvivekiyer의 적응형 서버 선택 #9311
  • @klsince이 reentrant하도록 IndexHandler 메서드 개선 #9440
  • @klsince이 worker에서 더 세밀한 태스크 진행 상태 추적에 MinionEventObserver 사용 #9432
  • @KKcorps이 입력 파일 경로에 공백 허용 #9426
  • @KKcorps이 변환 중 오류를 우아하게 처리하는 지원 추가 #9377
  • @ankitsultana이 SegmentMissingError를 피하기 위해 서버에서 삭제된 세그먼트 이름 캐시 #9423
  • @KKcorps이 잘못된 timestamp 처리 #9355
  • @klsince이 태스크의 더 세밀한 진행 추적을 위한 minion worker 이벤트 관찰자 개선 #9449
  • @itschrispeck의 spark-connector가 v2/brokers 엔드포인트를 사용하도록 #9451
  • @xiangfu0이 pinot-core와 pinot-segment-local 의존성을 제거하기 위해 presto-pinot-driver에서 netty 서버 쿼리 지원 제거 #9455
  • @vvivekiyer의 적응형 서버 선택: 검토 중인 코멘트 반영 #9462
  • @klsince이 세그먼트 프로세서 프레임워크 내에서 진행 추적 #9457
  • @Jackie-Jiang이 DataTable에서 ser/de를 분리 #9468
  • @klsince이 파일 나열 시 mtime, length 같은 파일 정보를 공짜로 수집 #9466
  • @navina이 Stream 소스에서 레코드 키, 헤더, 메타데이터 추출 #9224
  • [pinot-spark-connector] @cbalci이 spark 커넥터 최대 인바운드 메시지 크기 상향 #9475
  • @klsince이 minion 태스크 진행 api 개선 #9482
  • @agavra이 AT TIME ZONE 파싱 추가 #9477
  • @elonazoulay이 gapfill 쿼리로 인한 메트릭 폭발 제거 #9490
  • @vvivekiyer이 ForwardIndexHandler: segmentReload 중 compressionType 변경 #9454
  • @GSharayu이 Segment AssignmentStrategy 인터페이스 도입 #9309
  • @jasperjiaguo이 브로커 groupby 감축에 쿼리 중단 플래그 확인 추가 #9499
  • @walterddr이 선택적 클라이언트 페이로드 추가 #9465
  • [feature] @61yao의 distinct from 스칼라 함수 #9486
  • @Jackie-Jiang이 null 처리를 위해 서버에서만 데이터 테이블 버전 확인 #9508
  • @KKcorps이 세그먼트 읽기 예외에 docId와 컬럼 이름 추가 #9512
  • @jasperjiaguo이 AndDocIdSet 평가에서 스캔 기반 연산자를 카디널리티로 정렬 #9420
  • @Jackie-Jiang이 codecov 업로드 실패 시 CI 실패로 처리하지 않음 #9522
  • [Upsert] @deemoliu이 Pinot upsert 최적화를 위해 validDocsIndex 스냅샷 유지 #9062
  • @dongxiaoman의 broker 필터 #9391
  • [feature] @61yao의 coalesce scalar #9487
  • @saurabhd336이 하이브리드 테이블 쿼리의 커스텀 시간 경계 설정 허용 #9356
  • [GHA] @walterddr이 cache timeout 추가 #9524
  • @Jackie-Jiang이 PinotHelixResourceManager.hasTable() 최적화 #9526
  • @Jackie-Jiang이 upsert 메타데이터 매니저를 만들 수 없을 때 예외 포함 #9532
  • @klsince이 태스크 만료 시간 구성 허용 #9530
  • @klsince이 디버그 API로 태스크 완료 시간 노출 #9534
  • @Jackie-Jiang이 KafkaPartitionLevelConsumer의 잘못된 경고 로그 제거 #9536
  • @klsince이 조건부로 minion worker의 http 서버 시작 #9542
  • @vvivekiyer이 StreamMessage를 일반화하고 버그 수정 #9544
  • @KKcorps이 기본 키 직렬화 성능 개선 #9538
  • [Upsert] @Jackie-Jiang이 서버 종료 시 upsert 메타데이터 제거 건너뛰기 #9551
  • @walterddr이 array element at 함수 추가 #9554
  • @nizarhejazi이 enableNullHandling이 true이고 비어 있는 null 비트맵이 있는 컬럼으로 집계 함수를 사용할 때 처리 #9566
  • @somandal이 forward index 없는 세그먼트 저장 형식 지원 #9333
  • @timsants이 구성에 명시적으로 설정되지 않았을 때 SegmentNameGenerator 타입 추론 추가 #9550
  • @agavra이 JMX 메트릭과 컴포넌트 로그에 버전 정보 추가 #9578
  • @agavra이 사용하지 않는 RecordTransform/RecordFilter 클래스 제거 #9607
  • @vvivekiyer이 기존 raw MV 컬럼의 압축 타입 변경 시 forward index 재작성 지원 #9510
  • @sajjad-moradi이 Avro의 Fixed 데이터 타입 지원 #9642
  • [feature] [kubernetes] @jameskelleher이 controller와 broker의 service-external.yaml에 loadBalancerSourceRanges 추가 #9494
  • @Jackie-Jiang이 쿼리 예외에서 인쇄할 사용 불가능한 세그먼트를 최대 10개로 제한 #9617
  • @agavra이 더 많은 사용하지 않는 필터 코드 제거 #9620
  • @Jackie-Jiang이 세그먼트에서 record reader 캐시 하지 않음 #9604
  • @rino-kadijk이 user agent 헤더의 첫 부분을 구성 가능하게 변경 #9471
  • @gortiz이 order by sorted ASC, unsorted와 order by DESC 케이스 최적화 #8979
  • @Jackie-Jiang이 비문자열 값을 제대로 처리하도록 클러스터 구성 업데이트 API 강화 #9635
  • @yuanbenson이 recommender REST API를 PUT으로 되돌림 (PR #9326 되돌림) #9638
  • @Jackie-Jiang이 서버 구성에서 잘못된 pruner 이름 제거 #9646
  • @navina이 picocli 명령에서 폐기된 help 대신 usageHelp 사용 #9608
  • @Jackie-Jiang이 서버에서 고유 쿼리 id 처리 #9648
  • @walterddr이 stateless group marker 누락 수정 #9673
  • @Jackie-Jiang이 강제 커밋을 사용한 consuming 세그먼트 리로드 지원 #9640
  • @Jackie-Jiang이 프레디킷이 모든 비-star 노드와 일치할 때 star-node를 사용하도록 star-tree 개선 #9667
  • @klsince이 프리페치할 컬럼 인덱스를 결정하는 FetchPlanner 인터페이스 추가 #9668
  • @Jackie-Jiang이 ArrayDeque를 사용한 star-tree 순회 개선 #9688
  • @Jackie-Jiang이 combine 연산자의 오류 처리 #9689
  • @SabrinaZhaozyf이 이전 버전이 master에 없으면 다른 오류 코드 반환 #9686
  • @vvivekiyer이 기존 컬럼에 대해 런타임에 사전 생성 지원 #9678
  • @klsince이 indexDir 존재 확인 대신 mutable 세그먼트를 명시적으로 확인 #9718
  • @npawar이 segmentTar 다운로드 전에 남은 파일 제거 #9719
  • @walterddr이 세그먼트 메타데이터에 인덱스 키와 크기 맵 추가 #9712
  • @Jackie-Jiang이 세그먼트 존재의 진실 공급원으로 ideal state 사용 #9735
  • @KKcorps이 Minion 태스크로 종료 시 파일시스템 닫기 #9681
  • @jadami10이 테이블 크기가 로딩되는 동안에도 테이블 목록 렌더링 #9741
  • @SabrinaZhaozyf이 IP Address 함수 지원 추가 #9501
  • @agavra이 브로커에서 오류 메시지 버블링 #9754
  • @somandal이 기존 컬럼의 forward index 비활성화 지원 추가 #9740
  • @walterddr이 aggregate index size 형태로 테이블 메타데이터 정보 표시 #9733
  • @klsince이 RT 테이블의 불변 세그먼트를 로드할 때 조건부 전처리 #9772
  • @agavra이 QueryConfig의 기본 타임아웃 nano 변경 되돌림 #9790
  • @vvivekiyer의 적응형 서버 선택: 응답하지 않은 서버의 통계 업데이트 #9801
  • @KKcorps이 기본 컬럼의 null 값 인덱스 추가 #9777
  • [MergeRollupTask] @zhtaoxiang이 세그먼트 이름에 파티션 정보 포함 #9815
  • @navina이 컨트롤러의 주기적 태스크로 consumer 지연 메트릭 추가 #9800
  • @priyen이 Hyperloglog 개체를 더 최적으로 역직렬화 #9749
  • @wirybeaver이 피어에서 오프라인 세그먼트 다운로드 #9710
  • @jasperjiaguo이 서버의 스레드 수준 사용량 회계와 쿼리 중단 #9727
  • @deemoliu이 부분 upsert용 max merger와 min mergers 추가 #9665
  • #9518 @bagipriyank이 보안 버전 pinot 0.11.0으로 pinot helm 0.2.6 추가 #9519
  • @snleee이 replication 구성의 읽기 접근 결합 #9849
  • @jhisse이 helm 차트에 v1 ingress 추가 #9862
  • @vvivekiyer이 replicaGroup 기반 라우팅을 위한 AdaptiveServerSelection 최적화 #9803
  • @Jackie-Jiang이 InstancePartitions에서 인스턴스 정렬 안 함 #9866
  • @navina이 기본 병합 전략으로 기존 레코드의 새 컬럼 병합 #9851
  • @vvivekiyer이 기존 컬럼의 런타임 사전 비활성화 지원 #9868
  • @agavra이 BOOL_AND와 BOOL_OR 집계 함수 지원 #9848
  • @navina이 사용하지 않는 subscriptions 삭제에 Pulsar AdminClient 사용 #9859
  • @jadami10이 테이블 크기의 테이블 정렬 함수 추가 #9844
  • @Jackie-Jiang이 Kafka consumer에서 필요할 때만 offset 탐색 #9896
  • @klsince이 지정된 테이블 이름의 브로커가 없을 때 폴백 #9914
  • @Jackie-Jiang이 서버 종료 중 liveness 확인 허용 #9915
  • @KKcorps이 MergeRollup Minion 태스크에서 Metadata를 통한 세그먼트 업로드 허용 #9825
  • @Jackie-Jiang이 IS 변경 누락에 대한 Helix 우회책 복원 #9921
  • @KKcorps이 CLI로 실시간 세그먼트 업로드 허용 #9861
  • @KKcorps이 CLI로 테이블 구성 업데이트·삭제 기능 추가 #9852
  • @klsince이 push 모드가 설정되지 않으면 기본적으로 TAR #9935
  • @klsince이 세그먼트 리더 인터페이스로 startree 인덱스 로드 #9828
  • @saurabhd336이 MV 변환 함수에 컬렉션 허용 #9908
  • @vvivekiyer이 완료된 실시간 세그먼트 로드 시 새 IndexLoadingConfig 구성 #9938
  • @timsants이 스키마가 raw 테이블 이름과 일치하지 않을 때 GET /tableConfigs를 이전 버전 호환되게 변경 #9922
  • feat: @etolbakov이 ORCRecordReader에 압축 파일 지원 추가 #9884
  • @snleee이 Variance와 Standard Deviation 집계 함수 추가 #9910
  • @zhtaoxiang이 실시간 테이블에서 MergeRollupTask 활성화 #9890
  • @vvivekiyer이 raw 컬럼을 dict 기반으로 변환할 때 cardinality 업데이트 #9875
  • @timsants이 UploadSegmentCommand에 auth 토큰 재추가 #9960
  • @snleee이 avro record reader의 gz 지원 개선 #9951
  • @somandal이 noForwardIndex의 기본 컬럼 처리 및 리로드 경로에서 forward index 재생성 #9810
  • [Feature] @61yao이 coalesce literal 지원 #9958
  • @npawar이 클라이언트를 직접 전달할 때 serverSideEncryption 속성으로 S3PinotFs 초기화 기능 #9988
  • @klsince이 태스크 진행 상태를 가져올 때 보류 중인 minion 태스크를 제대로 처리 #9911
  • @zhtaoxiang이 메트릭 레지스트리에 저장된 gauge 업데이트 허용 #9961
  • @agavra이 SET 문법에서 대소문자 구분 없는 쿼리 옵션 지원 #9912
  • @jadami10이 versions-maven-plugin을 2.13.0으로 고정 #9993
  • @navina이 Pulsar Connection handler가 consumer/reader를 띄우지 않도록 #9893
  • @Jackie-Jiang이 인덱스 확인을 위한 인메모리 세그먼트 메타데이터 처리 #10017
  • @snleee이 S3 PinotFS의 IAM 역할을 사용한 크로스 계정 접근 지원 #10009
  • @zhtaoxiang이 minion 태스크 메타데이터 마지막 업데이트 시간을 메트릭으로 보고 #9954
  • @agavra이 SKEWNESS와 KURTOSIS 집계 지원 #10021
  • @zhtaoxiang이 minion 태스크 생성 시간과 오류 메트릭 발행 #10026
  • @Jackie-Jiang이 모든 레플리카에 같은 기본 시간 값 사용 #10029
  • @saurabhd336이 리밸런싱 시 수렴 대기 세그먼트 수 줄임 #10028

UI 업데이트 및 개선 (UI Update & Improvement)

  • 클러스터 구성에 기반해 쿼리 콘솔 탭 숨기기 허용 (#9261)
  • 구성으로 pinot broker swagger UI 숨기기 허용 (#9343)
  • 세밀한 minion 태스크 진행을 보여주는 UI 추가 (#9488)
  • 세그먼트 리로드 진행을 추적하는 UI 추가 (#9521)
  • UI에서 minion 태스크 런타임 구성 상세 표시 (#9652)
  • 세그먼트 상태 재정의 (#9699)
  • 스키마 편집 중 세그먼트 리로드 옵션 표시 (#9762)
  • 스키마 UI를 비동기로 로드 (#9781)
  • 알 수 없는 앱 경로로 리다이렉트할 때 빈 화면 수정 (#9888)

라이브러리 버전 업그레이드 (Library version upgrade)

  • glibc 요구 사항을 낮추기 위해 h3 lib를 3.7.2에서 4.0.0으로 업그레이드 (#9335)
  • ZK 버전을 3.6.3으로 업그레이드 (#9612)
  • snakeyaml을 1.30에서 1.33으로 업그레이드 (#9464)
  • RoaringBitmap을 0.9.28에서 0.9.35로 업그레이드 (#9730)
  • spotless-maven-plugin을 2.9.0에서 2.28.0으로 업그레이드 (#9877)
  • decode-uri-component를 0.2.0에서 0.2.2로 업그레이드 (#9941)

버그 수정 (BugFixes)

더 알아보기 (Learn more)