Kategorien:

Fensterfunktionen (Allgemein)

INTERPOLATE_BFILL, INTERPOLATE_FFILL, INTERPOLATE_LINEAR

Aktualisiert Zeilen in einem Zeitreihen-Datenset, um fehlende Werte basierend auf umgebenden Werten zu füllen.

Sie können die folgenden Fensterfunktionen für die Interpolation aufrufen:

  • INTERPOLATE_BFILL: Füllt Zeilen basierend auf der nächsten beobachteten Zeile auf.

  • INTERPOLATE_FFILL: Füllt Zeilen basierend auf der zuvor beobachteten Zeile auf.

  • INTERPOLATE_LINEAR: Füllt Zeilen basierend auf der linearen Interpolation der vorherigen und nächsten Werte auf. Diese Funktion unterstützt nur numerische Werte.

Diese Funktionen weisen die gleiche Syntax für die Fensterfunktion auf. Sie unterstützen keine expliziten Fensterrahmen.

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

Argumente

expr

Ein Ausdruck, der die Spalte definiert, die eine Lücke füllen soll.

Der Eingabeausdruck INTERPOLATE_LINEAR muss ein numerischer Datentyp sein.

Die Eingabeausdrücke INTERPOLATE_BFILL und INTERPOLATE_FFILL unterstützen nicht Datentypen für Geodaten.

Parameter

OVER

OVER-Klausel der Standard-Fensterfunktion. Siehe Syntax und Verwendung von Fensterfunktionen. Für die Interpolationsfunktionen ist die PARTITION BY-Klausel optional, aber die ORDER BY-Klausel ist erforderlich. Sie können keinen expliziten Fensterrahmen angeben.

Die INTERPOLATE_LINEAR-Funktion kann nur einenORDER BY-Ausdruck haben, und es muss sich um einen numerischen, DATE- oder TIMESTAMP-Ausdruck (einschließlich aller TIMESTAMP-Varianten) handeln.

Rückgabewerte

Diese Funktionen geben den gleichen Datentyp zurück wie der Datentyp des Eingabeausdrucks.

Beispiele

Die folgenden Beispiele zeigen, wie Sie die Interpolationsfunktionen in einfachen Abfragen verwenden können.

Beispiel mit zwei Interpolationsfunktionen

Das folgende Beispiel gibt neu gesampelte``temperature``-Werte und zwei verschiedene interpolierte temperature-Werte in derselben Abfrage zurück. (Die Tabelle march_temps_every_five_mins wurde weiter oben unter diesem Thema erstellt).

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

Die Spalte bfill_temp gibt für jede Zeile einen aussagekräftigen Wert zurück, aber ffill_temp gibt NULL für die erste Zeile zurück. Die INTERPOLATE_FFILL-Funktion erfordert einen vorherigen Wert, um ein Ergebnis ungleich NULL zurückzugeben. Die INTERPOLATE_BFILL-Funktion erfordert nur einen nächsten Wert.

Beispiel für einen erwarteten Fehler bei einem expliziten Fensterrahmen

Die folgende Abfrage gibt einen Fehler zurück, da die Interpolationsfunktionen keine expliziten Fensterrahmen unterstützen:

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