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)