TDengine 数据函数 TAN 用户手册

TAN 函数

语法

sql 复制代码
TAN(expr)

功能说明

获得指定字段的正切值。

版本

v3.0.0.0

返回结果类型

DOUBLE

适用数据类型

数值类型。

嵌套子查询支持

适用于内层查询和外层查询。

适用于

表和超级表。

使用说明

  • 如果 expr 为 NULL,返回 NULL。
  • 输入参数按弧度制计算。
  • 只能与普通列、TAG 列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
  • 若要将角度转换为弧度,可使用 RADIANS 函数,例如:TAN(RADIANS(45))

示例所用表与数据(可直接复制执行)

sql 复制代码
-- 建库与使用
CREATE DATABASE IF NOT EXISTS power;
USE power;

-- 智能电表表结构(带相位信息)
CREATE STABLE meters (
  ts TIMESTAMP,
  current FLOAT,
  voltage INT,
  phase FLOAT,
  power DOUBLE
) TAGS (
  groupid INT,
  location VARCHAR(64)
);

-- 子表
CREATE TABLE d1001 USING meters TAGS (1, 'California.SanFrancisco');
CREATE TABLE d1002 USING meters TAGS (2, 'California.LosAngeles');

-- 写入数据(phase 列存储相位角度,单位:度)
INSERT INTO d1001 VALUES
  ('2024-01-01 10:00:00.000', 10.3, 220, 0.0, 2266.0),
  ('2024-01-01 10:01:00.000', 12.6, 221, 30.0, 2784.6),
  ('2024-01-01 10:02:00.000',  8.5, 223, 45.0, 1895.5),
  ('2024-01-01 10:03:00.000', 11.2, 222, 60.0, 2486.4);

INSERT INTO d1002 VALUES
  ('2024-01-01 10:00:00.000',  9.0, 219, 0.0, 1971.0),
  ('2024-01-01 10:01:00.000', 14.0, 222, 90.0, 3108.0),
  ('2024-01-01 10:02:00.000',  7.2, 220, 120.0, 1584.0),
  ('2024-01-01 10:03:00.000', 10.5, 221, -30.0, 2320.5);

基础示例

示例 1: 常量正切计算

sql 复制代码
-- tan(0) = 0
taos> SELECT TAN(0);
          tan(0)           |
============================
         0.000000000000000 |

-- tan(π/4) = 1
taos> SELECT TAN(PI()/4);
        tan(pi()/4)        |
============================
         1.000000000000000 |

-- tan(π/3) ≈ 1.732
taos> SELECT TAN(PI()/3);
        tan(pi()/3)        |
============================
         1.732050807568877 |

-- tan(π/6) ≈ 0.577
taos> SELECT TAN(PI()/6);
        tan(pi()/6)        |
============================
         0.577350269189626 |

示例 2: 角度转弧度计算

sql 复制代码
-- tan(30°) ≈ 0.577
taos> SELECT TAN(RADIANS(30));
    tan(radians(30))       |
============================
         0.577350269189626 |

-- tan(45°) = 1
taos> SELECT TAN(RADIANS(45));
    tan(radians(45))       |
============================
         1.000000000000000 |

-- tan(60°) ≈ 1.732
taos> SELECT TAN(RADIANS(60));
    tan(radians(60))       |
============================
         1.732050807568877 |

示例 3: NULL 值处理

sql 复制代码
taos> SELECT TAN(NULL);
       tan(null)       |
========================
 NULL                  |

示例 4: 负角度计算

sql 复制代码
-- tan(-30°) ≈ -0.577
taos> SELECT TAN(RADIANS(-30));
   tan(radians(-30))       |
============================
        -0.577350269189626 |

-- tan(-45°) = -1
taos> SELECT TAN(RADIANS(-45));
   tan(radians(-45))       |
============================
        -1.000000000000000 |

示例 5: 列数据正切计算

sql 复制代码
-- 计算相位角的正切值
SELECT ts,
       phase,
       TAN(RADIANS(phase)) AS phase_tan
FROM d1001
ORDER BY ts;
复制代码
           ts            |  phase  |     phase_tan        |
====================================================================
 2024-01-01 10:00:00.000 |     0.0 |    0.000000000000000 |
 2024-01-01 10:01:00.000 |    30.0 |    0.577350269189626 |
 2024-01-01 10:02:00.000 |    45.0 |    1.000000000000000 |
 2024-01-01 10:03:00.000 |    60.0 |    1.732050807568877 |

智能电表场景示例

示例 6: 功率因数角正切值计算

目的:计算功率因数角的正切值,用于分析无功功率与有功功率的比值关系。

