资讯动态

SonnetDB:平滑窗口的缺失值语义:moving_average() 与 ewma()

发布时间:2026/10/16 11:40:52 来源:尧图企业网站定制
本文介绍 SonnetDB 的 moving_average() 与 ewma()重点是窗口如何移动、缺失值如何参与以及参数与时间间隔的关系。平滑可以让趋势更容易观察但也可能压低短时尖峰。使用前应保留原始序列并用自己的报警目标评估响应延迟不能仅因为曲线更平滑就认定异常检测质量提高。moving_average 按最近 N 行移动moving_average(field, n)的 n 是正整数行数不是秒数也不是“最近 N 个有效值”。当前实现为每一行推进一个环形槽位缺失行会占用窗口位置但不计入平均数的分母。前 n-1 行输出 NULL。达到 n 行后如果最近 n 行中至少有一个有效数值就输出这些有效值的平均全缺失窗口输出 NULL。例如 n3输入 1、NULL、5 时第三行得到 (15)/23而不必等待第三个有效样本。下一行到来时最早一行照常退出窗口。这是按实现定义的手算示例。SELECTtime,temperature,moving_average(temperature,3)ASaverage_3_rows,ewma(temperature,0.3)ASweighted_valueFROMsensorsWHEREdevicethermo-05ANDtime1700000000000ANDtime1700003600000ORDERBYtime;示例假设 sensors 已有 device TAG 与 temperature FIELD FLOAT。ewma 的状态与缺失值ewma(field, alpha)按s alpha × 当前值 (1-alpha) × 上一平滑值更新alpha 取 (0,1]。首个有效值直接作为初始平滑值。缺失值不更新状态初始化前输出 NULL初始化后继续输出上一平滑值。alpha1 时有效行跟随当前值但缺失行仍保留已有状态不能将这一情形等同于无条件复制原始列。alpha 较大时当前值权重较高较小时历史权重衰减较慢。它不自动计算采样时间差同样的 alpha 在不同采样频率下代表不同的物理响应速度。选择参数时保留时间语义moving_average 的窗口按行数推进ewma 按有效样本更新两者都没有把时间戳用于时间加权。采样间距不齐时“最近 10 行”不等于“最近 10 秒”。需要先按时间分桶或明确缺口策略再比较平滑结果。从当前状态结构看移动平均保存与 n 成比例的窗口数据ewma 保存常数数量的平滑状态这是状态结构说明不是整个查询内存、吞吐或生产延迟的实测结论。本文依据 2026-10-15 当前源码复核SQL 为复现示例本轮未执行数据库、模型或性能测试。封面曲线仅说明平滑概念不是 SonnetDB 实测结果。依据SmoothingFunctions.cs 与 WindowFunctionBinder.cs。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