0.5.0
0.5.0
Apache Pinot 0.5.0 릴리스 노트 문서예요. 이 릴리스는 Pinot 수집과 커넥터, 쿼리 기능, 그리고 새로 개편된 컨트롤러 UI에 많은 새 기능을 포함해요.
출처: 문서
본문
요약 (Summary)
이 릴리스는 Pinot 수집과 커넥터(예: 수집 중 필터링 지원 — 테이블 구성에서 설정 가능; 수집 중 json 지원; proto buf 입력 형식 지원 및 새 Pinot JDBC 클라이언트), 쿼리 기능(예: 새 GROOVY 변환 함수 UDF)과 관리 기능(새로 개편된 Cluster Manager UI & Query Console UI)에 많은 새 기능을 포함해요. 또한 많은 중요한 버그 수정도 포함되어 있어요. 자세한 내용은 아래를 참고해 주세요.
릴리스는 다음 커밋에서 생성되었어요: d1b4586 그리고 다음 cherry-pick들:
주요 새 기능 (Notable New Features)
- 기존 인스턴스 구성에 대한 업데이트 허용: Instance 개체를 페이로드로 하는 PUT /instances/{instanceName} (#PR4952)
- Pinot 컴포넌트 시작을 위한 PinotServiceManager 추가 (#PR5266)
- 프로토콜 버퍼(protocol buffers) 입력 형식 지원 (#PR5293)
- 간단한 ScalarFunction을 위한 GenericTransformFunction 래퍼 추가 (PR#5440) — GenericTransformFunction을 통해 어떤 스칼라 함수도 호출하는 지원 추가
- SQL CASE 문 지원 추가 (PR#5461)
- 직렬화된 sketch를 반환하는 distinctCountRawThetaSketch 집계 지원 (PR#5465)
- SegmentDumpTool에 다중값 지원 추가 (PR#5487) — pinot-tool.sh 스크립트의 일부로 세그먼트 덤프 도구 추가
- 수집 중 json 개체를 문자열로 변환하는 json_format 함수 추가 (PR#5492) — 복잡한 개체를 json 문자열로 저장(나중에 jsonExtractScalar로 쿼리 가능)할 수 있음
- SQL 리터럴의 단일 인용부호 이스케이프 지원 (PR#5501) — DistinctCountThetaSketch가 표현식을 리터럴로 저장하므로 특히 유용. 예: DistinctCountThetaSketch(..., 'foo=''bar''', ...)
- BETWEEN 및 IN 절의 왼쪽 항으로 표현식 지원 (PR#5502)
- TableConfig에 새 필드 IngestionConfig 추가:
- 세그먼트 로드 중 star-tree 생성 허용 (PR#5641) — 세그먼트 로드 중 star-tree 생성을 활성화/비활성화하는 새 부울 구성 enableDynamicStarTreeCreation을 IndexingConfig에 도입
- JDBC 연결을 사용하는 Pinot 클라이언트 지원 (PR#5602)
- 함수의 두 번째 매개변수로 log2m 값을 추가해 distinctCountHLL, distinctCountHLLMV 함수의 커스텀 정확도 지원 (PR#5564) — 사용자가 기본 log2m 값을 설정할 수 있게 하는 클러스터 구성 default.hyperloglog.log2m 추가
- 테이블 구성 기반의 Controller 세그먼트 암호화 추가 (PR#5617)
- Helix의 모든 인스턴스에 대한 메시지 큐 제약 추가, 큰 기본값 100000 (PR#5631)
- SELECT에 없는 집계의 order-by 지원 (PR#5637) — 예: "select subject from transcript group by subject order by count() desc" 이것은 아래 쿼리와 동일하지만 응답에는 count()가 포함되지 않아야 함. "select subject, count() from transcript group by subject order by count() desc"
- Pinot 쿼리의 geo 지원 추가 (PR#5654) — 지리공간 데이터 모델과 지리공간 함수 추가
- Cluster Manager UI & Query Console UI 개편 (PR#5684, PR#5732) — 클러스터 관리 UI 업데이트, 테이블 상세 페이지와 세그먼트 상세 페이지 추가
- Zookeeper 탐색을 위한 Controller API 추가 (PR#5687)
- distinctCount와 group-by의 BYTES 타입 지원 (PR#5701, PR#5708) — DistinctCountAggregationFunction에 BYTES 타입 지원 추가; DictionaryBasedAggregationOperator에서 DistinctCount의 BYTES 타입 올바르게 처리
- JSON 형식의 수집 작업 스펙 지원 (#PR5729)
- RealtimeProvisioningHelper 명령 개선 (#PR5737) — 수집과 플러그인 관련 문서 개선
- GROOVY 변환 함수 UDF 추가 (#PR5748) — 쿼리에서 groovy 스크립트를 UDF로 실행하는 기능. 예: SELECT GROOVY('{"returnType": "INT", "isSingleValue": true}', 'arg0 + " " + arg1', columnA, columnB) FROM myTable
특별 참고 사항 (Special notes)
- 스트림과 메타데이터 인터페이스 변경 (PR#5542) — 이 PR은 다른 스트림에 대한 offset 지원을 확장하기 위한 이슈 #5359의 작업을 마무리함
- TransformConfig: 수집 수준 컬럼 변환. 이전에는 Schema(FieldSpec#transformFunction)에서 도입됐으며 이제 TableConfig로 이동. 스키마 아래에 계속 남지만 이 릴리스부터는 TableConfig에 설정할 것을 권장 (PR#5681)
- Helix 클러스터 구성의 구성 키 enable.case.insensitive.pql이 폐기되고 enable.case.insensitive로 대체됨 (PR#5546)
- 기본 세그먼트 로드 모드를 MMAP으로 변경 (PR#5539) — 세그먼트의 로드 모드는 현재 기본값이
heap이었음.
주요 버그 수정 (Major Bug fixes)
- SQL 경로에서 distinctCountRawHLL의 버그 수정 (#5494)
- 기존 스트림 구현의 이전 버전 비호환성 수정 (#5549)
- StreamFactoryConsumerProvider의 이전 버전 비호환성 수정 (#5557)
- isLiteralOnlyExpression 로직 수정 (#5611)
- 연산자 설정 중 이중 메모리 할당 수정 (#5619)
- Zookeeper의 세그먼트 다운로드 url이 하드코딩된 controller uri 대신 deep store uri가 되도록 허용 (#5639)
- Presto 세그먼트 스플릿에서 쿼리할 때 BrokerRequest를 QueryContext로 변환하는 이전 버전 호환 문제 수정 (#5676)
- PinotSegmentToAvroConverter가 BYTES 데이터 타입을 처리하지 못하는 문제 수정 (#5789)
이전 버전과 호환되지 않는 변경 (Backward Incompatible Changes)
- HAVING 절이 있는 PQL 쿼리는 더 이상 허용되지 않음. 이유 (#PR5570):
- HAVING 절은 각 집계 컬럼이 개별적으로 정렬되는 PQL GROUP-BY 의미에 적용되지 않음
- 현재 동작은 통지 없이 부정확한 결과를 만들 수 있음
- HAVING 지원은 다음 릴리스에서 SQL 쿼리에 추가될 예정
- DistinctCountThetaSketch 프레디킷 문자열의 표준화 때문에 Broker를 Server보다 먼저 업그레이드해 주세요. 새 Broker는 이전 호환성을 위해 표준 및 비표준 프레디킷 문자열을 모두 처리할 수 있어요. (#PR5613)