TDengine 聚合函数 LEASTSQUARES 用户手册
其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。通过合理使用 LEASTSQUARES 函数,可以有效地进
·
LEASTSQUARES 函数用户手册
函数定义
LEASTSQUARES(expr, start_val, step_val)
功能说明
LEASTSQUARES()
函数对指定列的数据进行最小二乘法线性拟合,返回拟合直线的斜率(slope)和截距(intercept)。该函数基于线性回归算法,计算最佳拟合直线 y = ax + b 的参数。
版本要求
- 最低版本: v3.0.0.0
返回值
- 数据类型: VARCHAR
- 返回内容: JSON格式字符串,包含斜率和截距
- 格式:
{"slop":斜率值, "intercept":截距值}
参数说明
参数 | 类型 | 说明 | 取值范围 |
---|---|---|---|
expr | 表达式 | 要进行线性拟合的数值字段 | 数值类型 |
start_val | 数值 | X轴起始值 | 数值类型 |
step_val | 数值 | X轴步长值 | 数值类型,不能为0 |
适用数据类型
LEASTSQUARES 函数支持以下数据类型:
- 数值类型: TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、UTINYINT、USMALLINT、UINT、UBIGINT
- NULL 值处理: 自动跳过 NULL 值
适用范围
- 表类型: 表和超级表
- 查询支持: 支持聚合查询
- 函数特性: 聚合函数、跳过 NULL 值
- 限制: 不支持 GROUP BY 查询、不支持窗口查询
智能电表场景应用示例
基于智能电表数据库结构:
-- 数据库和表结构
USE test;
-- meters 超级表包含 ts, current, voltage, phase 字段和 location, groupid 标签
基础用法示例
电流趋势分析
-- 分析电流数据的线性趋势(以时间序列为X轴)
SELECT LEASTSQUARES(current, 1, 1) as current_trend FROM meters;
-- 分析电压数据的线性趋势
SELECT LEASTSQUARES(voltage, 0, 2) as voltage_trend FROM meters;
-- 分析相位数据的线性趋势
SELECT LEASTSQUARES(phase, 0, 0.5) as phase_trend FROM meters;
设备性能退化分析
单设备趋势分析
-- 分析特定设备的电流退化趋势
SELECT LEASTSQUARES(current, 1, 1) as degradation_trend
FROM meters
WHERE tbname = 'd1001';
-- 分析特定设备的电压稳定性趋势
SELECT LEASTSQUARES(voltage, 0, 1) as voltage_stability
FROM meters
WHERE tbname = 'd1001';
时间段内趋势分析
-- 分析最近一周的电流变化趋势
SELECT LEASTSQUARES(current, 1, 1) as weekly_current_trend
FROM meters
WHERE ts >= NOW() - 7d;
-- 分析最近24小时的电压变化趋势
SELECT LEASTSQUARES(voltage, 0, 0.1) as daily_voltage_trend
FROM meters
WHERE ts >= NOW() - 1d;
负载预测分析
功耗趋势预测
-- 基于历史数据预测功耗趋势
SELECT LEASTSQUARES(current, 0, 1) as power_consumption_trend
FROM meters
WHERE ts >= NOW() - 30d;
-- 分析不同时间粒度的功耗变化
SELECT LEASTSQUARES(current, 1, 0.5) as fine_grained_trend
FROM meters
WHERE ts >= NOW() - 7d;
设备效率分析
-- 分析设备效率变化趋势(基于电流-电压关系)
SELECT LEASTSQUARES(current, 100, 10) as efficiency_trend
FROM meters
WHERE voltage > 200 AND voltage < 250;
区域电网分析
特定区域趋势
-- 分析北京地区的用电趋势
SELECT LEASTSQUARES(current, 0, 1) as beijing_usage_trend
FROM meters
WHERE location = 'Beijing';
-- 分析上海地区的电压质量趋势
SELECT LEASTSQUARES(voltage, 220, 1) as shanghai_voltage_trend
FROM meters
WHERE location = 'Shanghai';
工作日vs周末趋势对比
-- 分析工作日用电趋势
-- 分析周末用电趋势
SELECT LEASTSQUARES(current, 1, 1) as weekend_trend
FROM meters
WHERE WEEKDAY(ts) IN (6, 0);
异常检测应用
设备老化检测
-- 检测设备电流输出的线性衰减
SELECT LEASTSQUARES(current, 0, 1) as aging_trend
FROM meters
WHERE tbname = 'd1001' AND ts >= NOW() - 90d;
-- 检测电压稳定性衰减
SELECT LEASTSQUARES(voltage, 220, 0.1) as voltage_degradation
FROM meters
WHERE tbname = 'd1001' AND ts >= NOW() - 30d;
负载异常趋势
-- 检测异常负载增长趋势
SELECT LEASTSQUARES(current, 0, 1) as load_growth_trend
FROM meters
WHERE current > 20 AND ts >= NOW() - 14d;
能耗优化分析
季节性趋势分析
-- 分析春季用电趋势
SELECT LEASTSQUARES(current, 1, 1) as spring_trend
FROM meters
WHERE MONTH(ts) IN (3, 4, 5);
-- 分析夏季用电趋势
SELECT LEASTSQUARES(current, 1, 1) as summer_trend
FROM meters
WHERE MONTH(ts) IN (6, 7, 8);
时段用电模式
-- 分析白天用电趋势(6:00-18:00)
SELECT LEASTSQUARES(current, 6, 1) as daytime_trend
FROM meters
WHERE HOUR(ts) BETWEEN 6 AND 18;
-- 分析夜间用电趋势(19:00-5:00)
SELECT LEASTSQUARES(current, 19, 1) as nighttime_trend
FROM meters
WHERE HOUR(ts) >= 19 OR HOUR(ts) <= 5;
实际应用场景
设备维护预测
-- 预测设备维护需求(基于性能衰减趋势)
SELECT LEASTSQUARES(current, 0, 0.1) as maintenance_prediction
FROM meters
WHERE tbname = 'd1001' AND ts >= NOW() - 180d;
电网负载规划
-- 为电网扩容提供趋势数据
SELECT LEASTSQUARES(current, 0, 1) as grid_expansion_trend
FROM meters
WHERE ts >= NOW() - 365d;
能效评估
-- 评估节能措施效果
SELECT LEASTSQUARES(current, 0, 1) as energy_saving_effect
FROM meters
WHERE ts >= '2024-01-01' AND ts < '2024-04-01';
结果解释示例
假设查询结果为:{"slop":-0.001234, "intercept":12.500000}
- 斜率(slope): -0.001234,表示每个时间步长,数值平均下降 0.001234 个单位
- 截距(intercept): 12.5,表示在 X=0 时的预测 Y 值为 12.5
趋势判断
-- 基于斜率判断趋势类型
-- 正斜率:上升趋势
-- 负斜率:下降趋势
-- 接近0:稳定趋势
-- 示例:判断设备性能趋势
SELECT
CASE
WHEN LEASTSQUARES(current, 0, 1) LIKE '%"slop":-%' THEN '性能下降趋势'
WHEN LEASTSQUARES(current, 0, 1) LIKE '%"slop":0.%' THEN '性能稳定'
ELSE '性能上升趋势'
END as performance_trend
FROM meters
WHERE tbname = 'd1001';
参数配置建议
start_val 选择
- 时间序列分析: 通常设为 0 或 1
- 基于实际值: 设为数据范围的起始值
- 归一化分析: 设为 0 便于比较
step_val 选择
- 精细分析: 使用较小步长(如 0.1, 0.5)
- 粗略趋势: 使用较大步长(如 1, 10)
- 数据密度: 根据数据点密度调整
注意事项
- NULL 值处理: 函数自动跳过 NULL 值
- 参数限制: step_val 不能为 0
- 数据要求: 至少需要 2 个有效数据点
- 精度控制:
- 斜率精度:默认保留 6 位小数
- 截距精度:默认保留 6 位小数
- 结果格式: 返回 JSON 格式字符串
- 性能考虑: 大数据集建议配合时间范围过滤
- 不支持的查询:
- 不支持 GROUP BY 查询
- 不支持 INTERVAL 窗口查询
- 不支持函数嵌套
相关函数
- AVG(): 计算平均值
- STDDEV(): 计算标准差
- SPREAD(): 计算极差
- TWA(): 时间加权平均
通过合理使用 LEASTSQUARES 函数,可以有效地进行智能电表数据的趋势分析和预测,为电力系统的预测性维护和负载规划提供重要的数据支撑。
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。
更多推荐
所有评论(0)