0.4.0
0.4.0
Apache Pinot 0.4.0 릴리스 노트 문서예요. 이 릴리스는 theta-sketch 기반 distinct count 함수, S3 파일시스템 플러그인, 통합 star-tree 인덱스 구현, TimeFieldSpec에서 DateTimeFieldSpec으로의 마이그레이션 등을 도입했어요.
출처: 문서
본문
요약 (Summary)
0.4.0 릴리스는 theta-sketch 기반 distinct count 집계 함수, S3 파일시스템 플러그인, 통합 star-tree 인덱스 구현, TimeFieldSpec의 폐기와 DateTimeFieldSpec 선호 등 다양한 새 기능을 도입했어요. 이 릴리스에는 기타 리팩터링, 성능 개선, 버그 수정도 포함되어 있어요. 자세한 내용은 아래를 참고해 주세요.
주요 새 기능 (Notable New Features)
- DateTimeFieldSpecs를 주류로 만들고 TimeFieldSpec 폐기 (#2756)
- 스키마 대신 테이블 구성의 시간 컬럼 사용 (#5320)
- Pinot Query Console의 스키마 컬럼에 dateTimeFieldSpec 포함 (#5392)
- Pinot 테이블의 기본 시간 컬럼으로 DATE_TIME 사용 (#5399)
- 인덱스를 사용한 범위(range) 쿼리 지원 (#5240)
- 복잡한 집계 함수 지원
- 여러 인자를 가진 집계 함수 지원 (#5261)
- 컴파일된 입력 표현식을 얻기 위한 AggregationFunction의 api 추가 (#5339)
- 간단한 PinotFS 벤치마크 드라이버 추가 (#5160)
- 기본 star-tree 지원 (#5147)
- theta-sketch 기반 distinct count 집계 함수의 초기 구현 추가 (#5316)
- 사소한 부작용 하나: DataSchemaPruner가 DistinctCountThetaSketchAggregationFunction에선 동작하지 않음 (#5382)
- Pinot 서버 세그먼트 다운로드 API에 대한 접근 제어 추가 (#5260)
- Pinot S3 파일시스템 플러그인 추가 (#5249)
- 텍스트 검색 개선
- 텍스트 인덱스의 불용어(stop word) 가지치기 (#5297)
- chunk 기반 raw 인덱스 생성자에서 8바이트 오프셋 사용 (#5285)
- varbyte raw 인덱스 생성자에서 최대 컬럼 값 길이로 chunk당 문서 수 파생 (#5256)
- 텍스트 검색의 세그먼트 간(inter segment) 테스트 추가 및 Lucene 쿼리 파서 생성의 버그 수정 (#5226)
- 텍스트 인덱스 쿼리 캐시를 구성 가능한 옵션으로 변경 (#5176)
- 성능 개선을 위해 Lucene DocId를 PinotDocId 캐시에 추가 (#5177)
- 성능 개선을 위해 텍스트 인덱스 리더에서 두 번째 비트맵 생성 제거 (#5199)
- 도구/사용성 개선
- Pinot 수집 작업 스펙의 템플릿 지원 추가 (#5341)
- 사용자가 zk 데이터 디렉터리를 지정하고 zk 종료 중 정리를 하지 않도록 허용 (#5295)
- PinotTaskGenerator에서 minion 태스크 타임아웃 구성 허용 (#5317)
- 스크립트의 JVM 설정 업데이트 (#5127)
- Stream github events 데모 추가 (#5189)
- 문서 링크를 gitbook에서 docs.pinot.apache.org로 이동 (#5193)
- ORCRecordReader 재구현 (#5267)
- 수집 중 스키마 변환 표현식 평가 (#5238)
- selection 목록에서 count distinct 쿼리 처리 (#5223)
- pinot broker 쿼리 api에서 비동기 처리 활성화 (#5229)
- 테이블 리밸런스의 부트스트랩 모드 지원 (#5224)
- BYTES 컬럼의 order-by 지원 (#5213)
- 바이너리로 nightly publish 추가 (#5190)
- 테이블 리밸런싱 시 핫스팟 서버 생성을 피하기 위해 세그먼트 셔플 (#5197)
- 내장 변환 함수 지원 (#5312)
- 날짜 시간 변환 함수 추가 (#5326)
- Deepstore 우회: 세그먼트 업로더 도입 (#5277, #5314)
- API 추가/변경
- 세그먼트 다운로드를 위한 새 서버 api 추가
- /GET /segments/{tableNameWithType}/{segmentName}
- 세그먼트 다운로드를 위한 새 서버 api 추가
- helix를 0.9.7로 업그레이드 (#5411)
- 쿼리 컴파일 중 함수 실행 지원 추가 (#5406)
- 기타 주요 리팩터링
- table config를 pinot-spi로 이동 (#5194)
- 통합 테스트 정리. 스키마, 테이블 구성, 세그먼트 생성을 표준화 (#5385)
- json 개체에서 필드를 추출하는 jsonExtractScalar 함수 추가 (#4597)
- Pinot 수집 작업 스펙의 템플릿 지원 추가 (#5372)
- AggregationFunctionContext 정리 (#5364)
- 카디널리티가 높을 때 실시간 범위 프레디킷 최적화 (#5331)
- PinotOutputFormat이 테이블 구성과 스키마를 사용해 세그먼트를 생성하도록 변경 (#5350)
- InstanceSelector에서 사용 불가능한 세그먼트 추적 (#5337)
- 업로드 시간이 제한된 새 best effort 세그먼트 업로더 추가 (#5314)
- SegmentPurger에서 테이블 구성을 사용해 세그먼트 생성 (#5325)
- RecordReader와 StreamMessageDecoder에서 스키마 분리 (#5309)
- 다중값 컬럼의 ARRAYLENGTH UDF 구현 (#5301)
- GroupBy 쿼리 성능 개선 (#5291)
- ExpressionFilterOperator 최적화 (#5132)
주요 버그 수정 (Major Bug Fixes)
- 인덱스 닫을 때 PinotDataBuffer 해제 안 함 (#5400)
- 쿼리 파싱과 표현식 트리에서 인자 없는 함수 처리 (#5375)
- 알 수 없는 json 필드로 인한 롤링 업그레이드 중 호환성 문제 수정 (#5376)
- pinot-admin 명령의 누락된 오류 메시지 수정 (#5305)
- HDFS 복사 로직 수정 (#5218)
- spark 수집 문제 수정 (#5216)
- DistinctTable의 용량 수정 (#5204)
- Pinot 웹사이트의 다양한 링크 수정
진행 중인 작업 (Work in Progress)
- Upsert: 실시간 테이블의 데이터 덮어쓰기 지원 (#4261)
- pinot common에 pinot upsert 기능 추가 (#5175)
- theta-sketch 개선: 다중값 집계 지원, 복잡한 프레디킷, 성능 튜닝 등
이전 버전과 호환되지 않는 변경 (Backward Incompatible Changes)
-
TableConfig는 더 이상 중첩된 json 문자열의 json 문자열(json 안에
\"없음) 역직렬화를 지원하지 않아요 (#5194) -
AggregationFunction의 다음 API가 변경됨 (blockValSetMap의 키로 String 대신 TransformExpressionTree 사용) (#5371):
void aggregate(int length, AggregationResultHolder aggregationResultHolder, Map<TransformExpressionTree, BlockValSet> blockValSetMap); void aggregateGroupBySV(int length, int[] groupKeyArray, GroupByResultHolder groupByResultHolder, Map<TransformExpressionTree, BlockValSet> blockValSetMap); void aggregateGroupByMV(int length, int[][] groupKeysArray, GroupByResultHolder groupByResultHolder, Map<TransformExpressionTree, BlockValSet> blockValSetMap);