0.8.0

0.8.0

Apache Pinot 0.8.0 릴리스 노트 문서예요. 이 릴리스는 호환성 테스트, 강화된 복합 타입과 Json 지원, 부분 upsert 지원, 새로운 스트림 수집 플러그인 등 여러 새 기능을 도입했어요.

출처: 문서

본문

요약 (Summary)

이 릴리스는 호환성 테스트, 강화된 복합 타입과 Json 지원, 부분 upsert 지원, 새로운 스트림 수집 플러그인(AWS Kinesis, Apache Pulsar) 등 훌륭한 새 기능을 도입했어요. 새 timestamp와 boolean 타입 지원, 유연한 숫자 컬럼 비교 같은 많은 쿼리 개선도 포함되어 있어요. 또한 많은 중요한 버그 수정도 포함되어 있어요. 자세한 내용은 아래를 참고해 주세요.

릴리스는 다음 커밋에서 생성되었어요: fe83e95aa9124ee59787c580846793ff7456eaa5

그리고 다음 cherry-pick들:

주요 새 기능 (Notable New Features)

  • SegmentProcessorFramework의 시간 처리 추출 (#7158)
  • Apache Pulsar low level 및 high level 커넥터 추가 (#7026)
  • compat checker의 병렬 빌드 활성화 (#7149)
  • 집계된 세그먼트 메타데이터를 가져오는 controller/server API 추가 (#7102)
  • DISTINCT용 Dictionary Based Plan 지원 (#7141)
  • kinesis 빌더에 HTTP 클라이언트 제공 (#7148)
  • 인자 2개의 datetime 함수 추가 (#7116)
  • Offline Pinot 테이블의 수집 상태 확인 기능 추가 (#7070)
  • JDBC에서 timestamp 데이터 타입 지원 추가 (#7117)
  • controller과 broker helix hostname 업데이트 허용 (#7064)
  • 타임아웃 발생 시 실행 중인 Kinesis consumer 태스크 취소 (#7109)
  • 부분 upsert용 Append merger 구현 (#7087)
  • SegmentProcessorFramework 강화 (#7092)
  • TaskMetricsEmitted 주기적 controller 작업 추가 (#7091)
  • 쿼리에서 json path 표현식 지원 (#6998)
  • AVRO와 ORC 형식의 데이터 전처리 지원 (#7062)
  • 부분 upsert 구성과 mergers 추가 (#6899)
  • 범위 인덱스 규칙 추천 지원 추가 (#7034) (#7063)
  • 기본적으로 consuming 세그먼트 리로드 허용 (#7078)
  • LZ4 압축 코덱 추가 (#6804) (#7035)
  • Pinot JDK 11 컴파일 가능하게 변경 (#6424)
  • GroupBy OrderBy 쿼리의 in-Segment Trim 도입 (#6991)
  • 세그먼트 처리 mapper에서 GenericRow 파일 생성 (#7013)
  • ago() 스칼라 변환 함수 추가 (#6820)
  • IN 프레디킷용 Bloom Filter 지원 추가 (#7005) (#7007)
  • genericRow 파일 리더와 라이터 추가 (#6997)
  • , >=, <, <= 연산자의 LHS와 RHS 숫자 타입 정규화 (#6927)

  • Kinesis 스트림 수집 플러그인 추가 (#6661)
  • API의 JSON과 Startree 인덱스 정보 (#6766) (#6873)
  • generic row ser/de에서 null 값 필드 지원 (#6968)
  • select 쿼리 최적화를 위한 PassThroughTransformOperator 구현 (#6972) (#6973)
  • TIME_CONVERT/DATE_TIME_CONVERT 프레디킷 최적화 (#6957)
  • 쿼리에 보이는 컬럼의 버퍼를 가져오는 프리페치 호출 (#6967)
  • 스크립트에서 호환성 테스트 활성화 (#6959)
  • schema 추론에 collectionToJsonMode 추가 (#6946)
  • 디코더/리더에 복합 타입 지원 추가 (#6945)
  • 실시간 수집 상태를 가져오는 새 Controller API 추가 (#6890)
  • Modulo 파티션 함수의 Long 지원 추가 (#6929)
  • null 값을 보존하도록 PinotSegmentRecordReader 강화 (#6922)
  • avro-to-pinot schema 추론에 복합 타입 지원 추가 (#6928)
  • 실시간 데이터용 올바른 yaml 파일 추가 (#6787) (#6916)
  • 오프라인 세그먼트 생성에 복합 타입 변환 추가 (#6914)
  • 구성 파일 지원 추가 (#6787) (#6901)
  • 중첩 배열을 지원하도록 JSON 인덱스 강화 (#6877)
  • 테이블용 디버그 엔드포인트 추가 (#6897)
  • JSON 컬럼 데이터 타입 지원 (#6878)
  • MV 컬럼에서 빈 문자열 허용 (#6879)
  • JMH 벤치마킹으로 Zstandard 압축 지원 추가 (#6804) (#6876)
  • = 및 != 연산자의 LHS와 RHS 숫자 타입 정규화 (#6811)
  • ConcatCollector 구현을 off-heap으로 변경 (#6847)
  • [PQL Deprecation] 이전 BrokerRequestOptimizer 정리 (#6859)
  • [PQL Deprecation] SQL 쿼리에 대해 PQL broker request 컴파일 안 함 (#6855)
  • TIMESTAMP와 BOOLEAN 데이터 타입 지원 추가 (#6719)
  • Pinot Minion용 admin 엔드포인트 추가 (#6822)
  • PQL 컴파일러 사용 제거 (#6808)
  • 시스템과 애플리케이션 구성을 가져오는 Pinot Controller, Broker, Server 엔드포인트 추가 (#6817)
  • ColumnValue SegmentPruner에서 IN 프레디킷 지원 (#6756) (#6776)
  • upsert 활성화된 실시간 테이블에 새 세그먼트 추가 활성화 (#6567)
  • Kinesis 커넥터용 인터페이스 변경 (#6667)
  • Pinot Minion SegmentGenerationAndPush 태스크: taskSpec 내부의 PinotFS 구성은 항상 임시이며 minion 서버 구성이 만든 기본 PinotFS보다 우선순위가 높음 (#6744)
  • DataTable V3 구현 및 서버에서 데이터 테이블 직렬화 비용 측정 (#6710)
  • TableResource에 uploadLLCSegment 엔드포인트 추가 (#6653)
  • 파일 기반 SegmentWriter 구현 (#6718)
  • pinot-controller용 Basic Auth (#6613)
  • UI와 Authentication API 통합 및 로그인 페이지 추가 (#6686)
  • 한 번에 오프라인 세그먼트용 데이터 수집 지원 (#6479)
  • SumPrecision: 모든 데이터 타입과 star-tree 지원 (#6668)
  • 호환성 회귀 테스트 완료 (#6650)
  • Kinesis 구현 1부: partitionId를 partitionGroupId로 이름 변경 (#6655)
  • Pinot 메트릭스를 플러그 가능하게 변경 (#6640)
  • LLC 테이블이 세그먼트를 로드할 수 없을 때 controller에서 세그먼트 복구 (#6647)
  • 지정된 TableConfig와 Schema를 검증하는 새 API 추가 (#6620)
  • 브로커의 쿼리/응답 크기 메트릭 도입 (#6590)
  • 죽은 minion 인스턴스를 정리하는 controller 주기적 태스크 추가 (#6543)
  • Json, TEXT 인덱싱에 대한 새 검증 추가 (#6541)
  • 쿼리 실행에서 항상 응답 반환 (#6596)

특별 참고 사항 (Special notes)

  • 0.8.0 릴리스 이후부터 jdk 11을 공식 지원하며 jdk 11 기능을 안전하게 사용할 수 있어요. 코드는 여전히 jdk 8로 컴파일 가능해요 (#6424)
  • RealtimeToOfflineSegmentsTask 구성에 이전 버전 비호환 변경이 있어요 (#7158)
    • timeColumnTransformFunction 제거 (이전 버전 비호환이지만 어차피 rollup은 지원되지 않음)
    • collectorType 폐기, mergeType로 대체
    • round과 partition의 시간 버킷을 구성하는 roundBucketTimePeriod와 partitionBucketTimePeriod 추가
  • 플러그 가능한 MinionEventObserverFactory의 정규식 경로가 org.apache.pinot.*.event.*에서 org.apache.pinot.*.plugin.minion.tasks.*로 변경됨 (#6980)
  • 모든 pinot 내장 minion 태스크를 pinot-minion-builtin-tasks 모듈로 이동해 shaded jar로 패키징 (#6618)
  • consuming 세그먼트 리로드 플래그 pinot.server.instance.reload.consumingSegment가 기본적으로 true가 됨 (#7078)
  • JSON 디코더를 pinot-kafka에서 pinot-json 패키지로 이동 (#7021)
  • 컨트롤러 rest API PUT /schemas/{schemaName}을 통한 이전 버전 비호환 스키마 변경은 차단됨 (#6737)
  • /tables/validateTableAndSchema를 새 configs/validate API로 대체해 폐기하고, 실시간 테이블 구성·오프라인 테이블 구성·스키마를 한 번에 운영하는 /tableConfigs 새 API 도입 (#6840)

주요 버그 수정 (Major Bug fixes)

  • MinionInstancesCleanupTask의 경쟁 조건 수정 (#7122)
  • controller/broker/minion의 커스텀 인스턴스 id 수정 (#7127)
  • UpsertConfig JSON 역직렬화 수정 (#7125)
  • 큰 limit을 가진 selection 쿼리의 메모리 문제 수정 (#7112)
  • 삭제된 세그먼트 디렉터리 없음 경고 수정 (#7097)
  • JDK_VERSION을 매개변수로 제공해 docker 빌드 스크립트 수정 (#7095)
  • json 데이터 타입의 기타 수정 (#7057)
  • 쿼리 추천자에서 날짜 시간 컬럼 처리 수정 (#7018) (#7031)
  • pinot-hadoop과 pinot-spark 테스트 수정 (#7030)
  • HadoopPinotFS listFiles 메서드가 항상 scheme을 포함하도록 수정 (#7027)
  • 다른 _fieldToValueMap 크기의 GenericRow 비교 수정 (#6964)
  • IS NULL와 IS NOT NULL 연산자로 인한 NumericalFilterOptimizer의 NPE 수정 (#7001)
  • 실시간 텍스트 인덱스 새로고침 스레드의 경쟁 조건 수정 (#6858) (#6990)
  • deep store 디렉터리 구조 수정 (#6976)
  • 소비된 kafka 메시지가 null이거나 레코드 값이 null일 때의 NPE 문제 수정 (#6950)
  • calcite NPE 버그 완화 (#6908)
  • 지정된 테이블 이름이 존재하지 않을 때 던져지는 예외 수정 (#6328) (#6765)
  • 연쇄 변환의 CAST 변환 함수 수정 (#6941)
  • 실패하는 pinot-controller npm 빌드 수정 (#6795)

더 알아보기 (Learn more)