sql 复制代码
-- tan(φ) = Q/P,其中 Q 为无功功率,P 为有功功率
SELECT ts,
       phase,
       TAN(RADIANS(phase)) AS power_factor_tan,
       CASE
         WHEN ABS(TAN(RADIANS(phase))) > 0.75 THEN '需要补偿'
         ELSE '正常'
       END AS compensation_status
FROM d1001
ORDER BY ts;

应用价值

  • 快速评估无功功率占比
  • 识别需要无功补偿的时段
  • 优化功率因数

示例 7: 阻抗角分析

目的:通过相位角的正切值分析电路的阻抗特性。

sql 复制代码
-- 计算阻抗角的正切值(电抗与电阻的比值)
SELECT location,
       AVG(TAN(RADIANS(phase))) AS avg_impedance_tan,
       STDDEV(TAN(RADIANS(phase))) AS impedance_tan_stddev
FROM meters
WHERE ts >= '2024-01-01 10:00:00'
  AND ts < '2024-01-01 10:04:00'
GROUP BY location;

应用价值

  • 分析电路阻抗特性
  • 识别感性负载或容性负载
  • 优化电路设计

示例 8: 相位角变化率检测

目的:检测相位角正切值的变化,识别负载突变。

sql 复制代码
-- 检测相位角正切值的突变
SELECT ts,
       phase,
       TAN(RADIANS(phase)) AS phase_tan,
       DIFF(TAN(RADIANS(phase))) AS phase_tan_change
FROM d1001
ORDER BY ts;

应用价值

  • 检测负载突变
  • 识别设备启停事件
  • 预警异常运行状态

示例 9: 三相不平衡分析(正切分量)

目的:利用正切函数分析三相电路的不平衡程度。

sql 复制代码
-- 计算相位角正切值的标准差评估三相不平衡
SELECT _wstart AS time_window,
       AVG(TAN(RADIANS(phase))) AS avg_phase_tan,
       STDDEV(TAN(RADIANS(phase))) AS phase_tan_stddev
FROM meters
WHERE ts >= '2024-01-01 10:00:00'
  AND ts < '2024-01-01 11:00:00'
INTERVAL(10m);

应用价值

  • 量化三相不平衡程度
  • 评估中性线电流
  • 指导负载调整

示例 10: 功率三角形计算

目的:利用正切值计算无功功率,构建功率三角形。

sql 复制代码
-- 计算有功功率、视在功率和无功功率
SELECT ts,
       power AS active_power,
       voltage * current AS apparent_power,
       power * TAN(RADIANS(phase)) AS reactive_power,
       TAN(RADIANS(phase)) AS tan_phi
FROM d1001
ORDER BY ts;

应用价值

  • 完整分析功率关系
  • 计算无功功率需求
  • 指导补偿设备配置

示例 11: 相位角异常检测

目的:检测相位角正切值超出正常范围的情况。

sql 复制代码
-- 检测相位角正切值异常(过大或过小)
SELECT ts,
       phase,
       TAN(RADIANS(phase)) AS phase_tan
FROM meters
WHERE ABS(TAN(RADIANS(phase))) > 2.0  -- 相位角接近±63.43°以上
   OR phase > 80
ORDER BY ts;

应用价值

  • 识别功率因数过低
  • 检测设备异常运行
  • 触发告警机制

生产场景应用与目的

场景 A: 无功功率监测与补偿

目的:通过相位角的正切值(tan(φ) = Q/P)实时监测无功功率占比,自动调整补偿设备。

示例

sql 复制代码
-- 实时监测无功功率占比
SELECT location,
       AVG(power) AS avg_active_power,
       AVG(power * TAN(RADIANS(phase))) AS avg_reactive_power,
       AVG(TAN(RADIANS(phase))) AS avg_tan_phi,
       CASE
         WHEN AVG(TAN(RADIANS(phase))) > 0.75 THEN '急需补偿'
         WHEN AVG(TAN(RADIANS(phase))) > 0.48 THEN '建议补偿'
         ELSE '正常'
       END AS compensation_level
FROM meters
WHERE ts >= NOW - 15m
GROUP BY location;

场景 B: 负载特性分析

目的:通过正切值分析负载的感性或容性特征。

示例

sql 复制代码
-- 分析负载特性
SELECT _wstart AS time_window,
       AVG(TAN(RADIANS(phase))) AS avg_tan_phi,
       CASE
         WHEN AVG(TAN(RADIANS(phase))) > 0.1 THEN '感性负载'
         WHEN AVG(TAN(RADIANS(phase))) < -0.1 THEN '容性负载'
         ELSE '纯阻性负载'
       END AS load_type
FROM meters
WHERE ts >= '2024-01-01 00:00:00'
  AND ts < '2024-01-02 00:00:00'
INTERVAL(1h);

场景 C: 电能质量评估

目的:通过相位角正切值的稳定性评估电能质量。

示例

