跳到主要内容

缺失数据补值

TDengine TSDB(从 v3.3.7.7 版本开始)提供基于时序基础模型的缺失数据补值功能,根据时间戳自动检测缺失的时序数据点位。

要求作为输入的时序数据时间戳必须严格等间隔。由于生产环境中的时序数据,通常不能确保时间间隔严格相等,针对时间戳差异较大的时序数据,建议首先进行窗口聚合,然后再进行缺失聚合窗口的数据补值。

时间戳差异较小的情况下,可以使用 timetruncate 函数将时间戳截断后进行缺失数据补值。如果输入数据时间戳是连续的且严格等间隔(即无缺失数据),该函数将直接返回。

例如:

--- 使用缺失数据自动补值函数对缺失的窗口聚集函数结果进行补值操作
SELECT imputation(col_val)
FROM (SELECT _wstart, min(val) col_val FROM foo INTERVAL(1s));

---- 以下是针对对齐数据时间戳以后对基础缺失数据进行补齐
SELECT imputation(col_val)
FROM (SELECT timetruncate(val) from foo);

语法

IMPUTATION(column_name, option_expr)

option_expr: {"
algo=expr1
[,wncheck=1|0]
[,expr2]
"}
  1. column_name:时序数据补齐的输入数据列,当前只支持单列,且只能是数值类型,不能是字符类型(例如:NCHARVARCHARVARBINARY 等)。
  2. options:字符串,输入异常检测算法及算法相关参数。采用逗号分隔的 K=V 字符串表示,字符串不需使用单引号、双引号、或转义号等符号,不能使用中文及其他宽字符。例如:algo=moment 表示补齐操作调用的时序模型是 moment,同时无其他其它参数。
  3. 自动补齐的结果可以作为外层查询的子查询输入,在 SELECT 子句中使用的聚合函数或标量函数与其他类型的窗口查询相同。
  4. 输入数据默认进行白噪声检查,如果输入数据是白噪声,将返回错误。

参数说明

参数含义默认值
algo自动补齐调用的算法moment
wncheck对输入数据列是否进行白噪声检查,取值为 0 或 11
freq作为输入的时序数据标准频率,即多长时间一条记录秒 (s)
  1. 当前只支持使用 moment 时序模型提供自动补齐服务。
  2. 确保正确部署 moment 时序基础模型,请参考 部署时序基础模型 操作步骤。
  3. freq 可选参数:d(天)、h(小时)、m(分钟)、s(秒)、ms(毫秒)、us(微秒)。3.3.8.7 之前的版本不支持在时间单位前面添加数字,例如:3s, 12h。默认值是 s(秒),请设置正确的 freq,错误的 freq 会影响时间序列完整性的判断从而返回错误的结果。
  4. freq 用户指定的时间间隔,不能大于输入时序数据的间隔,否则会返回错误的计算结果。
  5. 自动检测时间戳分辨率,与查询数据所属数据库的时间精度相同。用户无需指定时序数据的时间分辨率。
  6. 每次自动补齐的数据记录上限为 2048,对于一个输入时间序列,最多一次填补 2048 条丢失的记录,过多的缺失记录会返回错误。每次输入数据最少 10 条记录,最多 8192 条记录。

伪列

从 v3.3.8.7 版本开始,增加伪列 _improwts,显示对应数据的时间戳信息。

示例

--- 使用 moment 时序模型提供自动补齐服务,针对 i32 列进行补齐操作,freq 参数为秒,同时输出时间戳和数值
SELECT _improwts, imputation(i32, 'algo=moment, freq=s')
FROM foo;