0.10.0

0.10.0

Apache Pinot 0.10.0 릴리스 노트 문서예요. 이 릴리스는 몇 가지 훌륭한 새 기능, 성능 개선, UI 개선, 버그 수정을 도입했어요.

출처: 문서

본문

요약 (Summary)

이 릴리스는 몇 가지 훌륭한 새 기능, 성능 개선, UI 개선, 버그 수정을 도입하며, 다음 섹션에서 자세히 설명해요. 릴리스는 이 커밋 fd9c58a에서 생성되었어요.

의존성 그래프 (Dependency Graph)

릴리스 0.3.0에서 도입된 플러그 앤 플레이 아키텍처의 의존성 그래프가 확장되어 이제 Pinot Segment SPI용 새 노드를 포함해요.

pinot-segment-api 도입 후 의존성 그래프

SQL 개선 (SQL Improvements)

  • NOT 연산자 구현 (#8148)
  • 카디널리티에 따라 Set 또는 HyperLogLog에 distinct 값을 자동 저장하는 DistinctCountSmartHLLAggregationFunction 추가 (#8189)
  • LEAST와 GREATEST 함수 추가 (#8100)
  • 추가 컬럼이 있는 SELECT * 처리 (#7959)
  • 집계용 FILTER 절 추가 (#7916)
  • ST_Within 함수 추가 (#7990)
  • 쿼리에서 세미콜론 처리 (#7861)
  • EXPLAIN PLAN 추가 (#7568)

UI 개선 (UI Enhancements)

  • UI에서 Reported Size와 Estimated Size를 사람이 읽기 쉬운 형식으로 표시 (#8199)
  • 쿼리 콘솔 상태를 URL 기반으로 변경 (#8194)
  • 여러 컬럼이 같은 이름을 가질 때 쿼리 결과를 표시하지 않도록 쿼리 콘솔 개선 (#8131)
  • 올바른 수의 서버와 브로커를 보여주도록 Pinot 대시보드 테넌트 뷰 개선 (#8115)
  • Pinot 대시보드에서 새 탭 여는 문제 수정 (#8021)
  • 문법 오류 시 쿼리 콘솔이 빈 화면이 되는 문제 수정 (#8006)
  • 오류가 있어도 쿼리 통계가 항상 표시되도록 변경 (#7981)
  • UI에 OIDC auth 워크플로 구현 (#7121)
  • 테이블 상태에 tooltip과 modal 추가 (#7899)
  • 커스텀 code mirror에서 줄 바꿈 옵션 추가 (#7857)
  • cmd + /로 쿼리 주석 처리 기능 추가 (#7841)
  • 빈 브로커 응답에서 사용 불가능한 세그먼트 시 예외 반환 (#7823)
  • externalview에서 세그먼트가 누락된 경우를 제대로 처리 (#7803)
  • datetime 컬럼 Type에 TIMESTAMP 추가 (#7746)

성능 개선 (Performance Improvements)

  • 사전 기반 LIKE 쿼리에서 regex 매처 재사용 (#8261)
  • 컬럼이 이미 정렬된 경우 orderby 조기 종료 (#8228)
  • Query Automaton Minimization의 추가 패스 수행 안 함 (#8237)
  • RoaringBitmap 업그레이드로 RangeBitmap 개선 (#8206)
  • 리터럴을 사용할 수 있을 때 geometry serializer 사용 최적화 (#8167)
  • 비사전 group by 성능 개선 (#8195)
  • 할당 없는 DataBlockCache 조회 (#8140)
  • CaseTransformFunction에서 선택되지 않은 THEN 문 가지치기 (#8138)
  • 집계 지연 double 변환 (#8139)
  • ExpressionContext 또는 FunctionContext의 개체 할당률 감소 (#8124)
  • 락 없는 DimensionDataTableManager (#8102)
  • JsonPath 업그레이드로 수집 중 json path 성능 개선 (#7819)
  • 할당 감소 및 StringUtil.sanitizeString 속도 향상 (#8013)
  • 더 빠른 메트릭 스캔 - ForwardIndexReader (#7920)
  • 벡터화 가능하도록 group by 3가지 방식 풀기 (#7949)
  • 2의 거듭제곱 고정 크기 chunk (#7934)
  • 엄청 큰 chunk를 제외하고 압축에 mmap 사용 안 함 (#7931)
  • group-by 마킹 루프 조기 종료 (#7935)
  • base chunk forward index 쓰기 성능 개선 (#7930)
  • 세그먼트당 컴파일을 막기 위해 JsonPaths 캐시 (#7826)
  • 기본 압축 모드로 LZ4 사용 (#7797)
  • 1차원 groupby 특수 케이스 분리 (#7777)
  • 범위 쿼리 성능을 위한 roaringbitmap 버전 상향 (#7734)

기타 주요 기능 (Other Notable Features)

  • NoopPinotMetricFactory와 그에 맞는 변경 추가 (#8270)
  • SegmentProcessorFramework에 고정 세그먼트 이름 지정 허용 (#8269)
  • 모든 prestodb 의존성을 별도 모듈로 이동 (#8266)
  • Projection과 Transform 블록에 docIds 포함 (#8262)
  • 브로커 변경 시 브로커 리소스 자동 업데이트 (#8249)
  • 함수 별칭을 지원하도록 ScalarFunction 애노테이션을 name에서 names로 업데이트 (#8252)
  • BoundedColumnValue 파티션 함수 구현 (#8224)
  • pinotFS에 copy recursive API 추가 (#8200)
  • 테이블의 라이브 브로커 취득 지원(타입 접미사 없이) (#8188)
  • Pinot docker 이미지 - prometheus 규칙 캐시 (#8241)
  • BrokerRequestToQueryContextConverter에서 사용되지 않는 filterExpressionContext 제거 (#8238)
  • 세그먼트 삭제 REST API에 보존 기간 추가 (#8122)
  • Pinot docker 이미지 - prometheus 업그레이드 및 scope 규칙을 컴포넌트로 확장 (#8227)
  • SegmentProcessorFramework에 세그먼트 이름 접미사 허용 (#8230)
  • Superset docker 이미지 - superset 이미지의 pinotdb 버전 업데이트 (#8231)
  • 삭제된 세그먼트 파일에 보존 기간 추가 및 테이블 수준 오버라이드 허용 (#8176)
  • pinot과 superset에서 incubator 제거 (#8223)
  • groovy 비활성화용 테이블 구성 오버라이드 추가 (#8196)
  • mutable 세그먼트의 정렬된 docId 반복 순서 최적화 (#8213)
  • 보안 grpc 쿼리 서버 지원 추가 (#8207)
  • Tls 구성과 유틸을 pinot-core에서 pinot-common으로 이동 (#8210)
  • LookupTransformFunction의 할당률 감소 (#8204)
  • 서브클래스가 세그먼트 업로드 전/후에 일어나는 일을 커스터마이즈하도록 허용 (#8203)
  • Jersey 프레임워크에서 controller 서비스 자동 발견 활성화 (#8193)
  • pushJobSpec에 pushFileNamePattern 지원 추가 (#8191)
  • helm 차트에 additionalMatchLabels 추가 (#7177)
  • meetup.com이 피드를 폐지한 후 rsvps 시뮬레이션 (#8180)
  • checkstyle 규칙 추가 (#8197)
  • Kubernetes statefulsets에 persistence.extraVolumeMounts와 persistence.extraVolumes 추가 (#7486)
  • kafka 2.x 빌드용 scala 프로필 추가 및 root pom scala 의존성 제거 (#8174)
  • 실시간 데이터 제공자가 비-kafka 생산자를 허용하도록 변경 (#8190)
  • revertReplaceSegments api 강화 (#8166)
  • Groovy로 Pinot 쿼리 비활성화용 브로커 수준 구성 추가 (#8159)
  • presto 드라이버가 SQL로 pinot 서버에 쿼리하도록 변경 (#8186)
  • ingestionConfig에서 Groovy 비활성화용 컨트롤러 구성 추가 (#8169)
  • spark-submit 명령용 LaunchDataIngestionJobCommand의 main 메서드 추가 (#8168)
  • 세그먼트 교체 rest API에 auth 토큰 추가 (#8146)
  • UploadSegment에 allowRefresh 옵션 추가 (#8125)
  • Broker와 Controller helm 차트에 Ingress 추가 (#7997)
  • SegmentCreationMapper의 진행률 리포터 개선 (#8129)
  • St_* 함수 오류 메시지 + 리터럴 변환 함수 지원 (#8001)
  • SegmentDirectoryContext에 스키마와 세그먼트 crc 추가 (#8127)
  • UploadSegment API에서 enableParallelPushProtection 지원 확장 (#8110)
  • Config Recommendation Engine에서 BOOLEAN 타입 지원 (#8055)
  • 채널 락 획득 시와 서버에 요청 전송 시 예외를 구분하는 브로커 메트릭 추가 (#8105)
  • 일관성을 위해 minion 구성에 pinot.minion 접두사 추가 (#8109)
  • Jersey 프레임워크에서 broker 서비스 자동 발견 활성화 (#8107)
  • 서버 채널 락 대기가 오래 걸리면 타임아웃 (#8083)
  • EmptySegmentPruner를 라우팅 구성에 연결 (#8067)
  • Config Recommendation Engine에서 TIMESTAMP 데이터 타입 지원 (#8087)
  • Listener TLS 커스터마이징 (#8082)
  • LLConsumer용 consumption rate limiter 추가 (#6291)
  • Real Time Mutable FST 구현 (#8016)
  • quickstart가 파일시스템에서 테이블 파일을 가져오도록 허용 (#8093)
  • 인스턴트 세그먼트 삭제 지원 추가 (#8077)
  • quickstart 구성을 오버라이드하는 구성 파일 추가 (#8059)
  • pinot server grpc metadata acl 추가 (#8030)
  • compatibility verifier를 별도 모듈로 이동 (#8049)
  • hadoop과 spark 수집 libs를 plugins 디렉터리에서 external-plugins로 이동 (#8048)
  • 부분 upsert용 전역 전략 추가 (#7906)
  • kafka를 2.8.1로 업그레이드 (#7883)
  • EmptyQuickstart 명령 생성 (#8024)
  • SegmentPushUtil이 실시간 세그먼트를 push하도록 허용 (#8032)
  • 부분 upsert용 ignoreMerger 추가 (#7907)
  • 태스크 타임아웃과 동시성을 구성 가능하게 변경 (#8028)
  • 종료 시 health check에서 503 응답 반환 (#7892)
  • Pinot-druid-benchmark: TPC-H 데이터 가져올 때 multiValueDelimiterEnabled를 false로 설정 (#8012)
  • 정리: 남은 incubator 발생 제거 (#8023)
  • BaseTableDataManager에서 세그먼트 로딩 로직을 로컬 세그먼트 디렉터리와 분리하도록 리팩터링 (#7969)
  • 세그먼트 교체/revert 프로토콜 개선 (#7995)
  • PinotConfigProvider 인터페이스 (#7984)
  • 출력에서 제공된 세그먼트를 제외하도록 listSegments API 강화 (#7878)
  • 오래된 브로커 메트릭 정의 제거 (#7962)
  • realtimeToOffline 작업 검증용 skip 키 추가 (#7921)
  • async-http-client 업그레이드 (#7968)
  • 여러 스레드로 세그먼트 리로딩 허용 (#7893)
  • 주석 처리된 쿼리에서 쿼리 옵션 무시 (#7894)
  • ZK 변경을 듣지 않는 TableConfigCache 제거 (#7943)
  • helm 3.0x의 zookeeper로 전환 (#7955)
  • 테이블 상태 modal에 단일 react hook 사용 (#7952)
  • 실시간 수집용 디버그 로깅 추가 (#7946)
  • consuming 레코드의 transform과 indexing 예외 분리 (#7926)
  • JsonStatementOptimizer 비활성화 (#7919)
  • 인덱스 리더/로더를 플러그 가능하게 변경 (#7897)
  • 인덱스 크리에이터 프로비저닝을 플러그 가능하게 변경 (#7885)
  • 여러 디렉터리에서 플러그인 로드 지원 (#7871)
  • Controller, Broker, Server, Minion StatefulSets의 readinessEnabled 프로브 플래그를 준수하도록 helm 차트 업데이트 (#7891)
  • 비-selection 전용 GRPC 서버 요청 핸들러 지원 (#7839)
  • GRPC broker 요청 핸들러 (#7838)
  • SDF용 검증기 추가 (#7804)
  • zk put API에서 대용량 페이로드 지원 (#7364)
  • JSON Path 평가를 스토리지 계층으로 push (#7820)
  • 새 레코드 upsert 시 upsert 메타데이터 업데이트 전에 레코드 인덱싱 (#7860)
  • Post-Aggregation Gapfilling 기능 추가 (#7781)
  • 세그먼트 메타데이터에서 폐기된 필드 정리 (#7853)
  • StreamMetadataProvider에서 폐기된 메서드 제거 (#7852)
  • 차원 테이블의 경우 테넌트 구성에서 복제 계수 가져오기 (#7848)
  • 병합/롤업 지연 메트릭에 세그먼트 종료 시간 대신 유효한 버킷 종료 시간 사용 (#7827)
  • pinot start components 명령을 확장 가능하게 변경 (#7847)
  • upsert 내부 세그먼트 업데이트를 원자적으로 변경 (#7844)
  • 폐기된 ZK 메타데이터 키와 메서드 정리 (#7846)
  • statefulset help 템플릿에 extraEnv, envFrom 추가 (#7833)
  • openjdk 이미지 이름을 구성 가능하게 변경 (#7832)
  • PredicateEvaluator 인터페이스에 getPredicate() 추가 (#7840)
  • split을 기본 commit 프로토콜로 설정 (#7780)
  • JDBC 드라이버에서 Pinot 연결 속성 전달 (#7822)
  • 브로커 응답 예외 시 건너뛰기 실패를 허용하는 Pinot 클라이언트 연결 구성 추가 (#7816)
  • 기본 range index 버전을 v2로 변경 (#7815)
  • wall clock 타이머 측정 안에 thread 타이머 측정 배치 (#7809)
  • FileUploadDownloadClient에 getRevertReplaceSegmentRequest 메서드 추가 (#7796)
  • docker 이미지에 JAVA_OPTS env var 추가 (#7799)
  • thread cpu 시간을 세 가지 메트릭으로 분할 (#7724)
  • 실시간 offset 기반 consumption 상태 체커 활성화 구성 추가 (#7753)
  • json 세그먼트 메타데이터에 timeColumn, timeUnit, totalDocs 추가 (#7765)
  • 기본 Dockerfile CMD를 -help로 설정 (#7767)
  • PartitionFunction 인터페이스에 getName() 추가 (#7760)
  • FST 인덱스의 인덱스 하위 타입으로 Native FST 지원 (#7729)
  • 'startReplaceSegments' API에 forceCleanup 옵션 추가 (#7744)
  • keystore 타입 구성 추가, tls를 네이티브 구현으로 전환, server-broker tls 채널에 인증 추가 (#7653)
  • FileUploadDownloadClient를 확장해 json body로 post 요청 전송 (#7751)

주요 버그 수정 (Major Bug Fixes)

  • 문자열 비교 수정 (#8253)
  • 모든 정렬된 최적화의 order-by 버그 수정 (#8263)
  • dockerfile 수정 (#8239)
  • 파티션 함수가 절대 음수 파티션을 반환하지 않도록 보장 (#8221)
  • inverted 인덱스를 손상시키지 않고 인덱싱 실패 처리 (#8211)
  • 깨진 HashCode 파티셔닝 수정 (#8216)
  • 세그먼트 교체 테스트 수정 (#8209)
  • 일반 집계와 혼합된 필터 집계 수정 (#8172)
  • 측정에서 SQL 파싱을 제거하도록 FST Like 쿼리 벤치마크 수정 (#8097)
  • 예외를 던져 함수 타입을 식별하지 않도록 변경 (#8137)
  • 여러 스레드 간 TSerializer 공유로 인한 회귀 버그 수정 (#8160)
  • 테이블 생성 전 검증 수정 (#8103)
  • 자식 변경 구독 후 테이블 구성의 cron 스케줄 확인 (#8113)
  • tar 파일의 중복 세그먼트 이름 금지 (#8119)
  • 차원 테이블의 storage quota checker NPE 수정 (#8132)
  • TraceContext NPE 문제 수정 (#8126)
  • CMEK가 있는 API의 근본 문제를 해결하기 위해 gcloud 라이브러리 업데이트 (#8121)
  • jsonPathArray의 오류 처리 수정 (#8120)
  • 기본값이 있는 json 함수의 오류 처리 수정 (#8111)
  • 커스터마이즈된 TLS 리스너의 controller 구성 검증 실패 수정 (#8106)
  • HadoopSegmentCreationJob의 입력 및 출력 파일 수 검증 (#8098)
  • group by 없는 집계와 col이 있는 쿼리의 Broker 측 검증 (#7972)
  • REVERTED에 대한 사전 예방 세그먼트 정리 개선 (#8071)
  • JSON forward 인덱스 허용 (#8073)
  • 세그먼트 이름 확인의 PinotLLCRealtimeSegmentManager 수정 (#8058)
  • 새 partitionGroups에 항상 가장 작은 offset 사용 (#8053)
  • 시간 간격을 처리하도록 RealtimeToOfflineSegmentsTaskExecutor 수정 (#8054)
  • 세그먼트 로드 중 세그먼트 일관성 검사 정밀화 (#8035)
  • 다양한 JDBC 문제 수정 (#7784)
  • 서버 시작 시 tmp- 세그먼트 디렉터리 삭제 (#7961)
  • ByteArray 데이터타입 컬럼 메타데이터의 getMaxValue NPE 버그 수정 및 maxNumMultiValues 공개 (#7918)
  • 서버 재시작 시 Pinot upsert 테이블의 업로드된 세그먼트가 삭제되는 문제 수정 (#7979)
  • 세그먼트 업로드 오류 반환 수정 (#7957)
  • 커스텀 스케줄러를 플러그 인하도록 QuerySchedulerFactory 수정 (#7945)
  • grpc broker 요청 핸들러가 올바르게 시작되지 않는 문제 수정 (#7950)
  • 메시지 배치 전체가 필터링될 때의 실시간 수집 수정 (#7927)
  • 참조 카운트 누출을 막기 위해 acquireSegment 호출 전에 decode 메서드 이동 (#7938)
  • consuming 세그먼트의 세마포어 문제 수정 (#7886)
  • health check의 글리치를 막기 위한 PinotServiceManager 부트스트랩 모드 추가 (#7880)
  • 세그먼트 삭제 시 브로커 라우팅 수정 (#7817)
  • obfuscator가 secretkey와 keytab을 캡처하지 않는 문제 수정 (#7794)
  • 빈 버킷이 있을 때 세그먼트 병합 지연 메트릭 수정 (#7761)
  • 유효하지 않거나 누락된 타입에 타입을 추가해 QuickStart 수정 (#7768)
  • 새로 감지된 파티션에 가장 오래된 offset 사용 (#7756)
  • jdk8 소스와 호환되도록 javadoc 수정 (#7754)
  • getSelectedSegments API의 null 세그먼트 lineage ZNRecord 처리 (#7752)
  • ParquetNativeRecordReader의 소스에서 누락된 필드 처리 (#7742)

이전 버전과 호환되지 않는 변경 (Backward Incompatible Changes)

  • HashCode 파티셔닝 함수의 문제 수정 (#8216)
  • 테이블 생성 검증의 문제 수정 (#8103)
  • PinotFS API 변경 (#8063)

더 알아보기 (Learn more)