填充数据中的空白
使用 date_bin_gapfill
和 interpolate
或 locf
来填充没有数据返回的时间空白。 填充空白的 SQL 查询通过使用插值或向前结转最后可用的观测值来处理时间序列数据中的缺失数据。
填充数据中的空白
使用 date_bin_gapfill
函数将您的数据窗口化为基于时间的组,并将聚合函数应用于每个窗口。 如果窗口中不存在数据,则 date_bin_gapfill
会插入一个新行,其中包含窗口的起始时间戳、填充了 GROUP BY
子句中的所有列,以及查询字段的空值。
使用 interpolate
或 locf
来填充指定列中插入的空值。
- interpolate:通过在非空值之间插值来填充空值。
- locf:通过向前结转最后观测到的值来填充空值。
传递给 interpolate
或 locf
的表达式必须使用聚合函数。
包含一个 WHERE
子句,用于设置时间和下限。 例如
WHERE time >= '2022-01-01T08:00:00Z' AND time <= '2022-01-01T10:00:00Z'
填充数据中空白的示例
以下示例使用InfluxDB 教程入门中提供的示例数据集,展示如何使用 date_bin_gapfill
以及 interplate
和 locf
的不同结果。
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
_time | room | AVG(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
_time | room | AVG(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 |
支持和反馈
感谢您成为我们社区的一份子! 我们欢迎并鼓励您提供关于 InfluxDB Clustered 和本文档的反馈和错误报告。 要查找支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。