文档

填充数据空缺

使用 date_bin_gapfillinterpolatelocf 来填充没有返回数据的时间间隔的空白。空白填充 SQL 查询通过用插值值填充间隔或通过携带最后一个可用观察值来处理时间序列数据中的缺失数据。

填充数据空白

  1. 使用 date_bin_gapfill 函数将数据窗口化为基于时间的组,并对每个窗口应用一个 聚合函数。如果一个窗口中没有数据,date_bin_gapfill 会插入一个新行,其中包含窗口的起始时间戳,在 GROUP BY 子句中填充所有列,以及对于查询字段使用空值。

  2. 使用 interpolatelocf 来填充指定列中的插入空值。

    • interpolate: 通过在非空值之间插值来填充空值。
    • locf: 通过将最后一个观察值向前传递来填充空值。

    传递给 interpolatelocf 的表达式必须使用一个 聚合函数

  3. 包含一个 WHERE 子句,设置时间上界和下界。例如

WHERE time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T10:00:00Z'

填充数据空白的示例

以下示例使用InfluxDB 入门教程中提供的示例数据集,以展示如何使用date_bin_gapfill以及interplatelocf的不同结果。

SELECT
  date_bin_gapfill(INTERVAL '30 minutes', time) as _time,
  room,
  interpolate(avg(temp))
FROM home
WHERE
    time >= '2022-01-01T08:00:00Z'
    AND time <= '2022-01-01T10:00:00Z'
GROUP BY _time, room
_timeroomAVG(home.temp)
2022-01-01T08:00:00Z厨房21
2022-01-01T08:30:00Z厨房22
2022-01-01T09:00:00Z厨房23
2022-01-01T09:30:00Z厨房22.85
2022-01-01T10:00:00Z厨房22.7
2022-01-01T08:00:00Z客厅21.1
2022-01-01T08:30:00Z客厅21.25
2022-01-01T09:00:00Z客厅21.4
2022-01-01T09:30:00Z客厅21.6
2022-01-01T10:00:00Z客厅21.8
SELECT
  date_bin_gapfill(INTERVAL '30 minutes', time) as _time,
  room,
  locf(avg(temp))
FROM home
WHERE
    time >= '2022-01-01T08:00:00Z'
    AND time <= '2022-01-01T10:00:00Z'
GROUP BY _time, room
_timeroomAVG(home.temp)
2022-01-01T08:00:00Z厨房21
2022-01-01T08:30:00Z厨房21
2022-01-01T09:00:00Z厨房23
2022-01-01T09:30:00Z厨房23
2022-01-01T10:00:00Z厨房22.7
2022-01-01T08:00:00Z客厅21.1
2022-01-01T08:30:00Z客厅21.1
2022-01-01T09:00:00Z客厅21.4
2022-01-01T09:30:00Z客厅21.4
2022-01-01T10:00:00Z客厅21.8

这个页面有帮助吗?

感谢您的反馈!


Flux 的未来

Flux 正在进入维护模式。您可以继续按当前方式使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB v3 增强功能和 InfluxDB 集群现在已全面上市

新功能包括更快的查询性能和管理工具,进一步推进了 InfluxDB v3 产品线。InfluxDB 集群现在已全面上市。

InfluxDB v3 性能和功能

InfluxDB v3 产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强包括用于监控 InfluxDB 集群健康状况的操作仪表板,InfluxDB Cloud Dedicated 中的单点登录(SSO)支持,以及用于令牌和数据库的新管理 API。

了解新的 v3 增强


InfluxDB 集群全面上市

InfluxDB 集群现在已全面上市,并为您在自行管理的堆栈中提供了 InfluxDB v3 的功能。

与我们讨论 InfluxDB 集群