카테고리:

윈도우 함수 (일반)

INTERPOLATE_BFILL, INTERPOLATE_FFILL, INTERPOLATE_LINEAR

주변 값을 기반으로 누락된 값 사이를 채우기 위해 시계열 데이터 세트의 행을 업데이트합니다.

다음과 같은 보간 윈도우 함수를 호출할 수 있습니다.

  • INTERPOLATE_BFILL: 다음으로 관찰된 행을 기준으로 행 공백을 채웁니다.

  • INTERPOLATE_FFILL: 이전에 관찰된 행을 기반으로 행 공백을 채웁니다.

  • INTERPOLATE_LINEAR: 이전 값과 다음 값의 선형 보간을 기반으로 행 공백을 채웁니다. 이 함수는 숫자 값만 지원합니다.

이러한 함수는 :doc:`윈도우 함수 구문</sql-reference/functions-window-syntax>`이 동일합니다. 명시적 윈도우 프레임은 지원하지 않습니다.

구문

INTERPOLATE_BFILL( <expr> )
  OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
Copy
INTERPOLATE_FFILL( <expr> )
  OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
Copy
INTERPOLATE_LINEAR( <expr> )
  OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
Copy

인자

expr

공백을 채우려는 열을 정의하는 표현식입니다.

INTERPOLATE_LINEAR 입력 표현식은 숫자 데이터 타입이어야 합니다.

INTERPOLATE_BFILL 및 INTERPOLATE_FFILL 입력 표현식은 :doc:`지리 공간 데이터 타입</sql-reference/data-types-geospatial>`을 지원하지 않습니다.

매개 변수

OVER

표준 윈도우 함수 OVER 절입니다. 윈도우 함수 구문 및 사용법 섹션을 참조하십시오. 보간 함수의 경우, PARTITION BY 절은 선택 사항이지만, ORDER BY 절은 필수입니다. 명시적 윈도우 프레임을 지정할 수 없습니다.

INTERPOLATE_LINEAR 함수는 하나의 ORDER BY 표현식만 포함할 수 있으며, 이는 숫자, DATE 또는 TIMESTAMP 표현식(모든 TIMESTAMP 베리언트)이여야 합니다.

반환

이러한 함수는 입력 표현식의 데이터 타입과 동일한 데이터 타입을 반환합니다.

다음 예제에서는 간단한 쿼리에서 보간 함수를 사용하는 방법을 보여줍니다.

두 개의 보간 함수가 있는 예제

다음 예제에서는 동일한 쿼리에서 리샘플링된 temperature 값 및 두 개의 서로 다른 보간된 temperature 값을 반환합니다. (테이블 ``march_temps_every_five_mins``는 이 항목의 앞부분에서 만들었습니다.)

SELECT observed,
    temperature,
    INTERPOLATE_BFILL(temperature) OVER (PARTITION BY city, county ORDER BY observed) bfill_temp,
    INTERPOLATE_FFILL(temperature) OVER (PARTITION BY city, county ORDER BY observed) ffill_temp,
    city,
    county
  FROM march_temps_every_five_mins
  ORDER BY observed;
Copy
+-------------------------+-------------+------------+------------+------------------+----------------+
| OBSERVED                | TEMPERATURE | BFILL_TEMP | FFILL_TEMP | CITY             | COUNTY         |
|-------------------------+-------------+------------+------------+------------------+----------------|
| 2025-03-15 09:45:00.000 |        NULL |         48 |       NULL | Big Bear City    | San Bernardino |
| 2025-03-15 09:49:00.000 |          48 |         48 |         48 | Big Bear City    | San Bernardino |
| 2025-03-15 09:50:00.000 |        NULL |         49 |         48 | Big Bear City    | San Bernardino |
| 2025-03-15 09:50:00.000 |          44 |         44 |         44 | South Lake Tahoe | El Dorado      |
| 2025-03-15 09:55:00.000 |          49 |         49 |         49 | Big Bear City    | San Bernardino |
| 2025-03-15 09:55:00.000 |          46 |         46 |         46 | South Lake Tahoe | El Dorado      |
| 2025-03-15 10:00:00.000 |        NULL |         51 |         49 | Big Bear City    | San Bernardino |
| 2025-03-15 10:00:00.000 |        NULL |         52 |         46 | South Lake Tahoe | El Dorado      |
| 2025-03-15 10:05:00.000 |        NULL |         51 |         49 | Big Bear City    | San Bernardino |
| 2025-03-15 10:05:00.000 |        NULL |         52 |         46 | South Lake Tahoe | El Dorado      |
| 2025-03-15 10:10:00.000 |          51 |         51 |         51 | Big Bear City    | San Bernardino |
| 2025-03-15 10:10:00.000 |          52 |         52 |         52 | South Lake Tahoe | El Dorado      |
| 2025-03-15 10:15:00.000 |        NULL |         54 |         51 | Big Bear City    | San Bernardino |
| 2025-03-15 10:15:00.000 |          54 |         54 |         54 | South Lake Tahoe | El Dorado      |
| 2025-03-15 10:18:00.000 |          54 |         54 |         54 | Big Bear City    | San Bernardino |
+-------------------------+-------------+------------+------------+------------------+----------------+

bfill_temp 열은 모든 행에 대해 의미 있는 값을 반환하지만, ``ffill_temp``는 첫 번째 행에 대해 NULL을 반환합니다. INTERPOLATE_FFILL 함수가 NULL 이외의 결과를 반환하려면 이전 값이 필요합니다. INTERPOLATE_BFILL 함수에는 다음 값만 필요합니다.

명시적 윈도우 프레임에 대해 예상되는 오류의 예제

보간 함수는 명시적 윈도우 프레임을 지원하지 않으므로 다음 쿼리는 오류를 반환합니다.

SELECT observed, temperature,
    INTERPOLATE_BFILL(temperature)
      OVER (PARTITION BY city, county ORDER BY observed ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) bfill_temp,
    city, county
  FROM march_temps_every_five_mins
  ORDER BY observed;
Copy
002303 (0A000): SQL compilation error: error line 1 at position 111
Sliding window frame unsupported for function INTERPOLATE_BFILL