Catégories :

Fonctions de fenêtre (Général)

INTERPOLATE_BFILL, INTERPOLATE_FFILL, INTERPOLATE_LINEAR

Met à jour les lignes d’un ensemble de données de séries chronologiques pour remplir les valeurs manquantes en fonction des valeurs environnantes.

Vous pouvez appeler les fonctions de fenêtre d’interpolation suivantes :

  • INTERPOLATE_BFILL : Remplissez les lignes en fonction de la ligne suivante observée.

  • INTERPOLATE_FFILL : Remplissez les lignes en fonction de la ligne précédente observée.

  • INTERPOLATE_LINEAR : Remplissez les lignes en fonction de l’interpolation linéaire des valeurs précédentes et suivantes. Cette fonction ne prend en charge que les valeurs numériques.

Ces fonctions ont la même syntaxe de fonction de fenêtre. Elles ne prennent pas en charge les cadres de fenêtres explicites.

Syntaxe

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

Arguments

expr

Expression qui définit la colonne que vous souhaitez remplir.

L’expression d’entrée INTERPOLATE_LINEAR doit être un type de données numérique.

Les expressions d’entrée INTERPOLATE_BFILL et INTERPOLATE_FFILL ne prennent pas en charge les types de données géospatiales.

Paramètres

OVER

Clause OVER de fonction de fenêtre standard. Voir Syntaxe et utilisation des fonctions de fenêtre. Pour les fonctions d’interpolation, la clause PARTITION BY est facultative, mais la clause ORDER BY est obligatoire. Vous ne pouvez pas spécifier un cadre de fenêtre explicite.

La fonction INTERPOLATE_LINEAR ne peut avoir qu’une seule expression ORDER BY, et doit être une expression numérique, DATE, ou TIMESTAMP (y compris toutes les variantes TIMESTAMP).

Renvoie

Ces fonctions renvoient le même type de données que le type de données de l’expression d’entrée.

Exemples

Les exemples suivants montrent comment utiliser les fonctions d’interpolation dans des requêtes simples.

Exemple avec deux fonctions d’interpolation

L’exemple suivant renvoie des valeurs temperature rééchantillonnées et deux valeurs temperature interpolées dans la même requête. (La table march_temps_every_five_mins a été créée plus tôt dans cette rubrique).

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 |
+-------------------------+-------------+------------+------------+------------------+----------------+

La colonne bfill_temp renvoie une valeur significative pour chaque ligne, mais ffill_temp renvoie NULL pour la première ligne. La fonction INTERPOLATE_FFILL requiert une valeur précédente pour renvoyer un résultat non NULL. La fonction INTERPOLATE_BFILL ne nécessite qu’une valeur suivante.

Exemple d’une erreur attendue pour un cadre de fenêtre explicite

La requête suivante renvoie une erreur car les fonctions d’interpolation ne prennent pas en charge les cadres de fenêtres explicites :

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