当前位置: 首页 > news >正文

TDengine 数学函数 RAND 用户手册

在这里插入图片描述

RAND 函数

语法

RAND([seed])

功能说明

返回一个从 0 到 1 均匀分布的随机数。

版本

v3.3.3.0

返回结果类型

DOUBLE

适用数据类型

  • seed:INTEGER(可选参数)

嵌套子查询支持

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

适用于

表和超级表。

使用说明

  • 如果指定了 seed 值,将使用指定的 seed 作为随机种子,确保生成的随机数序列具有确定性(可重复性)。
  • 如果不指定 seed 参数,每次调用将返回不同的随机数。
  • 返回值范围为 [0, 1) 之间的 DOUBLE 类型浮点数。
  • seed 为 NULL,返回 NULL。
  • 只能与普通列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
  • 在表查询场景下,RAND 函数会为每一行数据生成独立的随机数。

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

-- 建库与使用
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');-- 写入数据
INSERT INTO d1001 VALUES('2024-01-01 10:00:00.000', 10.3, 220, 30.0, 2266.0),('2024-01-01 10:01:00.000', 12.6, 221, 45.0, 2784.6),('2024-01-01 10:02:00.000',  8.5, 223, 60.0, 1895.5),('2024-01-01 10:03:00.000', 11.2, 222, 120.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, 180.0, 1584.0),('2024-01-01 10:03:00.000', 10.5, 221, -30.0, 2320.5);

基础示例

示例 1: 无种子的随机数生成

-- 返回一个随机数
taos> SELECT RAND();rand()           |
============================0.202092426923147 |-- 再次调用返回不同的随机数         
taos> SELECT RAND();rand()           |
============================0.131537788143166 |

示例 2: 使用固定种子生成可重复的随机数

-- 使用种子 1
taos> SELECT RAND(1);rand(1)          |
============================0.000007826369259 |-- 相同种子返回相同结果
taos> SELECT RAND(1);rand(1)          |
============================0.000007826369259 |-- 使用不同种子
taos> SELECT RAND(100);rand(100)         |
============================0.154633387365937 |

示例 3: NULL 值处理

taos> SELECT RAND(NULL);rand(null)       |
========================NULL                  |

示例 4: 在表查询中为每行生成随机数

-- 每行数据都会生成不同的随机数
taos> SELECT ts, current, RAND() AS random_value FROM d1001 LIMIT 3;ts            |  current  |    random_value      |
===================================================================2024-01-01 10:00:00.000 | 10.300000 | 0.456789123456789   |2024-01-01 10:01:00.000 | 12.600000 | 0.789012345678901   |2024-01-01 10:02:00.000 |  8.500000 | 0.234567890123456   |

示例 5: 生成指定范围的随机数

-- 生成 [0, 100) 范围的随机数
taos> SELECT RAND() * 100 AS rand_0_100;rand_0_100       |
========================45.678912345678 |-- 生成 [10, 50) 范围的随机数
taos> SELECT 10 + RAND() * 40 AS rand_10_50;rand_10_50       |
========================32.145678901234 |

智能电表场景示例

示例 6: 随机抽样数据质量检查

目的:从海量电表数据中随机抽样进行数据质量检查,避免总是检查相同的数据。

-- 随机抽样 10% 的数据进行质量检查
SELECT ts, current, voltage, power
FROM d1001
WHERE RAND() < 0.1
ORDER BY ts;

应用价值

  • 实现公平的随机抽样
  • 避免抽样偏差
  • 降低检查成本

示例 7: 负载测试数据生成

目的:为负载测试生成模拟的随机扰动数据,使测试更接近真实场景。

-- 在实际功率基础上添加 ±5% 的随机扰动
SELECT ts,power AS actual_power,power * (0.95 + RAND() * 0.1) AS simulated_power
FROM d1001
ORDER BY ts;

应用价值

  • 模拟真实电网的功率波动
  • 测试系统对异常值的处理能力
  • 验证告警阈值的合理性

示例 8: A/B 测试分组

