Categorias:

Funções de janela (General)

INTERPOLATE_BFILL, INTERPOLATE_FFILL, INTERPOLATE_LINEAR

Atualiza linhas em um conjunto de dados de série temporal para preencher valores ausentes com base nos valores ao redor.

Você pode chamar as seguintes funções de janela de interpolação:

  • INTERPOLATE_BFILL: preenche linhas com base na próxima linha observada.

  • INTERPOLATE_FFILL: preenche linhas com base na linha observada anteriormente.

  • INTERPOLATE_LINEAR: preenche linhas com base na interpolação linear dos valores anteriores e seguintes. Essa função aceita apenas valores numéricos.

Essas funções têm a mesma sintaxe de função de janela. Elas não aceitam quadros de janela explícitos.

Sintaxe

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

Argumentos

expr

Uma expressão que define a coluna que você deseja preencher lacunas.

A expressão de entrada INTERPOLATE_LINEAR precisa ser um tipo de dado numérico.

As expressões de entrada INTERPOLATE_BFILL e INTERPOLATE_FFILL não aceitam tipos de dados geoespaciais.

Parâmetros

OVER

Cláusula OVER padrão da função de janela. Consulte Sintaxe e uso da função de janela. Para as funções de interpolação, a cláusula PARTITION BY é opcional, mas ORDER BY é obrigatória. Não é possível especificar um quadro de janela explícito.

A função INTERPOLATE_LINEAR pode ter apenas uma expressão ORDER BY, e ela deve ser uma expressão numérica, DATE ou TIMESTAMP (incluindo todas as variantes TIMESTAMP).

Retornos

Essas funções retornam o mesmo tipo de dados que o tipo de dados da expressão de entrada.

Exemplos

Os exemplos a seguir mostram como usar as funções de interpolação em consultas simples.

Exemplo com duas funções de interpolação

O exemplo a seguir retorna valores temperature reamostrados e dois valores temperature interpolados diferentes na mesma consulta (a tabela march_temps_every_five_mins foi criada anteriormente neste tópico).

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

A coluna bfill_temp retorna um valor significativo para cada linha, mas ffill_temp retorna NULL para a primeira linha. A função INTERPOLATE_FFILL requer um valor anterior para retornar um resultado diferente de NULL. A função INTERPOLATE_BFILL requer apenas um próximo valor.

Exemplo de erro esperado para um quadro de janela explícito

A consulta a seguir retorna um erro porque as funções de interpolação não oferecem suporte a quadros de janela explícitos:

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