填充数据空缺
使用 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和此文档提供反馈和错误报告。要获取支持,请使用以下资源
拥有年度或支持合同的客户可以通过联系InfluxData 支持。