目的:将电表随机分配到不同的测试组,用于对比不同算法或策略的效果。

-- 将电表随机分为两组(A组和B组)
SELECT tbname,location,CASE WHEN RAND() < 0.5 THEN 'Group A'ELSE 'Group B'END AS test_group
FROM meters
GROUP BY tbname, location;

应用价值

  • 实现公平的实验分组
  • 避免选择偏差
  • 提高实验结果可信度

示例 9: 随机时间点数据采样

目的:在时间序列数据中随机选择数据点进行分析,减少计算量。

-- 使用固定种子确保可重复的随机采样
SELECT ts, current, voltage, phase
FROM d1002
WHERE RAND(42) < 0.2  -- 采样约 20% 的数据
ORDER BY ts;

应用价值

  • 大数据集的快速分析
  • 趋势预览和可视化
  • 降低存储和传输成本

示例 10: 模拟传感器噪声

目的:在仿真环境中为传感器数据添加随机噪声,模拟真实测量误差。

-- 为电流数据添加高斯噪声(简化版,使用均匀分布近似)
SELECT ts,current AS original_current,current + (RAND() - 0.5) * 0.2 AS noisy_current
FROM d1001
ORDER BY ts;

应用价值

  • 测试数据清洗算法
  • 验证滤波器效果
  • 评估系统鲁棒性

示例 11: 随机延迟模拟

目的:模拟数据传输延迟,测试系统对乱序数据的处理能力。

-- 为每条记录添加随机延迟(0-5秒)
SELECT ts,ts + CAST(RAND() * 5000 AS BIGINT) AS delayed_ts,current,voltage
FROM d1001
ORDER BY delayed_ts;

应用价值

  • 测试时序数据库的乱序写入能力
  • 验证数据同步机制
  • 评估实时性要求

生产场景应用与目的

场景 A: 统计抽样分析(降低计算成本)

目的:对海量历史数据进行统计分析时,通过随机抽样减少计算量,同时保证统计结果的代表性。

示例

-- 从过去一个月的数据中随机抽样 1% 进行趋势分析
SELECT _wstart AS time_window,AVG(power) AS avg_power,MAX(power) AS max_power,MIN(power) AS min_power
FROM meters
WHERE ts >= NOW - 30dAND RAND() < 0.01  -- 1% 抽样率
INTERVAL(1h);

场景 B: 负载均衡测试(压力分散)

目的:在性能测试中随机选择设备进行压力测试,避免集中测试对系统造成过大冲击。

示例

-- 随机选择 10% 的设备进行高频查询测试
SELECT tbname, COUNT(*) AS record_count,AVG(power) AS avg_power
FROM meters
WHERE ts >= NOW - 1hAND RAND() < 0.1
GROUP BY tbname;

场景 C: 数据脱敏(隐私保护)

目的:在数据分享或演示时,通过添加随机扰动保护敏感信息。

示例

-- 对功率数据进行随机化处理(保持趋势但隐藏精确值)
SELECT ts,location,FLOOR(power * (0.9 + RAND() * 0.2)) AS anonymized_power
FROM meters
WHERE ts >= NOW - 1d;

场景 D: 随机告警抑制(避免告警风暴)

目的:当大量设备同时触发告警时,随机选择部分设备发送告警,避免告警系统过载。

示例

-- 只对随机 20% 的异常设备发送告警
SELECT tbname,ts,voltage,'Voltage out of range' AS alert_message
FROM meters
WHERE voltage > 240 OR voltage < 200AND RAND() < 0.2;  -- 随机抑制 80% 的告警

注意事项

  1. 随机性质量:RAND() 使用伪随机数生成器,适用于大多数应用场景,但不适合密码学用途。

  2. 性能考虑:在大数据集上使用 WHERE RAND() < threshold 进行抽样时,仍需扫描全表,性能开销较大。对于大规模抽样,建议使用 SAMPLE 函数。

  3. 种子的使用

    • 在需要可重复结果的场景(如调试、测试)使用固定种子
    • 在需要真随机性的场景(如生产环境抽样)不指定种子
  4. 分布特性:RAND() 返回均匀分布,如需其他分布(如正态分布),需要额外的数学变换。

  5. NULL 值传播:种子为 NULL 时结果为 NULL,使用时需注意过滤。

  6. 并发一致性:在并发查询场景下,即使使用相同种子,不同客户端的随机序列可能不同。


