INTERPOLATE_BFILL, INTERPOLATE_FFILL, INTERPOLATE_LINEAR
INTERPOLATE_BFILL, INTERPOLATE_FFILL, INTERPOLATE_LINEAR
시계열 데이터 셋의 결측값을 주변 값으로 갭-필(gap-fill) 채워주는 윈도우 함수 계열이에요. 다음 값 기준(BFILL), 이전 값 기준(FFILL), 선형 보간(LINEAR) 세 가지 방식이 있어요.
출처: 공식 문서
본문
프리뷰 기능(Preview Feature) — 공개 (Open)
모든 계정에서 사용할 수 있습니다.
시계열 데이터 셋의 행들을 갱신하여 주변 값에 기반해 결측값을 갭-필합니다.
다음 보간 윈도우 함수들을 호출할 수 있습니다:
- INTERPOLATE_BFILL: 다음에 관찰된 행을 기준으로 갭-필합니다.
- INTERPOLATE_FFILL: 이전에 관찰된 행을 기준으로 갭-필합니다.
- INTERPOLATE_LINEAR: 이전 값과 다음 값의 선형 보간을 기준으로 갭-필합니다. 이 함수는 숫자 값만 지원합니다.
이 함수들은 동일한 윈도우 함수 구문을 가집니다. 명시적 윈도우 프레임은 지원하지 않습니다.
구문 (Syntax)
INTERPOLATE_BFILL( <expr> )
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] )
INTERPOLATE_FFILL( <expr> )
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] )
INTERPOLATE_LINEAR( <expr> )
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] )
인자 (Arguments)
expr
갭-필하려는 컬럼을 정의하는 표현식입니다.
- INTERPOLATE_LINEAR 입력 표현식은 숫자 데이터 타입이어야 합니다.
- INTERPOLATE_BFILL과 INTERPOLATE_FFILL 입력 표현식은 지리 공간 데이터 타입을 지원하지 않습니다.
매개변수 (Parameters)
OVER
표준 윈도우 함수 OVER 절입니다. 윈도우 함수 구문과 사용법을 참고하세요. 보간 함수의 경우 PARTITION BY 절은 선택적이지만 ORDER BY 절은 필수입니다. 명시적 윈도우 프레임은 지정할 수 없습니다.
- INTERPOLATE_LINEAR 함수는 ORDER BY 표현식을 하나만 가질 수 있으며, 그것은 숫자, DATE, 또는 TIMESTAMP 표현식(모든 TIMESTAMP 변형 포함)이어야 합니다.
반환값 (Returns)
이 함수들은 입력 표현식의 데이터 타입과 같은 데이터 타입을 반환합니다.
사용 참고 (Usage notes)
- INTERPOLATE 윈도우 함수를 RESAMPLE 절과 함께 사용할 때는, 분할할 컬럼을 두 PARTITION BY 절(RESAMPLE (PARTITION BY)와 INTERPOLATE (PARTITION BY)) 모두에 포함하세요. 이렇게 하면:
- RESAMPLE이 분할 컬럼에 대해 NULL이 아닌 값으로 행을 생성합니다.
- INTERPOLATE 함수가 올바른 파티션 안에서 동작합니다.
- WHERE 절 필터가 보존하려는 파티션의 생성된 행을 보존합니다.
INTERPOLATE와 RESAMPLE 사용 예는 Filling gaps in time-series data를 참고하세요.
예제 (Examples)
다음 예제들은 간단한 쿼리에서 보간 함수를 사용하는 방법을 보여줍니다.
두 보간 함수를 사용하는 예제
다음 예제는 같은 쿼리에서 리샘플된 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;
+-------------------------+-------------+------------+------------+------------------+----------------+
| 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;
002303 (0A000): SQL compilation error: error line 1 at position 111
Sliding window frame unsupported for function INTERPOLATE_BFILL