TDengine 数据函数 LN 用户手册
LN 函数
LN(expr)
功能说明
返回指定参数的自然对数(以 e 为底的对数)。
版本
v3.3.3.0
返回结果类型
DOUBLE。
适用数据类型
数值类型(TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE 及其无符号类型)。
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
- 若
expr
为 NULL,返回 NULL。 - 若
expr
小于等于 0,返回 NULL。 - 自然对数是以数学常数 e(约等于 2.718281828459045)为底的对数。
- 只能与普通列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
- LN 函数与 EXP 函数互为反函数:
LN(EXP(x)) = x
且EXP(LN(x)) = x
(x > 0)。
使用示例
假设有以下智能电表表结构:
CREATE DATABASE power;
USE power;CREATE STABLE meters (ts TIMESTAMP,current FLOAT,voltage INT,phase FLOAT,temperature FLOAT
) TAGS (location VARCHAR(64),groupId INT
);CREATE TABLE d1001 USING meters TAGS ('California.SanFrancisco', 1);
CREATE TABLE d1002 USING meters TAGS ('California.LosAngeles', 2);
基础示例
示例 1: 常量计算
taos> SELECT LN(1);ln(1) |
==========================0.000000000000000 |taos> SELECT LN(2.718281828459045);ln(2.718281828459045) |
==========================1.000000000000000 |taos> SELECT LN(10);ln(10) |
==========================2.302585092994046 |taos> SELECT LN(100);ln(100) |
==========================4.605170185988092 |
示例 2: NULL 值和非法值处理
taos> SELECT LN(NULL);ln(null) |
==========================NULL |taos> SELECT LN(0);ln(0) |
==========================NULL |taos> SELECT LN(-1);ln(-1) |
==========================NULL |taos> SELECT LN(-10.5);ln(-10.5) |
==========================NULL |
示例 3: 不同数值类型
-- 整数类型
taos> SELECT LN(5);ln(5) |
==========================1.609437912434100 |-- 浮点类型
taos> SELECT LN(2.5);ln(2.5) |
==========================0.916290731874155 |-- 大数值
taos> SELECT LN(1000000);ln(1000000) |
==========================13.815510557964274 |
智能电表场景示例
示例 4: 电流对数变换
-- 插入测试数据
INSERT INTO d1001 VALUES('2018-10-03 14:38:05.000', 10.3, 220, 0.31, 25.5),('2018-10-03 14:38:15.000', 12.6, 220, 0.33, 28.2),('2018-10-03 14:38:16.800', 8.5, 221, 0.32, 22.8);-- 计算电流的自然对数(用于信号处理)
taos> SELECT ts, current, LN(current) AS ln_currentFROM d1001;ts | current | ln_current |
============================================================2018-10-03 14:38:05 | 10.300000 | 2.332143769006468 |2018-10-03 14:38:15 | 12.600000 | 2.533697208557746 |2018-10-03 14:38:16 | 8.500000 | 2.140066163725569 |
示例 5: 对数刻度数据分析
-- 使用对数刻度分析电压变化范围
-- 目的:在对数坐标系中观察电压波动,更容易发现电压的相对变化趋势
taos> SELECT location,MIN(voltage) AS min_voltage,MAX(voltage) AS max_voltage,LN(MAX(voltage)) - LN(MIN(voltage)) AS log_rangeFROM metersWHERE ts >= NOW - 1dGROUP BY location;location | min_voltage | max_voltage | log_range |
===================================================================================California.SanFrancisco | 218 | 221 | 0.013667275778099 |California.LosAngeles | 219 | 222 | 0.013588896269716 |
示例 6: 功率增长率对数计算
-- 计算功率的对数增长率(用于指数增长分析)
-- 目的:识别功率是否呈现指数增长趋势,便于预测未来负载
taos> SELECT ts,current * voltage AS power,LN(current * voltage) AS ln_powerFROM d1001;ts | power | ln_power |
=================================================================2018-10-03 14:38:05 | 2266.000000 | 7.725719184878962 |2018-10-03 14:38:15 | 2772.000000 | 7.927223037483046 |2018-10-03 14:38:16 | 1878.500000 | 7.538223506116255 |
示例 7: 与 EXP 函数验证
-- 验证 LN 和 EXP 互为反函数
-- LN(EXP(x)) = x
taos> SELECT current,EXP(LN(current)) AS exp_ln_currentFROM d1001WHERE current > 0;current | exp_ln_current |
================================10.300000 | 10.300000 |12.600000 | 12.600000 |8.500000 | 8.500000 |-- EXP(LN(x)) = x
taos> SELECT temperature,LN(EXP(temperature)) AS ln_exp_tempFROM d1001;temperature | ln_exp_temp |
===================================25.500000 | 25.500000 |28.200000 | 28.200000 |22.800000 | 22.800000 |
示例 8: 对数回归分析
-- 使用对数变换进行线性回归分析
-- 目的:通过对数变换将非线性关系转化为线性关系,便于建立预测模型
-- 分析电流与温度的对数关系
taos> SELECT ts,LN(current) AS ln_current,LN(temperature) AS ln_temp,LN(current) - LN(temperature) AS ln_ratioFROM d1001;ts | ln_current | ln_temp | ln_ratio |
=====================================================================================2018-10-03 14:38:05 | 2.332143769006 | 3.239162871469 | -0.907019102463 |2018-10-03 14:38:15 | 2.533697208558 | 3.339322067858 | -0.805624859300 |2018-10-03 14:38:16 | 2.140066163726 | 3.126761445971 | -0.986695282245 |
示例 9: 在 WHERE 子句中使用
-- 查询对数电流大于 2 的记录
taos> SELECT ts, currentFROM d1001WHERE LN(current) > 2;ts | current |
====================================2018-10-03 14:38:05 | 10.300000 |2018-10-03 14:38:15 | 12.600000 |2018-10-03 14:38:16 | 8.500000 |
示例 10: 按设备分组统计几何平均值
-- 统计各地区电流对数的平均值,计算几何平均值
-- 目的:几何平均值比算术平均值更适合描述乘性数据的中心趋势
taos> SELECT location,AVG(current) AS avg_current,AVG(LN(current)) AS avg_ln_current,EXP(AVG(LN(current))) AS geometric_meanFROM metersWHERE temperature IS NOT NULLAND current > 0GROUP BY location;location | avg_current | avg_ln_current | geometric_mean |
====================================================================================California.SanFrancisco | 10.466667 | 2.335302447096 | 10.333333 |California.LosAngeles | 11.200000 | 2.415606492694 | 11.180340 |
实际生产场景应用
场景 1: 电力系统 - 信号强度分析(分贝计算)
-- 计算信号强度的分贝值(dB)
-- 目的:用于评估电力信号质量,便于与行业标准对比
-- dB = 10 * LOG10(P) = 10 * LN(P) / LN(10)
SELECTtbname,ts,current * voltage AS power,10 * LN(current * voltage) / LN(10) AS power_db
FROM meters
WHERE ts >= NOW - 1h
ORDER BY power_db DESC
LIMIT 100;
场景 2: 负载增长趋势分析(指数增长检测)
-- 使用对数变换分析负载增长趋势
-- 目的:检测负载是否呈指数增长,提前预警电网扩容需求
-- 对数变换可以将指数增长转换为线性关系,便于趋势预测
SELECT_wstart AS time_window,AVG(current * voltage) AS avg_power,LN(AVG(current * voltage)) AS ln_avg_power
FROM meters
WHERE ts >= NOW - 30d
PARTITION BY location
INTERVAL(1d)
ORDER BY time_window;
函数意义与实际应用价值
数学意义
LN 函数是自然对数函数,以数学常数 e(约 2.71828)为底。自然对数在数学和科学计算中具有特殊地位,因为它的导数形式最简单:d(ln x)/dx = 1/x。
实际应用价值
-
数据标准化
对数变换可以将偏态分布转换为接近正态分布,便于统计分析和异常检测。 -
比例关系分析
对数差分等于比值的对数:ln(a) - ln(b) = ln(a/b),常用于计算增长率和相对变化。 -
指数关系线性化
将指数关系 y = ae^(bx) 转换为线性关系:ln(y) = ln(a) + bx,便于回归分析和趋势预测。 -
信号处理
在信号处理中,分贝(dB)是基于对数的单位,用于表示功率比,使得大范围的信号强度可以用紧凑的数值表示。 -
金融分析
对数收益率在金融分析中广泛使用,因为它们具有时间可加性,便于计算复合收益率。 -
物理定律
许多物理定律涉及对数关系,如热力学中的熵、信息论中的信息量、放射性衰减等。 -
几何平均值计算
通过对数变换计算几何平均值:exp(avg(ln(x))),比算术平均值更适合描述乘性数据。
注意事项
- 定义域限制:LN 函数只对正数有定义,输入值必须大于 0。
- NULL 处理:输入为 NULL 或非正数时返回 NULL。
- 精度问题:对于极小的正数,对数值可能非常负,需注意数值范围。
- 性能考虑:LN 是标量函数,在大数据量场景下应合理使用。
- 数据质量:使用前应确保数据为正数,否则会产生大量 NULL 值。
数学关系
LN(1) = 0
LN(e) = 1
(e ≈ 2.718281828459045)LN(x * y) = LN(x) + LN(y)
LN(x / y) = LN(x) - LN(y)
LN(x^n) = n * LN(x)
LN(EXP(x)) = x
(互为反函数)EXP(LN(x)) = x
(x > 0)
相关函数
- EXP:指数函数,LN 的反函数
- LOG:对数函数(可指定底数)
- POW:幂函数
- SQRT:平方根函数
关于 TDengine
TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。
它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。