sql 复制代码
-- 评估相位角稳定性
SELECT location,
       STDDEV(TAN(RADIANS(phase))) AS tan_phi_stddev,
       STDDEV(TAN(RADIANS(phase))) / ABS(AVG(TAN(RADIANS(phase)))) * 100 AS variation_coefficient,
       CASE
         WHEN STDDEV(TAN(RADIANS(phase))) > 0.5 THEN '不稳定'
         ELSE '稳定'
       END AS stability_status
FROM meters
WHERE ts >= NOW - 1d
GROUP BY location;

注意事项

  1. 输入单位:TAN 函数的输入参数必须是弧度制,如果输入是角度,需使用 RADIANS 函数转换。

  2. 奇点问题:当角度为 ±90°(±π/2 弧度)时,正切值趋向于无穷大,实际计算结果可能非常大。

  3. 精度问题:浮点运算存在精度限制,对于需要高精度的应用需要注意。

  4. 周期性 :正切函数是周期函数,周期为 π,即 TAN(x) = TAN(x + πn),其中 n 为整数。

  5. NULL 传播:输入为 NULL 时返回 NULL。

  6. 性能考虑:TAN 是逐行计算的标量函数,在大数据集上建议配合时间过滤和列裁剪。


数学关系

  • 基本定义 :对于直角三角形,tan(θ) = 对边 / 邻边 = sin(θ) / cos(θ)
  • 周期性TAN(x + π) = TAN(x)
  • 奇函数性质TAN(-x) = -TAN(x)
  • 与其他三角函数关系
    • TAN(x) = SIN(x) / COS(x)
    • 1 + TAN²(x) = 1 / COS²(x) = SEC²(x)
  • 和差公式
    • TAN(x + y) = (TAN(x) + TAN(y)) / (1 - TAN(x)TAN(y))
    • TAN(x - y) = (TAN(x) - TAN(y)) / (1 + TAN(x)TAN(y))
  • 倍角公式TAN(2x) = 2TAN(x) / (1 - TAN²(x))
  • 特殊值
    • TAN(0) = 0
    • TAN(π/6) ≈ 0.577
    • TAN(π/4) = 1
    • TAN(π/3) ≈ 1.732
    • TAN(π/2) → ∞(无穷大)

相关函数

  • SIN :正弦函数,TAN(x) = SIN(x) / COS(x)
  • COS :余弦函数,TAN(x) = SIN(x) / COS(x)
  • ATAN:反正切函数,TAN 的反函数
  • RADIANS:角度转弧度,常与 TAN 配合使用
  • PI:返回圆周率 π

函数意义与实际应用价值

数学意义

TAN 函数是三角函数中的基本函数之一,表示角度与直角三角形两边比例的关系。在电力系统中,tan(φ) 直接反映了无功功率与有功功率的比值,是功率分析的重要指标。

实际应用价值

  1. 功率分析

    • 直接计算无功功率(Q = P × tan(φ))
    • 快速评估功率因数
    • 指导无功补偿
  2. 负载特性识别

    • 判断感性或容性负载
    • 分析负载阻抗特性
    • 优化负载配置
  3. 电能质量监测

    • 评估相位稳定性
    • 检测功率因数异常
    • 预警设备故障
  4. 补偿设备控制

    • 实时计算补偿需求
    • 自动调整补偿容量
    • 优化补偿效果
  5. 能效管理

    • 分析无功损耗
    • 优化运行策略
    • 降低电费成本

关于 TDengine

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

相关推荐
DolphinScheduler社区3 小时前
小白指南:Apache DolphinScheduler 补数据功能实操演示
java·大数据·开源·apache·海豚调度·大数据工作流调度
北邮-吴怀玉3 小时前
3.1.1.1 大数据方法论与实践指南-开源工具说明-Apache NiFi
大数据·开源·apache
TDengine (老段)3 小时前
TDengine 数学函数 SQRT 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·1024程序员节
洛克大航海3 小时前
安装 ElasticSearch、Logstash、Kibana、Kafka 和 Filebeat
大数据·elasticsearch·kafka·kibana·logstash·filebeat
lang201509283 小时前
Spring XML AOP配置实战指南
xml·java·spring
桦说编程3 小时前
深入解析CompletableFuture源码实现(3)———多源输入
java·性能优化·源码阅读
xiaozaq3 小时前
java 正则表达式 所有的优先级
java·开发语言·正则表达式
Q26433650233 小时前
【有源码】基于Hadoop与Spark的时尚精品店数据分析与可视化系统-基于多维度分析的零售时尚销售数据挖掘与可视化研究
大数据·hadoop·机器学习·数据挖掘·数据分析·spark·毕业设计
档案宝档案管理3 小时前
零售行业档案管理的痛点与解决方案:档案管理系统显身手
大数据·数据库·人工智能·档案·零售·档案管理