TDengine 数学函数 LOG 用户手册

GitHub Copilot

LOG 函数

语法

sql 复制代码
LOG(expr)
LOG(expr, base)

功能说明

  • LOG(x) 返回 x 的自然对数,等价于 LN(x)
  • LOG(x, b) 返回以 b 为底的对数,等价于 LN(x) / LN(b)

版本

  • v3.3.x

返回结果类型

  • DOUBLE

适用数据类型

  • 数值类型:TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE 及其无符号类型
  • 不支持:BOOL、BINARY、NCHAR、TIMESTAMP 作为参数

嵌套子查询支持

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

适用于

  • 表和超级表

使用说明

  • 参数个数为 1 或 2;少于 1 或多于 2 个参数报错
  • 定义域约束
    • x 必须大于 0,否则返回 NULL
    • base 必须大于 0 且不等于 1,否则返回 NULL
  • NULL 传播:任一参数为 NULL 时结果为 NULL
  • 与类型提升:按数值类型提升到浮点进行计算,结果为 DOUBLE
  • 仅与普通列、选择(Selection)、投影(Projection)函数一起使用;不要与聚合(Aggregation)函数在同一层直接混用

错误与异常

  • LOG(x) 当 x ≤ 0 → 返回 NULL
  • LOG(x, 1) 或 LOG(x, b ≤ 0) → 返回 NULL
  • 参数数量不合法、参数类型不合法 → 语法错误
  • 同一 SELECT 中混用聚合列与非聚合表达式(例如 c1 与 COUNT(...))→ 语法错误

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

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

-- 2) 建超级表(示例字段覆盖整型/浮点等常见数值类型)
CREATE STABLE meters (
  ts TIMESTAMP,
  current FLOAT,
  voltage INT,
  temperature FLOAT,
  power DOUBLE
) TAGS (
  location VARCHAR(64),
  gid INT
);

-- 3) 建子表
CREATE TABLE d1001 USING meters TAGS ('SF', 1);
CREATE TABLE d1002 USING meters TAGS ('LA', 2);

-- 4) 写入示例数据
INSERT INTO d1001 VALUES
  ('2024-01-01 10:00:00.000', 10.3, 220, 25.5, 2266.0),
  ('2024-01-01 10:01:00.000', 12.6, 220, 28.2, 2772.0),
  ('2024-01-01 10:02:00.000',  8.5, 221, 22.8, 1878.5);

INSERT INTO d1002 VALUES
  ('2024-01-01 10:00:00.000',  9.0, 219, 24.0, 1971.0),
  ('2024-01-01 10:01:00.000', 14.0, 222, 26.0, 3108.0),
  ('2024-01-01 10:02:00.000',  7.2, 220, 23.5, 1584.0);

说明

  • 示例表与字段简洁直观,覆盖 LOG 的典型用法
  • 可直接复制执行,便于复现本文各 SQL 示例
  • 全文示例均不使用 WITH、窗口函数(如 LAG、OVER),符合 TDengine 语法特性

使用示例

1) 基础用法(单参数,自然对数)

sql 复制代码
-- 自然对数(等同 LN)
SELECT ts, current, LOG(current) AS ln_current FROM d1001;

2) 指定底数(常用 10、2)

sql 复制代码
-- 以 10 为底的对数
SELECT ts, power, LOG(power, 10) AS log10_power FROM d1001;
sql 复制代码
-- 以 2 为底的对数(常用于量级、分桶)
SELECT ts, voltage, LOG(voltage, 2) AS log2_voltage FROM d1002;

3) 非法与 NULL 输入处理

sql 复制代码
-- 小于等于 0 或底数等于 1 均为 NULL
SELECT
  LOG(-1) AS ln_neg1,
  LOG(0) AS ln_zero,
  LOG(10, 1) AS log_base1,
  LOG(10, -2) AS log_base_neg;

4) 与列计算组合

sql 复制代码
-- 组合计算后再取对数
SELECT ts, current * voltage AS pv, LOG(current * voltage) AS ln_pv FROM d1001;

5) 作为过滤条件

