- カテゴリ:
ウィンドウ関数 (一般)
INTERPOLATE_BFILL、INTERPOLATE_FFILL、INTERPOLATE_LINEAR¶
時系列データセットの行を更新し、周辺の値に基づいて欠損値のギャップを埋めます。
次の補間ウィンドウ関数を呼び出すことができます。
INTERPOLATE_BFILL:次の監視された行に基づいて行のギャップを埋めます。
INTERPOLATE_FFILL:以前に観察された行に基づいて行のギャップを埋めます。
INTERPOLATE_LINEAR:前の値と次の値の線形補間に基づいて行のギャップを埋めます。この関数は数値のみをサポートします。
これらの関数には同じ ウィンドウ関数構文 があります。明示的なウィンドウフレームはサポートしていません。
構文¶
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 } ] )
引数¶
exprギャップを埋めたい列を定義する式。
INTERPOLATE_LINEAR 入力式は数値データ型である必要があります。
INTERPOLATE_BFILL および INTERPOLATE_FFILL 入力式は 地理空間データ型 をサポートしていません。
パラメーター¶
OVER標準ウィンドウ関数 OVER 句。ウィンドウ関数の構文と使用法 をご参照ください。補間関数の場合、PARTITIONBY 句はオプションですが、ORDERBY 句は必須です。明示的なウィンドウフレームを指定することはできません。
INTERPOLATE_LINEAR 関数は1つの ORDERBY 式のみを持つことができ、それは数値、DATE または TIMESTAMP 式(すべての TIMESTAMP バリアントを含む)でなければなりません。
戻り値¶
これらの関数は、入力式のデータ型と同じデータ型を返します。
使用上の注意¶
INTERPOLATE ウィンドウ関数と RESAMPLE 句を使用する場合は、パーティション化する列をPARTITION BY句の両方に含めます。RESAMPLE(PARTITION BY)および INTERPOLATE(PARTITION BY)。このアプローチにより、次が確実になります。
RESAMPLEは、パーティション列に非NULL値の行を生成します。
INTERPOLATE関数は、正しいパーティション内で動作します。
任意のWHERE句フィルターは、保持するパーティションの生成された行を保持します。
INTERPOLATEとRESAMPLEの使用例については、 時系列データのギャップを埋める をご参照ください。
例¶
次の例では、単純なクエリで補間関数を使用する方法を示します。
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;
+-------------------------+-------------+------------+------------+------------------+----------------+
| 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