TDengine 聚合函数 SPREAD 用户手册

SPREAD 函数用户手册

1. 函数概述

SPREAD 是 TDengine 的聚合函数,用于计算数值列的极差(最大值与最小值的差值)。该函数能够快速反映数据的分布范围和波动幅度,在智能电表监控中常用于分析电压、电流、功率等参数的波动程度。

2. 语法

sql 复制代码
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:如 1h1d,窗口聚合单位

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. 智能电表应用场景

基于智能电表数据库结构:

sql 复制代码
CREATE TABLE meters (
    ts TIMESTAMP,
    voltage FLOAT,
    current FLOAT,
    power FLOAT
) TAGS (
    groupid INT,
    location VARCHAR(50)
);

6.1 基础电压范围分析

sql 复制代码
-- 计算所有电表电压的分布范围
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 按区域分析电力参数范围

sql 复制代码
-- 按地区分析电压波动范围
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 按设备组分析

sql 复制代码
-- 按设备组分析电流波动范围
SELECT 
    groupid,
    location,
    SPREAD(current) AS current_spread,
    COUNT(*) AS measurement_count
FROM meters 
GROUP BY groupid, location;

6.4 时间窗口内的波动分析

sql 复制代码
-- 每小时电压波动范围
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 电网质量监控

sql 复制代码
-- 监控电压质量(每10分钟统计)
SELECT 
    location,
    SPREAD(voltage) AS voltage_spread
FROM meters 
WHERE ts >= NOW() - 24h
INTERVAL(10m) 
GROUP BY location;

6.6 设备稳定性评估

sql 复制代码
-- 评估设备运行稳定性
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 异常波动检测

sql 复制代码
-- 检测电压波动异常的设备组
SELECT 
    groupid,
    location,
    SPREAD(voltage) AS voltage_spread,
    COUNT(*) AS sample_count
FROM (
    SELECT 
        groupid,
        location,
        SPREAD(voltage) AS voltage_spread,
        COUNT(*) AS sample_count
    FROM meters 
    WHERE ts >= NOW() - 1h
    GROUP BY groupid, location
) 
WHERE voltage_spread > 15.0;

6.8 负载波动分析

sql 复制代码
-- 分析不同时段的负载波动
-- 白天时段(使用具体时间范围)
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 电力参数相关性分析

sql 复制代码
-- 分析电压、电流、功率的波动关系
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 按分区统计设备波动情况

sql 复制代码
-- 统计每个设备的波动情况
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 时间范围限制

sql 复制代码
-- 推荐:指定时间范围
SELECT SPREAD(voltage) FROM meters 
WHERE ts >= NOW() - 24h;

-- 避免:无条件全表统计
SELECT SPREAD(voltage) FROM meters;

8.2 合理使用分组

sql 复制代码
-- 推荐:按标签分组
SELECT 
    location,
    SPREAD(voltage) AS voltage_spread
FROM meters 
WHERE ts >= NOW() - 24h
GROUP BY location;

9. 注意事项

  1. 数据类型:仅支持数值类型和时间戳类型
  2. 返回值:始终返回 DOUBLE 类型
  3. NULL 值:自动忽略,不影响计算结果
  4. 最小数据量:至少需要一个有效数值
  5. 时间范围:建议合理设置时间范围以提升性能
  6. 窗口聚合:支持 INTERVAL 时间窗口聚合
  7. 分区支持:支持 PARTITION BY 子句

SPREAD 函数提供了最直观的数据分布范围信息,是评估智能电表数据稳定性的重要工具。通过合理使用该函数,可以有效监控电力系统的运行状态,及时发现异常情况。

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
TDengine (老段)3 小时前
TDengine 时区配置问题全解
大数据·数据库·时序数据库·tdengine·涛思数据
海豚调度6 小时前
3.1.9 生产“稳”担当:Master 服务启动源码全方位解析
大数据·开源·任务调度·大数据调度·apache dolphinscheduler
xhload3d1 天前
核潜艇虚拟作战管控系统 | 图扑数字孪生
物联网·低代码·3d·智慧城市·数字孪生·三维可视化·可视化·工业互联网·工业组态·轻量化·智慧军事·智慧军用设备·核潜艇·军事科技
代码匠心1 天前
从零开始学Flink:数据转换的艺术
java·大数据·flink
IvorySQL2 天前
PostgreSQL 全表 count 优化实践:从 SeqScan 痛点分析到 heapam 改进与性能突破
数据库·postgresql·oracle·deepseek·ivorysql
ypf52083 天前
Docker 中安装 PostgreSQL 16
数据库
字节跳动数据平台4 天前
火山引擎多模态数据湖:基于 Daft 与 Lance,构筑 AI 时代数据湖新范式
数据结构·数据库·数据挖掘
倔强的石头_4 天前
零门槛体验国产数据库硬核实力 —— 金仓 KingbaseES 在线体验平台全解析
数据库
武子康4 天前
大数据-102 Spark Streaming 与 Kafka 集成全解析:Receiver 与 Direct 两种方式详解 附代码案例
大数据·后端·spark