数学关系

  • 均匀分布P(a ≤ RAND() ≤ b) = b - a,其中 0 ≤ a < b ≤ 1
  • 范围转换[min, max) = min + RAND() * (max - min)
  • 整数随机数FLOOR(RAND() * n) 生成 [0, n) 范围的整数
  • 概率采样RAND() < p 实现概率 p 的伯努利采样

相关函数

  • SAMPLE:结构化采样函数,性能优于 RAND() 过滤
  • UNIQUE:去重函数,可与 RAND() 结合实现随机去重
  • FLOOR/CEIL:与 RAND() 结合生成随机整数
  • CAST:类型转换,用于生成特定类型的随机数

函数意义与实际应用价值

数学意义

RAND 函数基于伪随机数生成算法(通常是线性同余生成器或梅森旋转算法),能够生成统计上均匀分布的随机数序列。当提供种子时,确保随机序列的可重复性。

实际应用价值

  1. 数据采样

    • 减少大数据集的处理时间
    • 保证样本的随机性和代表性
    • 支持分层抽样和配额抽样
  2. 测试与模拟

    • 生成测试数据
    • 模拟随机事件
    • 压力测试和负载测试
  3. 算法验证

    • A/B 测试分组
    • 随机化实验设计
    • 蒙特卡洛模拟
  4. 系统优化

    • 负载均衡
    • 告警抑制
    • 流量控制
  5. 隐私保护

    • 数据脱敏
    • 差分隐私
    • 噪声注入

本用户手册提供了 RAND 函数的完整使用说明,特别针对电力系统中的数据采样、测试模拟、负载均衡等实际需求,方便用户快速上手并应用于生产环境。

关于 TDengine

TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。

它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。

http://www.dtcms.com/a/521701.html

相关文章:

  • windows 安装 TDengine
  • 网站制度建设存在的问题服务器重启 iis网站暂停
  • 蛋白表达原理与关键要素解析
  • 网站seo搜索引擎优化案例千牛怎么做免费推广引流
  • 为什么top和/proc/pid/statm、/proc/pid/statm 统计的内存结果不同
  • 基于SpringBoot2+Vue2的论坛发帖交流平台
  • 耒阳在那做网站抖音关键词排名系统
  • 如何用万网做自己的网站网页游戏开发软件
  • 纪念馆网站建设方案旅游网站技术方案
  • 阮一峰《TypeScript 教程》学习笔记——数组
  • KVSTORE_Pain point_tuchuang_ROS2
  • 清控人居建设集团网站wordpress 主题 设计
  • 和17做网店一样的货源网站做网站设计管理的专业
  • 趋势强度识别对ETF止盈触发条件的改进路径
  • 杭州房产网官网企业网站seo模板
  • 中国万网建站平台做移动网站建设
  • 网站内部链接的作用有哪些正规网站建设找哪家好
  • 【11408学习记录】考研数学高频考点精讲:古典概型+几何概型解题框架
  • 济南网站建设有限公司排名好的移动网站建设
  • 网站备份脚本中国最大的库存尾货清货平台
  • 好的外贸网站的特征网络直接销售的营销方式
  • 有做浏览单的网站wordpress和woo
  • 临沂网站建设便宜电商网站建设
  • 多线程六脉神剑第一剑:互斥锁 (Mutex)
  • 做关于星空的网站wordpress自动升级
  • SuperSonic提示词设计与实现深度解析
  • 重庆网站设计哪家好山东省建设厅特种作业证查询网站
  • python 中 TypeError: Object of type TestCase is not JSON serializable
  • 【大模型应用开发 9.LangGraph从入门到实战·下】
  • 网站建设制作一个网站的费用免费免备案域名