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 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
云飞云共享云桌面8 分钟前
苏州精密机械制造企业一台云服务器带8个SolidWorks研发
大数据·运维·服务器·自动化·制造
墨香幽梦客10 分钟前
探索五款主流生产制造ERP,助力注胶工艺高效管理与升级
大数据·制造
杭州泽沃电子科技有限公司10 分钟前
烧结工序的“隐形守护者”:在线监测如何成为钢铁制造的关键支柱
物联网·安全·智能监测
苏小瀚13 分钟前
[MySQL] 事务和视图
数据库·mysql·1024程序员节
周杰伦_Jay21 分钟前
【Elasticsearch 全解析】分布式搜索引擎的原理、实践与优化
大数据·分布式·elasticsearch·架构·开源·1024程序员节
B站_计算机毕业设计之家1 小时前
Spark微博舆情分析系统 情感分析 爬虫 Hadoop和Hive 贴吧数据 双平台 讲解视频 大数据 Hadoop ✅
大数据·hadoop·爬虫·python·数据分析·1024程序员节·舆情分析
哈__2 小时前
MongoDB 平替新方案:金仓多模数据库驱动电子证照国产化落地
数据库·1024程序员节
赵渝强老师2 小时前
【赵渝强老师】大数据日志采集引擎Flume
大数据·flume
微学AI2 小时前
国产数据库替代MongoDB的技术实践过程:金仓多模数据库在电子证照系统中的深度应用
数据库·人工智能·1024程序员节
TDengine (老段)3 小时前
TDengine 数据函数 ROUND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·1024程序员节