カテゴリ:

ウィンドウ関数 (一般)

INTERPOLATE_BFILL、INTERPOLATE_FFILL、INTERPOLATE_LINEAR

時系列データセットの行を更新し、周辺の値に基づいて欠損値のギャップを埋めます。

次の補間ウィンドウ関数を呼び出すことができます。

  • INTERPOLATE_BFILL:次の監視された行に基づいて行のギャップを埋めます。

  • INTERPOLATE_FFILL:以前に観察された行に基づいて行のギャップを埋めます。

  • INTERPOLATE_LINEAR:前の値と次の値の線形補間に基づいて行のギャップを埋めます。この関数は数値のみをサポートします。

これらの関数には同じ ウィンドウ関数構文 があります。明示的なウィンドウフレームはサポートしていません。

構文

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 入力式は 地理空間データ型 をサポートしていません。

パラメーター

OVER

標準ウィンドウ関数 OVER 句。ウィンドウ関数の構文と使用法 をご参照ください。補間関数の場合、PARTITIONBY 句はオプションですが、ORDERBY 句は必須です。明示的なウィンドウフレームを指定することはできません。

INTERPOLATE_LINEAR 関数は1つの ORDERBY 式のみを持つことができ、それは数値、DATE または TIMESTAMP 式(すべての TIMESTAMP バリアントを含む)でなければなりません。

戻り値

これらの関数は、入力式のデータ型と同じデータ型を返します。

次の例では、単純なクエリで補間関数を使用する方法を示します。

2つの補間関数の例

次の例では、同じクエリ内の再サンプリングされた temperature 値と2つの異なる補間 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