- 类别:
:doc:`/sql-reference/functions-window`(通用)
INTERPOLATE_BFILL、INTERPOLATE_FFILL、INTERPOLATE_LINEAR¶
更新时间序列数据集中的行,以根据周围值填充缺失值。
您可以调用以下插值窗口函数:
INTERPOLATE_BFILL:选择使用 时默认使用的角色和仓库。基于下一个观测到的行填充空缺行。
INTERPOLATE_FFILL:选择使用 时默认使用的角色和仓库。基于上一个观测到的行填充空缺行。
INTERPOLATE_LINEAR:选择使用 时默认使用的角色和仓库。基于前后值的线性插值填充空缺行。此函数仅支持数值。
这些函数具有相同的 窗口函数语法。它们不支持显式窗口框架。
语法¶
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 } ] )
实参¶
expr
定义要填充空缺的列的表达式。
INTERPOLATE_LINEAR 输入表达式必须是数字数据类型。
INTERPOLATE_BFILL 和 INTERPOLATE_FFILL 输入表达式不支持 地理空间数据类型。
参数¶
OVER
标准窗口功能 OVER 子句。请参阅 窗口函数的语法和用法。对于插值函数,PARTITIONBY 子句是可选的,但 ORDER BY 子句是必需的。您不能指定显式窗口框架。
INTERPOLATE_LINEAR 函数只能有一个 ORDER BY 表达式,并且必须是数字、DATE、或 TIMESTAMP 表达式(包括所有 TIMESTAMP 变体)。
返回¶
这些函数返回的数据类型与输入表达式的数据类型相同。
示例¶
以下示例显示如何在简单查询中使用插值函数。
包含两个插值函数的示例¶
以下示例返回同一个查询中的重采样 temperature
值和两种不同的插值 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