timeSeriesPredictLinearToGrid

timeSeriesPredictLinearToGrid

지정된 그리드 위의 시계열 데이터에서 PromQL 스타일의 선형 예측(linear prediction)을 계산하는 집계 함수예요. 타임스탬프와 값의 쌍으로 시계열 데이터를 받아, 시작 타임스탬프·끝 타임스탬프·스텝으로 설명되는 규칙적인 시간 그리드 위에서 지정된 예측 타임스탬프 오프셋으로 선형 예측을 계산해요. 그리드의 각 지점에 대해 지정된 시간 윈도우 안의 샘플들로 predict_linear를 계산해요.

출처: 문서

본문

timeSeriesPredictLinearToGrid은 지정된 그리드 위의 시계열 데이터에서 PromQL 스타일의 linear prediction을 계산하는 집계 함수예요. v25.6.0에 도입되었어요.

타임스탬프와 값의 쌍으로 시계열 데이터를 받아, 시작 타임스탬프·끝 타임스탬프·스텝으로 설명되는 규칙적인 시간 그리드 위에서 이 데이터로 지정된 예측 타임스탬프 오프셋을 갖는 PromQL 스타일의 linear prediction을 계산해요. 그리드의 각 지점에 대해 predict_linear 계산을 위한 샘플들은 지정된 시간 윈도우 안에서 고려돼요.

샘플은 다음 세 가지 형태 중 하나로 전달할 수 있어요:

  • 두 개의 인자 timestampvalue 로 전달. 각 행은 단일 샘플을 담아요.
  • 타임스탬프와 값의 두 배열로 전달. 각 행은 전체 시계열을 담아요.
  • (timestamp, value) 튜플들의 단일 배열로 전달. 각 행은 전체 시계열을 담아요.

여러 샘플이 같은 타임스탬프를 가지면 그중 하나만 사용돼요: 값이 가장 큰 샘플이에요. NaN 값은 다른 어떤 값에도 지므로, 해당 타임스탬프의 모든 샘플이 NaN일 때만 NaN이 사용돼요.

이 함수는 비공개 프리뷰(private preview) 상태라 enable_time_series_aggregate_functions=true 로 설정해야 해요.

구문 (Syntax)

timeSeriesPredictLinearToGrid(start_timestamp, end_timestamp, grid_step, staleness, predict_offset)(timestamp, value)
timeSeriesPredictLinearToGrid(start_timestamp, end_timestamp, grid_step, staleness, predict_offset)(samples)

매개변수 (Parameters)

  • start_timestamp — 그리드의 시작을 지정해요. DateTime64 타임스탬프 인자에서는 분수 숫자, 또는 숫자나 날짜-시간 텍스트를 담은 문자열이 될 수도 있어요. UInt32 또는 DateTime 또는 DateTime64 또는 Float* 또는 Decimal* 또는 String 타입이에요.
  • end_timestamp — 그리드의 끝을 지정해요. DateTime64 타임스탬프 인자에서는 분수 숫자, 또는 숫자나 날짜-시간 텍스트를 담은 문자열이 될 수도 있어요. UInt32 또는 DateTime 또는 DateTime64 또는 Float* 또는 Decimal* 또는 String 타입이에요.
  • grid_step — 그리드의 스텝을 초 단위로 지정해요. DateTime64 타임스탬프 인자에서는 분수 숫자, 또는 숫자나 '15s'·'1m' 같은 기간을 담은 문자열이 될 수도 있어요. UInt32 또는 Float* 또는 Decimal* 또는 String 타입이에요.
  • staleness — 고려되는 샘플들의 최대 "staleness"를 초 단위로 지정해요. staleness 윈도우는 왼쪽 열림·오른쪽 닫힘 구간이에요. DateTime64 타임스탬프 인자에서는 분수 숫자, 또는 숫자나 '15s'·'1m' 같은 기간을 담은 문자열이 될 수도 있어요. UInt32 또는 Float* 또는 Decimal* 또는 String 타입이에요.
  • predict_offset — 예측 시간에 더할 오프셋의 초 수를 지정해요. UInt32 또는 Float* 또는 Decimal* 또는 String 타입이에요.

인자 (Arguments)

  • timestamp — 샘플의 타임스탬프예요. 개별 값이거나 배열일 수 있어요. UInt32 또는 DateTime 또는 DateTime64 또는 Array(UInt32) 또는 Array(DateTime) 또는 Array(DateTime64) 타입이에요.
  • value — 타임스탬프에 대응하는 시계열 값이에요. 개별 값이거나 배열일 수 있어요. Float* 또는 Array(Float*) 타입이에요.
  • samples — 시계열의 샘플로, 튜플 (timestamp, value) 들의 배열로 전달돼요. 튜플 원소들은 위에 나열한 타임스탬프와 값 타입을 가져요. 타임스탬프와 값을 두 개의 별도 인자로 전달하는 대안이에요. Array(Tuple(T1, T2)) 타입이에요.

반환 값 (Returned value)

지정된 그리드 위의 predict_linear 값들을 Array(Nullable(Float64)) 로 반환해요. 반환된 배열은 각 시간 그리드 지점마다 하나의 값을 담아요. 특정 그리드 지점에 대해 rate 값을 계산할 윈도우 안의 샘플이 충분하지 않으면 값은 NULL이에요.

예시 (Examples)

60초 오프셋으로 그리드 [90, 105, 120, 135, 150, 165, 180, 195, 210] 위에서 predict_linear 값 계산하기

쿼리:

SET enable_time_series_aggregate_functions = 1;
WITH
    -- 참고: 140과 190 사이의 간격은 window 매개변수에 따라 ts = 150, 165, 180의 값이 어떻게 채워지는지 보여 주기 위한 것입니다
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values, -- 위 타임스탬프들에 대응하는 값 배열
    90 AS start_ts,       -- 타임스탬프 그리드의 시작
    90 + 120 AS end_ts,   -- 타임스탬프 그리드의 끝
    15 AS step_seconds,   -- 타임스탬프 그리드의 스텝
    45 AS window_seconds, -- "staleness" 윈도우
    60 AS predict_offset  -- 예측 시간 오프셋
SELECT timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamp, value)
FROM
(
    -- 이 서브쿼리는 타임스탬프와 값의 배열을 `timestamp`, `value` 행으로 변환합니다
    SELECT
        arrayJoin(arrayZip(timestamps, values)) AS ts_and_val,
        ts_and_val.1 AS timestamp,
        ts_and_val.2 AS value
);

응답:

┌─timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamp, value)─┐
│ [NULL,NULL,1,9.166667,11.6,12.5,NULL,NULL,16.5]                                                                 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

배열 인자를 사용한 동일한 쿼리

쿼리:

SET enable_time_series_aggregate_functions = 1;
WITH
    [110, 120, 130, 140, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 1, 3, 4, 5, 5, 8, 12, 13]::Array(Float32) AS values,
    90 AS start_ts,
    90 + 120 AS end_ts,
    15 AS step_seconds,
    45 AS window_seconds,
    60 AS predict_offset
SELECT timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamps, values);

응답:

┌─timeSeriesPredictLinearToGrid(start_ts, end_ts, step_seconds, window_seconds, predict_offset)(timestamps, values)─┐
│ [NULL,NULL,1,9.166667,11.6,12.5,NULL,NULL,16.5]                                                                   │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

더 알아보기 (Learn more)