sql 复制代码
-- 过滤"对数功率"超过阈值的记录(指数尺度下的阈值更稳定)
SELECT ts, power 
FROM d1002 
WHERE LOG(power, 10) > 3;

6) 作为派生列参与进一步计算

sql 复制代码
-- 用对数差近似相对变化(同一行内字段对比,不使用窗口函数)
SELECT
  ts,
  power,
  temperature,
  LOG(power) - LOG(temperature) AS ln_power_temp_diff 
FROM d1001 
WHERE power > 0 AND temperature > 0;

生产场景应用与目的

场景 A:功率/能耗的对数刻度分析(跨数量级可视化)

目的

  • 把功率或能耗映射到对数尺度,便于跨数量级对比与可视化

示例

sql 复制代码
SELECT ts, power, LOG(power, 10) AS log10_power 
FROM d1001 
ORDER BY ts;

场景 B:对数范围与波动评估(相对变化更稳定)

目的

  • 通过 log(max) - log(min) 衡量区间相对波动,弱化绝对量纲影响

示例

sql 复制代码
SELECT
  MIN(voltage) AS min_v,
  MAX(voltage) AS max_v,
  LOG(MAX(voltage)) - LOG(MIN(voltage)) AS ln_range 
FROM d1002;

场景 C:几何平均(乘性数据的中心趋势)

目的

  • 相比算术平均,几何平均更适合倍率、比率等乘性数据

示例

sql 复制代码
SELECT
  EXP(AVG(LOG(current))) AS geo_mean_current 
FROM d1001 
WHERE current > 0;

场景 D:分贝计算(dB,对数度量)

目的

  • 在信号/噪声分析中以 dB 统一度量,便于与标准阈值比较

示例

sql 复制代码
-- dB = 10 * log10(P) = 10 * LOG(P, 10)
SELECT
  ts,
  power,
  10 * LOG(power, 10) AS power_db 
FROM d1002 
WHERE power > 0 
ORDER BY power_db DESC 
LIMIT 5;

案例 E:量级分桶(阈值/告警分级)

目的

  • 按数量级划分区间用于统计与告警分级

示例

sql 复制代码
-- 将功率按 10 的对数量级分桶
SELECT
  FLOOR(LOG(power, 10)) AS mag_bin,
  COUNT(*) AS cnt 
FROM d1001 
WHERE power > 0 
GROUP BY mag_bin 
ORDER BY mag_bin;

注意事项

  • 避免对非正数取对数;必要时先做清洗或使用 CASE 过滤
  • 底数选择:常用 e、10、2;避免使用 1 或非正底数
  • LOG 逐行计算,建议配合时间过滤、列裁剪等减少扫描
  • 不使用 WITH、窗口函数(如 LAG、OVER);示例均符合 TDengine 语法
  • 与聚合混用请遵循 SQL 规范;不要同时选择非聚合列与聚合列而不分组

相关函数

  • LN(x):自然对数,等价于 LOG(x)
  • EXP(x):指数函数,LN 与 EXP 互为反函数
  • 其他数学函数:ABS、CEIL、FLOOR 等可与 LOG 组合完成特征变换

关于 TDengine

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

相关推荐
青皮桔3 小时前
Java+OpenCV实现图片切割
java·后端·opencv·计算机视觉
TDengine (老段)3 小时前
TDengine 数据函数 MOD 用户手册
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
文档搬运工3 小时前
Oracle 19.29
数据库·oracle
兮动人3 小时前
Spring中@Configuration注解的proxyBeanMethods属性详解
java·后端·spring
zl9798993 小时前
SpringBoot-数据访问之Druid
java·spring boot
小小管写大大码3 小时前
AI重排序API:优化搜索相关性
数据库·人工智能
猫头虎3 小时前
解决升级IDEA2025.2后,每次打开Maven项目爆红的问题:Windows和Mac解决方案
java·ide·macos·maven·intellij-idea·idea·intellij idea
NFG89C3 小时前
Adobe Lightroom Classic 2025解锁版 (专业照片管理)
java·adobe·工具
蒙奇D索大4 小时前
【计算机网络】408计算机网络高分指南:物理层编码与调制技术精讲
java·前端·学习·计算机网络