为了使常见的统计聚合更易于在窗口函数和连续聚合中使用,Timescale 提供的常见统计聚合形式与 PostgreSQL 中提供的形式略有不同。

此示例计算 measurements 表中值的平均值、标准差和峰度

SELECT
time_bucket('10 min'::interval, ts),
average(stats_agg(val)),
stddev(stats_agg(val), 'pop'),
kurtosis(stats_agg(val), 'pop')
FROM measurements
GROUP BY 1;

这使用两步聚合过程。第一步是聚合步骤 (stats_agg(val)),它创建聚合的机器可读形式。第二步是访问器。可用的访问器有 averagestddevkurtosis。访问器运行最终计算并以人类可读的方式输出计算值。这使您更容易构建查询,因为它区分了参数,并清楚地表明哪些聚合正在被重新聚合或汇总。此外,由于此查询语法用于所有 Timescale Toolkit 查询,当您习惯它时,您可以使用它来构建越来越复杂的查询。

一个更复杂的示例使用窗口函数来计算滚动窗口统计聚合。统计聚合首先在子查询中每分钟计算一次,然后使用 rolling 聚合在之前的每 15 分钟周期内重新聚合。访问器与前面的示例保持不变

SELECT
bucket,
average(rolling(stats_agg) OVER fifteen_min),
stddev(rolling(stats_agg) OVER fifteen_min, 'pop'),
kurtosis(rolling(stats_agg) OVER fifteen_min, 'pop')
FROM (SELECT
time_bucket('1 min'::interval, ts) AS bucket,
stats_agg(val)
FROM measurements
GROUP BY 1) AS stats
WINDOW fifteen_min as (ORDER BY bucket ASC RANGE '15 minutes' PRECEDING);

有关两步聚合方法的更多技术细节和使用示例,请参阅关于聚合的博客文章开发者文档

stats_agg 聚合有两种形式,一种是一维聚合(如本节前面所示),另一种是二维聚合。二维聚合接受两个变量 (Y, X),分别是因变量和自变量。二维聚合对每个单独的变量执行与执行单独的一维聚合相同的所有计算,此外还对这两个变量执行线性回归。一维值的访问器在名称后附加 _y_x。例如

SELECT
average_y(stats_agg(val2, val1)), -- equivalent to average(stats_agg(val2))
stddev_x(stats_agg(val2, val1)), -- equivalent to stddev(stats_agg(val1))
slope(stats_agg(val2, val1)) -- the slope of the least squares fit line of the values in val2 & val1
FROM measurements_multival;

有关统计聚合 API 调用的更多信息,请参阅超级函数 API 文档

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面