在工业物联网场景中,时序数据往往存在缺失或量级过大导致展示困难。Apache IoTDB 提供了 FILL 子句处理空值,以及 LIMIT/SLIMIT 子句进行分页控制,这两项功能对实际开发至关重要。
结果集补空值——FILL 子句
当查询结果中出现空值时,直接可视化会中断趋势线。IoTDB 允许通过 FILL 子句指定填充策略,作用于结果集的全部列。
语法结构如下:
FILL ('PREVIOUS' | 'LINEAR' | constant)
注意:Fill 语句中只能指定一种填充方法,且不支持 0.13 版本及以前的旧语法。对于数据类型不支持指定填充方法的列,系统不会报错,仅保持原样。
目前支持三种填充方式:
1. PREVIOUS(前值填充) 使用当前列前一个非空值进行填充。若结果集第一行即为空,则直到遇到第一个非空值前均不填充。此外,可指定时间间隔阈值,若当前空值与前一个非空值的时间戳间隔超过该阈值,则跳过填充。
示例:使用前值填充并限制最大间隔为 2 分钟。
SELECT AVG(s1) FROM root.db.d1
GROUP BY ([2023-11-08T16:40:00.008+08:00,2023-11-08T16:50:00.008+08:00),1m)
FILL(PREVIOUS, 2m);
2. LINEAR(线性插值) 使用前一个非空值和下一个非空值的线性插值进行填充。如果某值之前或之后所有值都为空,则该值不会被填充。Boolean 和 Text 类型不支持此操作。
示例:
SELECT temperature, status FROM root.sgcc.wf03.wt01
WHERE time >= 2017-11-01T16:37:00.000 AND time T16::
FILL(LINEAR);


