counter_agg()functions
工具包TimescaleDB 工具包函数在 Timescale 社区版下可用。它们与 Timescale 自动捆绑在一起,但必须为自托管的 TimescaleDB 单独安装。点击了解更多。简介
分析其值被设计为单调递增的数据,其中任何减少都被视为重置。counter_agg
函数简化了此任务,这在纯 SQL 中可能很难实现。
如果您的读数可能下降,也可能上升,请使用gauge_agg
代替。
相关超函数组
警告
此函数组包含一些实验性函数。实验性函数可能会在将来的版本中更改或删除。我们不建议在生产中使用它们。实验性函数用实验性标签标记。
聚合
- counter_agg
- 将计数器数据聚合到中间形式以供进一步分析
访问器
- corr
- 从计数器聚合中计算相关系数
- counter_zero_time
- 计算计数器值预测为零的时间
- delta
- 从计数器聚合中计算计数器的变化
- extrapolated_delta
- 从计数器聚合中计算外推变化
- extrapolated_rate
- 从计数器聚合中计算外推变化率
- first_time
- 从计数器聚合中获取第一个时间戳
- first_val
- 从计数器聚合中获取第一个值
- idelta_left
- 计算计数器聚合左侧或最早边缘的瞬时变化
- idelta_right
- 计算计数器聚合右侧或最新边缘的瞬时变化
- intercept
- 从计数器聚合中计算 y 轴截距
- interpolated_delta
- 实验性计算计数器的变化,根据需要对边界值进行插值
- interpolated_rate
- 实验性计算计数器变化率,根据需要对边界值进行插值
- irate_left
- 计算计数器聚合左侧或最早边缘的瞬时变化率
- irate_right
- 计算计数器聚合右侧或最新边缘的瞬时变化率
- last_time
- 从计数器聚合中获取最后一个时间戳
- last_val
- 从计数器聚合中获取最后一个值
- num_changes
- 从计数器聚合中获取计数器更改的次数
- num_elements
- 从计数器聚合中获取具有不同时间戳的点数
- num_resets
- 从计数器聚合中获取计数器重置的次数
- rate
- 从计数器聚合中计算变化率
- slope
- 从计数器聚合中计算斜率
- time_delta
- 计算从计数器聚合中获取的第一个和最后一个时间的差
汇总
- rollup
- 组合多个计数器聚合
变异器
- with_bounds
- 将边界添加到计数器聚合
counter_agg(ts TIMESTAMPTZ,value DOUBLE PRECISION[, bounds TSTZRANGE]) RETURNS CounterSummary
这是对计数器数据执行任何聚合计算的第一步。使用 counter_agg
从您的数据创建中间聚合。然后,此中间形式可以被此组中的一个或多个访问器使用,以计算最终结果。或者,您可以使用rollup()
将多个中间聚合对象组合起来,然后再应用访问器。
必需参数
名称 | 类型 | 描述 |
---|---|---|
ts | TIMESTAMPTZ | 每个点的时刻 |
value | DOUBLE PRECISION | 每个点的计数器值 |
可选参数
名称 | 类型 | 描述 |
---|---|---|
bounds | TSTZRANGE | 可以输入到此聚合的最小和最大可能时间。外推需要边界,而其他访问器函数则不需要。如果您在聚合创建时未指定边界,则可以使用with_bounds 函数在稍后添加它们。 |
返回值
列 | 类型 | 描述 |
---|---|---|
counter_agg | CounterSummary | 计数器聚合,包含有关变量的中间形式的数据。将聚合传递给计数器聚合 API 中的访问器函数以执行最终计算。或者,将聚合传递给汇总函数以将多个计数器聚合组合成更大的聚合。 |
示例
创建一个计数器聚合来汇总每日计数器数据
SELECTtime_bucket('1 day'::interval, ts) as dt,counter_agg(ts, val) AS csFROM fooWHERE id = 'bar'GROUP BY time_bucket('1 day'::interval, ts)
corr(summary CounterSummary) RETURNS DOUBLE PRECISION
从计数器聚合中计算相关系数。该计算使用线性最小二乘拟合,并返回 0.0 到 1.0 之间的值,从无相关性到最强可能的相关性。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
corr | DOUBLE PRECISION | 使用时间作为自变量,计数器值作为因变量计算的相关系数。 |
示例
计算相关系数以确定计数器值与时间之间线性拟合的优劣
SELECTid,bucket,corr(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
counter_zero_time(summary CounterSummary) RETURNS TIMESTAMPTZ
计算计数器值预测为零的时间。这是计数器值与时间之间线性拟合的 x 轴截距。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
counter_zero_time | TIMESTAMPTZ | 计数器值预测为零的时间 |
示例
估计计数器启动的时间
SELECTid,bucket,counter_zero_time(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
delta(summary CounterSummary) RETURNS DOUBLE PRECISION
获取一段时间内计数器的变化。这是简单增量,通过从第一个值中减去最后一个值来计算,并考虑重置。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
delta | DOUBLE PRECISION | 在分组时间段内计数器的变化 |
示例
获取表格 foo
中每个计数器在整个时间段内的变化
SELECTid,delta(summary)FROM (SELECTid,counter_agg(ts, val) AS summaryFROM fooGROUP BY id) t
extrapolated_delta(summary CounterSummary,method TEXT) RETURNS DOUBLE PRECISION
计算计数器在计数器聚合中的边界指定的时间段内的变化。extrapolated_delta
函数需要指定边界才能工作。您可以在原始counter_agg
调用中提供它们,或者通过对现有计数器聚合使用with_bounds
函数来提供它们。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
method | TEXT | 要使用的外推方法。不区分大小写。唯一允许的值是 prometheus ,用于 Prometheus 外推协议。 |
返回值
列 | 类型 | 描述 |
---|---|---|
extrapolated_delta | DOUBLE PRECISION | 计数器在计数器聚合的时间段内的外推变化。 |
示例
外推每个 15 分钟时间段内计数器的变化
SELECTid,bucket,extrapolated_delta(with_bounds(summary,toolkit_experimental.time_bucket_range('15 min'::interval, bucket)),'prometheus')FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t;
extrapolated_rate(summary CounterSummary,method TEXT) RETURNS DOUBLE PRECISION
计算计数器在计数器聚合中的边界指定的时间段内的变化率。extrapolated_rate
函数需要指定边界才能工作。您可以在原始counter_agg
调用中提供它们,或者通过对现有计数器聚合使用with_bounds
函数来提供它们。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
method | TEXT | 要使用的外推方法。不区分大小写。唯一允许的值是 prometheus ,用于 Prometheus 外推协议。 |
返回值
列 | 类型 | 描述 |
---|---|---|
extrapolated_rate | DOUBLE PRECISION | 计数器在计数器聚合的时间段内的外推变化率。 |
示例
SELECTid,bucket,extrapolated_rate(with_bounds(summary,toolkit_experimental.time_bucket_range('15 min'::interval, bucket)),'prometheus')FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t;
first_time(cs CounterSummary) RETURNS TIMESTAMPTZ
从计数器聚合中获取第一个时间戳。
必需参数
名称 | 类型 | 描述 |
---|---|---|
cs | CounterSummary | 使用counter_agg 生成的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
first_time | TIMESTAMPTZ | 计数器聚合中第一个点的時間戳 |
示例
获取每个每日计数器聚合的第一个和最后一个点
WITH t as (SELECTtime_bucket('1 day'::interval, ts) as dt,counter_agg(ts, val) AS cs -- get a CounterSummaryFROM tableGROUP BY time_bucket('1 day'::interval, ts))SELECTdt,first_time(cs) -- extract the timestamp of the first point in the CounterSummarylast_time(cs) -- extract the timestamp of the last point in the CounterSummaryFROM t;
first_val(cs CounterSummary) RETURNS DOUBLE PRECISION
从计数器聚合中获取第一个点的值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
cs | CounterSummary | 使用counter_agg 生成的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
first_val | DOUBLE PRECISION | 计数器聚合中第一个点的值 |
示例
获取每个每日计数器聚合的第一个和最后一个值
WITH t as (SELECTtime_bucket('1 day'::interval, ts) as dt,counter_agg(ts, val) AS cs -- get a CounterSummaryFROM tableGROUP BY time_bucket('1 day'::interval, ts))SELECTdt,first_val(cs) -- extract the value of the first point in the CounterSummarylast_val(cs) -- extract the value of the last point in the CounterSummaryFROM t;
idelta_left(summary CounterSummary) RETURNS DOUBLE PRECISION
计算计数器聚合左侧或最早边缘的瞬时变化。这等于第二个值减去第一个值,并考虑重置。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
idelta_left | DOUBLE PRECISION | 计数器聚合左侧或最早边缘的瞬时增量 |
示例
获取每个 15 分钟计数器聚合开始时的瞬时变化
SELECTid,bucket,idelta_left(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
idelta_right(summary CounterSummary) RETURNS DOUBLE PRECISION
计算计数器聚合右侧或最新边缘的瞬时变化。这等于最后一个值减去倒数第二个值,并考虑重置。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
idelta_right | DOUBLE PRECISION | 计数器聚合右侧或最新边缘的瞬时增量 |
示例
获取每个 15 分钟计数器聚合结束时的瞬时变化
SELECTid,bucket,idelta_right(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
intercept(summary CounterSummary) RETURNS DOUBLE PRECISION
计算计数器值和时间之间的线性最小二乘拟合的 y 轴截距。这对应于 PostgreSQL 纪元 `(2000-01-01 00:00:00+00)` 的预测值。您可以使用 y 轴截距和斜率来绘制最佳拟合线。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
intercept | DOUBLE PRECISION | 线性最小二乘拟合的 y 轴截距 |
示例
计算每个 15 分钟计数器聚合的线性拟合的 y 轴截距
SELECTid,bucket,intercept(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
interpolated_delta(summary CounterSummary,start TIMESTAMPTZ,interval INTERVAL[, prev CounterSummary][, next CounterSummary]) RETURNS DOUBLE PRECISION
计算计数器聚合所涵盖的时间段内计数器的变化。不需要时间段精确边界处的数据点。该函数在需要时从相邻计数器聚合中插值边界处的计数器值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
start | TIMESTAMPTZ | 计算 delta 的时间段的开始 |
interval | INTERVAL | 计算 delta 的时间段的长度 |
可选参数
名称 | 类型 | 描述 |
---|---|---|
prev | CounterSummary | 来自先前间隔的计数器聚合,用于插值 `start` 处的值。如果为 `NULL`,则 `summary` 中的第一个时间戳将用作间隔的开始。 |
next | CounterSummary | 来自下一个间隔的计数器聚合,用于插值 `start + interval` 处的值。如果为 `NULL`,则 `summary` 中的最后一个时间戳将用作间隔的结束。 |
返回值
列 | 类型 | 描述 |
---|---|---|
interpolated_delta | DOUBLE PRECISION | 时间间隔的第一点和最后点之间的差值。如果原始数据中缺少第一点和最后点的精确值,则这些值将从相邻计数器聚合中线性插值。 |
示例
计算每个 15 分钟间隔的计数器 delta,使用插值在间隔边界处获取值(如果数据中不存在)。
SELECTid,bucket,interpolated_delta(summary,bucket,'15 min',LAG(summary) OVER (PARTITION BY id ORDER by bucket),LEAD(summary) OVER (PARTITION BY id ORDER by bucket))FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
interpolated_rate(summary CounterSummary,start TIMESTAMPTZ,interval INTERVAL[, prev CounterSummary][, next CounterSummary]) RETURNS DOUBLE PRECISION
计算时间段内计数器的变化率。不需要时间段精确边界处的数据点。该函数在需要时从相邻计数器聚合中插值边界处的计数器值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
start | TIMESTAMPTZ | 计算速率的时间段的开始 |
interval | INTERVAL | 计算速率的时间段的长度 |
可选参数
名称 | 类型 | 描述 |
---|---|---|
prev | CounterSummary | 来自先前间隔的计数器聚合,用于插值 `start` 处的值。如果为 `NULL`,则 `summary` 中的第一个时间戳将用作间隔的开始。 |
next | CounterSummary | 来自下一个间隔的计数器聚合,用于插值 `start + interval` 处的值。如果为 `NULL`,则 `summary` 中的最后一个时间戳将用作间隔的结束。 |
返回值
列 | 类型 | 描述 |
---|---|---|
interpolated_rate | DOUBLE PRECISION | 指定边界之间计数器的每秒变化率。如果原始数据中缺少第一点和最后点的精确值,则这些值将从相邻计数器聚合中线性插值。 |
示例
计算每个 15 分钟间隔的每秒变化率,使用插值在间隔边界处获取值(如果数据中不存在)。
SELECTid,bucket,interpolated_rate(summary,bucket,'15 min',LAG(summary) OVER (PARTITION BY id ORDER by bucket),LEAD(summary) OVER (PARTITION BY id ORDER by bucket))FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
irate_left(summary CounterSummary) RETURNS DOUBLE PRECISION
计算计数器聚合的左侧(或最早)边缘的瞬时变化率。这等于第二个值减去第一个值,除以两点之间的时间差,在考虑重置后。此计算适用于快速变化的计数器。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
idelta_left | DOUBLE PRECISION | 计数器聚合的左侧(或最早)边缘的瞬时变化率 |
示例
获取每个 15 分钟计数器聚合开始处的瞬时变化率
SELECTid,bucket,irate_left(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
irate_right(summary CounterSummary) RETURNS DOUBLE PRECISION
计算计数器聚合的右侧(或最新)边缘的瞬时变化率。这等于最后一个值减去倒数第二个值,除以两点之间的时间差,在考虑重置后。此计算适用于快速变化的计数器。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
idelta_right | DOUBLE PRECISION | 计数器聚合的右侧(或最新)边缘的瞬时变化率 |
示例
获取每个 15 分钟计数器聚合结束处的瞬时变化率
SELECTid,bucket,irate_right(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
last_time(cs CounterSummary) RETURNS TIMESTAMPTZ
从计数器聚合中获取最后一个时间戳。
必需参数
名称 | 类型 | 描述 |
---|---|---|
cs | CounterSummary | 使用counter_agg 生成的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
last_time | TIMESTAMPTZ | 计数器聚合中最后一点的时间戳 |
示例
获取每个每日计数器聚合的第一个和最后一个点
WITH t as (SELECTtime_bucket('1 day'::interval, ts) as dt,counter_agg(ts, val) AS cs -- get a CounterSummaryFROM tableGROUP BY time_bucket('1 day'::interval, ts))SELECTdt,first_time(cs) -- extract the timestamp of the first point in the CounterSummarylast_time(cs) -- extract the timestamp of the last point in the CounterSummaryFROM t;
last_val(cs CounterSummary) RETURNS DOUBLE PRECISION
从计数器聚合中获取最后一点的值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
cs | CounterSummary | 使用counter_agg 生成的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
last_val | DOUBLE PRECISION | 计数器聚合中最后一点的值 |
示例
获取每个每日计数器聚合的第一个和最后一个值
WITH t as (SELECTtime_bucket('1 day'::interval, ts) as dt,counter_agg(ts, val) AS cs -- get a CounterSummaryFROM tableGROUP BY time_bucket('1 day'::interval, ts))SELECTdt,first_val(cs) -- extract the value of the first point in the CounterSummarylast_val(cs) -- extract the value of the last point in the CounterSummaryFROM t;
num_changes(summary CounterSummary) RETURNS BIGINT
获取计数器在计数器聚合汇总的期间内更改的次数。任何更改都会被计入,包括重置为零。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用 counter_agg 创建的计数器摘要 |
返回值
列 | 类型 | 描述 |
---|---|---|
num_changes | BIGINT | 计数器更改的次数 |
示例
获取每个 15 分钟间隔内计数器更改的次数
SELECTid,bucket,num_changes(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
num_elements(summary CounterSummary) RETURNS BIGINT
从计数器聚合中获取具有不同时间戳的点数。重复的时间戳将被忽略。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
num_elements | BIGINT | 具有不同时间戳的点数 |
示例
获取每个 15 分钟计数器聚合的点数
SELECTid,bucket,num_elements(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
num_resets(summary CounterSummary) RETURNS BIGINT
获取计数器重置的次数。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
num_resets | BIGINT | 计数器聚合内的重置次数 |
示例
获取每个 15 分钟计数器聚合的计数器重置次数
SELECTid,bucket,num_resets(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
rate(summary CounterSummary) RETURNS DOUBLE PRECISION
计算计数器的变化率。这是简单的速率,等于最后一个值减去第一个值,除以经过的时间,在考虑重置后。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
rate | DOUBLE PRECISION | 计数器的变化率 |
示例
获取整个记录间隔内每个 `id` 的变化率
SELECTid,rate(summary)FROM (SELECTid,counter_agg(ts, val) AS summaryFROM fooGROUP BY id) t
slope(summary CounterSummary) RETURNS DOUBLE PRECISION
计算计数器聚合的线性最小二乘拟合的斜率。因变量是计数器值(已针对重置进行调整),自变量是时间。时间始终以秒为单位,因此斜率估计每秒的变化率。这给出了与 rate
相似的结果,但它可以更准确地反映在出现不频繁的、异常大的变化的情况下计数器的正常行为。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
slope | DOUBLE PRECISION | 线性最小二乘拟合的斜率 |
示例
计算每个 `id` 和每个 15 分钟间隔的计数器斜率
SELECTid,bucket,slope(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
time_delta(summary CounterSummary) RETURNS DOUBLE PRECISION
获取计数器聚合中第一个和最后一个测量值之间的时间差(以秒为单位)。
必需参数
名称 | 类型 | 描述 |
---|---|---|
summary | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
time_delta | DOUBLE PRECISION | 第一个和最后一个时间之间的差异(以秒为单位) |
示例
获取每个 15 分钟间隔的第一个和最后一个计数器读数之间的时间差。请注意,此差异不一定等于 `15 分钟 * 60 秒 / 分钟`,因为第一个和最后一个读数可能没有正好落在间隔边界上。
SELECTid,bucket,time_delta(summary)FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
rollup(cs CounterSummary) RETURNS CounterSummary
此函数将多个计数器聚合组合成一个。这可以用来将来自相邻间隔的聚合组合成一个更大的间隔,例如将每日聚合汇总成每周或每月聚合。
必需参数
名称 | 类型 | 描述 |
---|---|---|
cs | CounterSummary | 使用counter_agg 创建的计数器聚合 |
返回值
列 | 类型 | 描述 |
---|---|---|
counter_agg | CounterSummary | 通过组合输入计数器聚合创建的新的计数器聚合 |
with_bounds(summary CounterSummary,bounds TSTZRANGE,) RETURNS CounterSummary
向已计算的计数器聚合添加时间边界。边界对于对聚合使用外推访问器是必需的。
必需参数
名称 | 类型 | 描述 |
---|---|---|
cs | CounterSummary | 使用counter_agg 创建的计数器聚合 |
bounds | TSTZRANGE | 一个 `timestamptz` 范围,给出计数器聚合中允许的最小和最大时间 |
返回值
列 | 类型 | 描述 |
---|---|---|
counter_agg | CounterSummary | 一个应用了边界的新的计数器聚合 |
示例
为每个 `id` 和每个 15 分钟间隔创建一个计数器聚合。然后向计数器聚合添加边界,以便您可以计算外推速率。
SELECTid,bucket,extrapolated_rate(with_bounds(summary,time_bucket_range('15 min'::interval, bucket)))FROM (SELECTid,time_bucket('15 min'::interval, ts) AS bucket,counter_agg(ts, val) AS summaryFROM fooGROUP BY id, time_bucket('15 min'::interval, ts)) t
为具有 id `bar` 的计数器创建每日计数器聚合
SELECTdate_trunc('day', ts) as dt,counter_agg(ts, val) AS counter_summary -- get a counter aggregateFROM fooWHERE id = 'bar'GROUP BY date_trunc('day')
汇总每日聚合以获取涵盖所有记录时间戳的计数器聚合
WITH t as (SELECTdate_trunc('day', ts) as dt,counter_agg(ts, val) AS counter_summary -- get a counter aggregateFROM fooWHERE id = 'bar'GROUP BY date_trunc('day'))SELECT rollup(counter_summary) AS full_cs -- do a second level of aggregation to get the full counter aggregateFROM t
计算每个每日计数器聚合的 delta(或最终值和第一个值之间的差异)。还计算每天发生的 delta 的总量的比例
WITH t as (SELECTdate_trunc('day', ts) as dt,counter_agg(ts, val) AS counter_summary -- get a counter aggregateFROM fooWHERE id = 'bar'GROUP BY date_trunc('day')), q as (SELECT rollup(counter_summary) AS full_cs -- do a second level of aggregation to get the full counter aggregateFROM t)SELECTdt,delta(counter_summary), -- extract the delta from the daily counter aggregatesdelta(counter_summary) / (SELECT delta(full_cs) FROM q LIMIT 1) as normalized -- get the fraction of the delta that happened each day compared to the full change of the counterFROM t;
关键字
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面。