TDengine 聚合函数 SPREAD 用户手册
SPREAD 函数用户手册
1. 函数概述
SPREAD
是 TDengine 的聚合函数,用于计算数值列的极差(最大值与最小值的差值)。该函数能够快速反映数据的分布范围和波动幅度,在智能电表监控中常用于分析电压、电流、功率等参数的波动程度。
2. 语法
SELECT SPREAD(column_name) FROM meters [WHERE condition];
-- 或用于窗口聚合
SELECT SPREAD(column_name) FROM meters [WHERE condition] INTERVAL(window_size);
column_name
:需要计算极差的字段,必须为数值类型或时间戳类型meters
:智能电表超级表名condition
:可选,筛选数据的条件window_size
:如1h
、1d
,窗口聚合单位
3. 计算原理
SPREAD = MAX(column) - MIN(column)
SPREAD 函数通过计算数据集中的最大值和最小值的差来反映数据的分布范围。
4. 参数说明
- 支持数据类型:数值类型(TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、UTINYINT、USMALLINT、UINT、UBIGINT)和时间戳类型
- 返回值类型:DOUBLE
- NULL 值处理:自动忽略 NULL 值
- 特殊情况:如果所有值都为 NULL,返回 NULL
5. 为什么使用 SPREAD 函数?
- 波动分析:快速了解数据的分布范围
- 稳定性评估:SPREAD 值越小,数据越稳定
- 异常检测:SPREAD 值异常增大可能表示存在异常数据
- 质量监控:评估电力系统的稳定性和可靠性
6. 智能电表应用场景
基于智能电表数据库结构:
CREATE TABLE meters (ts TIMESTAMP,voltage FLOAT,current FLOAT,power FLOAT
) TAGS (groupid INT,location VARCHAR(50)
);
6.1 基础电压范围分析
-- 计算所有电表电压的分布范围
SELECT SPREAD(voltage) AS voltage_range FROM meters;-- 计算电流的分布范围
SELECT SPREAD(current) AS current_range FROM meters;-- 计算功率的分布范围
SELECT SPREAD(power) AS power_range FROM meters;
6.2 按区域分析电力参数范围
-- 按地区分析电压波动范围
SELECT location,SPREAD(voltage) AS voltage_spread,MIN(voltage) AS min_voltage,MAX(voltage) AS max_voltage,AVG(voltage) AS avg_voltage
FROM meters
GROUP BY location;
6.3 按设备组分析
-- 按设备组分析电流波动范围
SELECT groupid,location,SPREAD(current) AS current_spread,COUNT(*) AS measurement_count
FROM meters
GROUP BY groupid, location;
6.4 时间窗口内的波动分析
-- 每小时电压波动范围
SELECT SPREAD(voltage) AS hourly_voltage_spread,MIN(voltage) AS hourly_min_voltage,MAX(voltage) AS hourly_max_voltage
FROM meters
INTERVAL(1h);-- 每日功率波动范围
SELECT SPREAD(power) AS daily_power_spread,AVG(power) AS daily_avg_power
FROM meters
INTERVAL(1d);
6.5 电网质量监控
-- 监控电压质量(每10分钟统计)
SELECT location,SPREAD(voltage) AS voltage_spread
FROM meters
WHERE ts >= NOW() - 24h
INTERVAL(10m)
GROUP BY location;
6.6 设备稳定性评估
-- 评估设备运行稳定性
SELECT location,groupid,SPREAD(voltage) AS voltage_stability,SPREAD(current) AS current_stability,SPREAD(power) AS power_stability,CASE WHEN SPREAD(voltage) < 5.0 AND SPREAD(current) < 2.0 THEN '运行稳定'WHEN SPREAD(voltage) < 10.0 AND SPREAD(current) < 5.0 THEN '运行正常'ELSE '波动较大'END AS stability_status
FROM meters
WHERE ts >= NOW() - 7d
GROUP BY location, groupid;
6.7 异常波动检测
-- 检测电压波动异常的设备组
SELECT groupid,location,SPREAD(voltage) AS voltage_spread,COUNT(*) AS sample_count
FROM (SELECT groupid,location,SPREAD(voltage) AS voltage_spread,COUNT(*) AS sample_countFROM meters WHERE ts >= NOW() - 1hGROUP BY groupid, location
)
WHERE voltage_spread > 15.0;
6.8 负载波动分析
-- 分析不同时段的负载波动
-- 白天时段(使用具体时间范围)
SELECT location,SPREAD(power) AS daytime_power_spread,AVG(power) AS daytime_avg_power
FROM meters
WHERE ts >= '2024-09-22 06:00:00' AND ts < '2024-09-22 18:00:00'
GROUP BY location;-- 夜间时段
SELECT location,SPREAD(power) AS nighttime_power_spread,AVG(power) AS nighttime_avg_power
FROM meters
WHERE ts >= '2024-09-22 19:00:00' AND ts <= '2024-09-22 23:59:59'
GROUP BY location;
6.9 电力参数相关性分析
-- 分析电压、电流、功率的波动关系
SELECT location,SPREAD(voltage) AS voltage_spread,SPREAD(current) AS current_spread,SPREAD(power) AS power_spread,SPREAD(voltage) / AVG(voltage) * 100 AS voltage_cv_percent,SPREAD(current) / AVG(current) * 100 AS current_cv_percent
FROM meters
WHERE ts >= NOW() - 24h
GROUP BY location;
6.10 按分区统计设备波动情况
-- 统计每个设备的波动情况
SELECT location,groupid,SPREAD(voltage) AS voltage_range,SPREAD(current) AS current_range,SPREAD(power) AS power_range
FROM meters
WHERE ts >= NOW() - 7d
PARTITION BY location, groupid;
7. 实际应用价值
7.1 电网运维
- 电压质量监控:SPREAD 值可以反映电压稳定性
- 设备健康评估:波动范围异常可能表示设备故障
- 负载平衡:分析不同区域的负载分布差异
7.2 能效优化
- 用电模式分析:了解不同时段的用电波动特征
- 节能效果评估:对比节能措施前后的波动变化
7.3 故障预警
- 异常检测:SPREAD 值突然增大可能预示故障
- 趋势监控:长期波动趋势分析
8. 性能优化建议
8.1 时间范围限制
-- 推荐:指定时间范围
SELECT SPREAD(voltage) FROM meters
WHERE ts >= NOW() - 24h;-- 避免:无条件全表统计
SELECT SPREAD(voltage) FROM meters;
8.2 合理使用分组
-- 推荐:按标签分组
SELECT location,SPREAD(voltage) AS voltage_spread
FROM meters
WHERE ts >= NOW() - 24h
GROUP BY location;
9. 注意事项
- 数据类型:仅支持数值类型和时间戳类型
- 返回值:始终返回 DOUBLE 类型
- NULL 值:自动忽略,不影响计算结果
- 最小数据量:至少需要一个有效数值
- 时间范围:建议合理设置时间范围以提升性能
- 窗口聚合:支持 INTERVAL 时间窗口聚合
- 分区支持:支持 PARTITION BY 子句
SPREAD 函数提供了最直观的数据分布范围信息,是评估智能电表数据稳定性的重要工具。通过合理使用该函数,可以有效监控电力系统的运行状态,及时发现异常情况。
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。