TDengine 时序函数 DERIVATIVE 用户手册

DERIVATIVE 函数用户手册(智能电表场景)

1. 函数概述

DERIVATIVE 是 TDengine 的时间序列分析函数,用于计算指定数值列在时间序列上的变化速率(即导数、斜率、增速)。它常用于分析电压、电流、功率等指标随时间的变化趋势,帮助发现突变、异常或趋势变化。

注意:

  • DERIVATIVE 只能用于数值类型字段(如 voltagecurrentpower)。
  • 超级表查询时,必须使用 PARTITION BY tbname,确保每个子表的时间线独立有序。
  • 不能用于字符串、时间戳等非数值类型。
  • 用于复合主键时,若时间戳相同的数据存在多条,则只有对应复合主键最小的数据参与运算。

2. 语法

sql 复制代码
-- 子表查询
SELECT ts, voltage, DERIVATIVE(voltage, interval, mode) FROM sub_table [WHERE condition] ORDER BY ts;

-- 超级表查询(必须分区)
SELECT tbname, ts, voltage, DERIVATIVE(voltage, interval, mode)
FROM super_table
[WHERE condition]
PARTITION BY tbname
ORDER BY tbname, ts;

参数说明

  • 第1个参数:数值列名(如 voltage、current、power)
  • 第2个参数:间隔(整数,单位为采样点数,最小为1,表示间隔 1s , 可以带时间单位,如 2h 表示 2 小时 )
  • 第3个参数:模式(0 或 1,0 表示普通差分,1 表示归一化到每秒的速率)

示例:

  • DERIVATIVE(voltage, 1, 0):计算相邻两点的差值(普通差分)
  • DERIVATIVE(voltage, 1, 1):计算相邻两点的每秒变化速率

3. 计算过程与返回值说明

3.1 计算过程

假设有如下数据(以电压为例):

ts voltage
2024-09-22 10:00:00 220.0
2024-09-22 10:01:00 221.0
2024-09-22 10:02:00 223.0
2024-09-22 10:03:00 222.5
普通差分(mode=0)
  • DERIVATIVE(voltage, 1, 0) = 当前值 - 上一个值
  • 第一行无前值,结果为 NULL
  • 第二行:221.0 - 220.0 = 1.0
  • 第三行:223.0 - 221.0 = 2.0
  • 第四行:222.5 - 223.0 = -0.5
归一化速率(mode=1)
  • DERIVATIVE(voltage, 1, 1) = (当前值 - 上一个值) / (当前时间 - 上一个时间,单位秒)
  • 假设采样间隔为60秒:
    • 第二行:(221.0 - 220.0) / 60 = 0.0167
    • 第三行:(223.0 - 221.0) / 60 = 0.0333
    • 第四行:(222.5 - 223.0) / 60 = -0.0083

3.2 返回值样式

  • 返回行数与输入数据行数一致
  • 第一行(或每个分区的第一行)返回 NULL
  • 其余行为计算结果,类型为 DOUBLE

示例结果:

ts voltage DERIVATIVE(voltage, 1, 0) DERIVATIVE(voltage, 1, 1)
2024-09-22 10:00:00 220.0 NULL NULL
2024-09-22 10:01:00 221.0 1.0 0.0167
2024-09-22 10:02:00 223.0 2.0 0.0333
2024-09-22 10:03:00 222.5 -0.5 -0.0083

4. 函数意义与应用场景

4.1 函数意义

  • 趋势分析:快速判断电压、电流、功率等指标的变化速度和方向
  • 异常检测:发现突变、跳变、异常波动(如电压骤升/骤降)
  • 设备健康监控:识别设备运行状态的异常变化
  • 能效分析:分析功率变化速率,辅助能耗优化

4.2 典型应用场景

1. 电压变化速率分析
sql 复制代码
-- 查询单个设备电压变化速率,间隔 3 分钟
SELECT ts, voltage, DERIVATIVE(voltage, 3m, 1) AS voltage_rate
FROM d001
ORDER BY ts;
2. 多设备电流突变检测
sql 复制代码
-- 超级表多设备,必须分区,间隔 2 小时
SELECT tbname, ts, current, DERIVATIVE(current, 2h, 0) AS current_diff
FROM meters
WHERE current IS NOT NULL
PARTITION BY tbname
ORDER BY tbname, ts;
3. 功率突变告警
sql 复制代码
-- 检查功率变化绝对值大于100的时刻
SELECT tbname, ts, power, DERIVATIVE(power, 1, 0) AS power_diff
FROM meters
WHERE ts >= NOW() - 1d
PARTITION BY tbname
ORDER BY tbname, ts;
-- 应用层可筛选 power_diff > 100 或 power_diff < -100
4. 电压变化速率趋势图
sql 复制代码
-- 取最近24小时电压变化速率
SELECT ts, voltage, DERIVATIVE(voltage, 1, 1) AS voltage_rate
FROM d001
WHERE ts >= NOW() - 24h
ORDER BY ts;

5. 使用注意事项

  • 超级表必须分区 :用 PARTITION BY tbname,否则结果混乱
  • 第一行结果为 NULL:每个分区的首行无前值,返回 NULL
  • 仅支持数值类型:不能用于字符串、时间戳等
  • 间隔参数:通常为1,表示相邻两点;可设为更大整数,表示跨多点差分

6. 常见错误示例

sql 复制代码
-- 错误:未分区
SELECT ts, voltage, DERIVATIVE(voltage, 1, 0) FROM meters ORDER BY ts;

-- 正确:分区
SELECT tbname, ts, voltage, DERIVATIVE(voltage, 1, 0) FROM meters PARTITION BY tbname ORDER BY tbname, ts;

-- 错误:用于字符串
SELECT DERIVATIVE(location, 1, 0) FROM meters; -- 错误

7. 总结

DERIVATIVE 函数是智能电表时序数据分析中用于计算变化速率的关键工具。它能帮助用户快速发现趋势、突变和异常,适用于电压、电流、功率等数值型指标的变化分析。使用时要注意分区、排序和参数类型,确保结果准确。

关于 TDengine

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

相关推荐
TDengine (老段)2 小时前
TDengine 时序函数 STATEDURATION 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
至此流年莫相忘2 小时前
MQTT Dashboard 访问控制
iot
凯子坚持 c3 小时前
2025年大模型服务性能深度解析:从清华评测报告看蓝耘元生代MaaS平台的综合实力
大数据·数据库·人工智能
WLJT1231231233 小时前
中国建材网:重构建材行业生态的数字力量
大数据·人工智能
长安城没有风3 小时前
从入门到精通【Redis】理解Redis事务
数据库·redis·缓存
小园子的小菜3 小时前
MySQL 查询与更新语句执行过程深度解析:从原理到实践
数据库·mysql
老华带你飞3 小时前
学生信息管理系统|基于Springboot的学生信息管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·学生信息管理系统
*长铗归来*4 小时前
MySQL新学知识(一)
数据库·mysql
2401_884810744 小时前
Mysql主从复制
数据库·mysql