TDengine 统计函数 PERCENTILE 用户手册
PERCENTILE 函数用户手册
1. 函数概述
PERCENTILE
是 TDengine 的聚合函数,用于计算指定百分位数值。百分位数是统计学中描述数据分布的重要指标,表示有百分之多少的数据小于等于该值。在智能电表场景中,常用于分析用电负荷分布、电压质量评估等。
2. 语法
SELECT PERCENTILE(expr, p [, p1, p2, ...]) FROM meters [WHERE condition];
参数说明
expr
:需要计算百分位数的数值型字段p, p1, p2, ...
:百分位数值,范围为 0-100 的数值,支持多个百分位数值(最多 10 个)
3. 返回值
- 单个百分位数:返回 DOUBLE 类型的百分位数值
- 多个百分位数:返回 VARCHAR 类型的 JSON 格式字符串
4. 函数实现原理
4.1 算法实现
PERCENTILE 函数采用排序算法实现:
- 数据收集:收集所有非 NULL 的数值数据
- 排序处理:对数据进行升序排序
- 位置计算:根据百分位数计算在排序数组中的位置
- 值插值:如果位置不是整数,则进行线性插值
4.2 计算公式
对于百分位数 P(0 ≤ P ≤ 100):
位置 = (P / 100) × (N - 1)
其中 N 是有效数据的个数。
4.3 存储机制
- 函数需要存储所有输入数据进行排序
- 内存使用量与数据量成正比
- 支持分布式计算的合并操作
5. 智能电表应用场景
基于智能电表数据库结构:
CREATE TABLE meters (ts TIMESTAMP,voltage FLOAT,current FLOAT,power FLOAT
) TAGS (groupid INT,location VARCHAR(50)
);
5.1 电压质量评估
单个百分位数分析
-- 计算电压的中位数(50%百分位数)
SELECT PERCENTILE(voltage, 50) AS voltage_median FROM meters;-- 计算90%电表的电压水平
SELECT PERCENTILE(voltage, 90) AS voltage_90th FROM meters;-- 分析低电压情况(10%百分位数)
SELECT PERCENTILE(voltage, 10) AS voltage_10th FROM meters;
多百分位数综合分析
-- 电压质量全面评估(返回JSON格式)
SELECT PERCENTILE(voltage, 10, 25, 50, 75, 90) AS voltage_percentiles
FROM meters
WHERE ts >= NOW() - 24h;
5.2 用电负荷分布分析
按区域分析负荷分布
-- 各区域电流负荷分布(多个百分位数)
SELECT location,PERCENTILE(current, 25, 50, 75, 95) AS current_distribution
FROM meters
WHERE ts >= NOW() - 7d
GROUP BY location;-- 单独分析各百分位数
SELECT location,PERCENTILE(current, 25) AS current_25th,PERCENTILE(current, 50) AS current_median,PERCENTILE(current, 75) AS current_75th,PERCENTILE(current, 95) AS current_95th
FROM meters
WHERE ts >= NOW() - 7d
GROUP BY location;
功率消耗模式分析
-- 功率消耗的百分位数分布
SELECT PERCENTILE(power, 10, 50, 90, 95, 99) AS power_distribution
FROM meters
WHERE location = 'California.SanFrancisco'AND ts >= NOW() - 30d;
5.3 设备性能基准分析
设备组性能对比
-- 不同设备组的性能基准
SELECT groupid,location,PERCENTILE(voltage, 50) AS voltage_baseline,PERCENTILE(current, 50) AS current_baseline,PERCENTILE(power, 50) AS power_baseline
FROM meters
WHERE ts >= NOW() - 24h
GROUP BY groupid, location;
异常检测阈值设定
-- 设定异常检测的阈值(基于95%百分位数)
SELECT location,PERCENTILE(current, 95) AS current_threshold_high,PERCENTILE(current, 5) AS current_threshold_low,PERCENTILE(voltage, 95) AS voltage_threshold_high,PERCENTILE(voltage, 5) AS voltage_threshold_low
FROM meters
WHERE ts >= NOW() - 30d
GROUP BY location;
5.4 时间窗口分析
每日负荷特征分析
-- 计算每日的用电增量
SELECT PERCENTILE(current, 50) AS daily_current_median,PERCENTILE(current, 90) AS daily_current_90th
FROM meters
INTERVAL(1d);
小时级电压质量监控
-- 每小时电压质量评估
SELECT PERCENTILE(voltage, 10, 50, 90) AS hourly_voltage_quality
FROM meters
WHERE location = 'California.LosAngles'
INTERVAL(1h);
5.5 多指标综合分析
-- 智能电表综合性能分析
SELECT location,PERCENTILE(voltage, 5, 25, 50, 75, 95) AS voltage_distribution,PERCENTILE(current, 5, 25, 50, 75, 95) AS current_distribution,PERCENTILE(power, 5, 25, 50, 75, 95) AS power_distribution
FROM meters
WHERE ts >= NOW() - 7d
GROUP BY location;
5.6 电网容量规划
峰值负荷评估
-- 分析各区域的峰值负荷水平
SELECT location,PERCENTILE(current, 99) AS peak_current_99th,PERCENTILE(power, 99) AS peak_power_99th,COUNT(*) AS total_measurements
FROM meters
WHERE ts >= NOW() - 365d
GROUP BY location;
6. 注意事项
6.1 数据要求
-
数据完整性
- 确保有足够的数据样本进行统计分析
- 建议至少有 100 个以上的数据点
- 注意处理数据缺失情况
-
数据质量
- 清理异常值和错误数据
- 确保数据的时间同步性
- 验证数据的合理性范围
6.2 性能考虑
- 内存使用
- PERCENTILE 函数需要将所有数据加载到内存中排序
- 大数据集可能导致内存不足
- 建议合理设置时间范围限制查询数据量
-- 推荐:限制时间范围
SELECT PERCENTILE(voltage, 50) FROM meters
WHERE ts >= NOW() - 24h;-- 避免:无限制的全表查询
SELECT PERCENTILE(voltage, 50) FROM meters;
- 查询优化
- 使用适当的时间过滤条件
- 考虑数据分区策略
- 避免在高并发环境下执行大范围的百分位数查询
6.3 函数限制
-
参数限制
- 最多支持 10 个百分位数值
- 百分位数值必须在 0-100 范围内
- 不支持窗口查询中的 GROUP BY
-
语法限制
- 不支持函数嵌套
- 不支持在 WHERE 子句中使用
- 需要重复扫描数据,性能较低
6.4 结果解释
-
单值结果
- 当只有一个百分位数参数时,返回 DOUBLE 类型数值
- 结果表示有指定百分比的数据小于等于该值
-
多值结果
- 多个百分位数参数返回 JSON 格式字符串
- 需要在应用层解析 JSON 获取具体数值
-- 示例:解析多百分位数结果
SELECT PERCENTILE(voltage, 25, 50, 75) AS voltage_quartiles FROM meters;
-- 返回类似:{"25":218.5, "50":220.0, "75":221.8}
6.5 应用建议
-
合理选择百分位数
- P50(中位数):反映典型水平
- P90/P95:识别高负荷情况
- P5/P10:识别低负荷或异常情况
- P99:极值分析
-
结合其他统计指标
- 配合平均值、标准差等指标综合分析
- 结合时间序列分析识别趋势
- 考虑数据的时间相关性
-
定期更新基线
- 随着用电模式变化更新百分位数基线
- 考虑季节性因素的影响
- 建立动态的监控阈值
7. 总结
PERCENTILE 函数是智能电表数据分析中的重要工具,能够有效评估电力系统的性能分布和运行状态。在实际应用中,应该:
- 根据具体分析目标选择合适的百分位数
- 注意数据质量和查询性能
- 结合业务场景合理解释统计结果
- 建立基于百分位数的监控和告警机制
通过合理使用 PERCENTILE 函数,可以为电力系统的运维管理、容量规划和用户服务提供科学的数据支撑。
关于 TDengine
TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。
它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。