시계열 언어 플러그인
시계열 언어 플러그인 (Time Series Language Plugin)
PromQL, M3QL 같은 커스텀 또는 새로운 시계열 쿼리 언어를 지원하는 방법을 다루는 문서예요.
출처: 문서
본문
PromQL 같은 시계열 쿼리 언어는 할 수 있는 일이 제한적이지만 시계열 분석에는 상당히 편리해요. 많은 시계열 쿼리 언어가 있으며, Pinot는 시계열 언어 플러그인을 통해 그 중 어떤 것이든 지원할 수 있어야 해요.
플러그인 높은 수준 설계 (Plugin High Level Design)
시계열 플러그인 구현 전용 SPI가 있어요: pinot-timeseries-spi.
자체 언어 지원을 구축하려면 다음 핵심 컴포넌트를 구현해야 해요:
TimeSeriesLogicalPlanner는 시계열 요청을 받아BaseTimeSeriesPlanNode로 구성된 플랜 트리를 반환해야 해요. 플랜 트리의 리프는LeafTimeSeriesPlanNode여야 해요. 플래너는 적합하다고 판단하는 대로TimeBuckets를 정의할 수도 있어요.BaseTimeSeriesPlanNode는 자체 플랜 노드를 구현하게 해줘요. 각 플랜 노드는run메서드를 통해BaseTimeSeriesOperator를 반환해야 해요.BaseTimeSeriesOperator는 운영자를 정의·구현하게 해줘요.BaseTimeSeriesBuilder는 지원할 각 집계 타입별로 구현할 수 있어요.
apache/pinot 저장소의 pinot-plugins/pinot-timeseries-lang에 예시 플러그인 구현이 있어요.
플러그인 구현 팁 (Plugin Implementation Tips)
- 쿼리 파서 구현에는 JavaCC 같은 프레임워크를 고려해 보세요.
- 플래너에서 반환하는
TimeBuckets는 원래 요청의 [start, end]를 넘어 흘러넘칠 수 있어요. 언어의 의미론에 따라 해상도를 정의할 수도 있어요. TimeBuckets의 해상도를 현명하게 고르세요. 매우 미세한 해상도를 설정하면 시각화 도구가 느려지거나 Pinot에 많은 힙을 유발할 수 있어요.LeafTimeSeriesPlanNode의limit을 사용해 리프 스테이지에서 반환할 수 있는 최대 계열 수를 제어해요.- 리프 운영자가 반환하는 각 계열마다
TimeBuckets#getTimeBuckets()길이와 같은 길이의Double[]배열이 있다는 점에 유의하세요. 이상적으로는 허용하고 싶은 데이터 포인트 수의 고정된 상한을 기준으로limit과TimeBuckets의 해상도를 튜닝해야 해요.