- 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 } ] )
INTERPOLATE_FFILL( <expr> )
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
INTERPOLATE_LINEAR( <expr> )
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
Argumentos¶
exprUma 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¶
OVERClá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;
+-------------------------+-------------+------------+------------+------------------+----------------+
| 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;
002303 (0A000): SQL compilation error: error line 1 at position 111
Sliding window frame unsupported for function INTERPOLATE_BFILL