Timescale Cloud:性能、规模、企业级

自托管产品

MST

介绍

分析其值设计为单调递增,且任何减少都被视为重置的数据。counter_agg 函数简化了这项任务,这在纯 SQL 中可能很难实现。

如果您的读数可能减少也可能增加,请改用 gauge_agg

相关 Hyperfunction 组

聚合

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() 组合多个中间聚合对象。

必需参数
名称类型描述
tsTIMESTAMPTZ每个点的时间
valueDOUBLE PRECISION每个点的计数器值
可选参数
名称类型描述
boundsTSTZRANGE可以输入此聚合的最小和最大可能时间。外推需要边界,但其他访问器函数不需要。如果您在聚合创建时未指定边界,则可以稍后使用 with_bounds 函数添加它们。
返回值
类型描述
counter_aggCounterSummary计数器聚合,包含变量的中间形式数据。将此聚合传递给计数器聚合 API 中的访问器函数以执行最终计算。或者,将此聚合传递给 rollup 函数以将多个计数器聚合组合成更大的聚合。
示例

创建计数器聚合以汇总每日计数器数据

SELECT
time_bucket('1 day'::interval, ts) as dt,
counter_agg(ts, val) AS cs
FROM foo
WHERE id = 'bar'
GROUP BY time_bucket('1 day'::interval, ts)
corr(
summary CounterSummary
) RETURNS DOUBLE PRECISION

从计数器聚合中计算相关系数。计算使用线性最小二乘拟合,并返回介于 0.0 和 1.0 之间的值,从无相关性到最强的相关性。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
corrDOUBLE PRECISION以时间为自变量,计数器值为因变量计算的相关系数。
示例

计算相关系数以确定计数器值与时间之间线性拟合的优劣

SELECT
id,
bucket,
corr(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
counter_zero_time(
summary CounterSummary
) RETURNS TIMESTAMPTZ

计算计数器值预计为零的时间。这是计数器值与时间之间线性拟合的 x 截距。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
counter_zero_timeTIMESTAMPTZ计数器值预计为零的时间
示例

估算计数器启动时间

SELECT
id,
bucket,
counter_zero_time(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
delta(
summary CounterSummary
) RETURNS DOUBLE PRECISION

获取计数器在一段时间内的变化。这是简单的差值,通过从第一个值中减去最后一个可见值(并考虑重置)来计算。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
deltaDOUBLE PRECISION计数器在分桶间隔内的变化
示例

获取表 foo 中每个计数器在整个时间间隔内的变化

SELECT
id,
delta(summary)
FROM (
SELECT
id,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id
) t
extrapolated_delta(
summary CounterSummary,
method TEXT
) RETURNS DOUBLE PRECISION

计算计数器在计数器聚合中由边界指定的时间段内的变化。extrapolated_delta 函数需要指定边界才能工作。您可以在最初的 counter_agg 调用中提供它们,或者通过对现有计数器聚合使用 with_bounds 函数。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
methodTEXT要使用的外推方法。不区分大小写。唯一允许的值是 prometheus,用于 Prometheus 外推协议。
返回值
类型描述
extrapolated_deltaDOUBLE PRECISION计数器在计数器聚合时间段内的外推变化。
示例

外推每 15 分钟间隔内计数器的变化

SELECT
id,
bucket,
extrapolated_delta(
with_bounds(
summary,
toolkit_experimental.time_bucket_range('15 min'::interval, bucket)
),'prometheus'
)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t;
extrapolated_rate(
summary CounterSummary,
method TEXT
) RETURNS DOUBLE PRECISION

计算计数器在计数器聚合中由边界指定的时间段内的变化率。extrapolated_rate 函数需要指定边界才能工作。您可以在最初的 counter_agg 调用中提供它们,或者通过对现有计数器聚合使用 with_bounds 函数。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
methodTEXT要使用的外推方法。不区分大小写。唯一允许的值是 prometheus,用于 Prometheus 外推协议。
返回值
类型描述
extrapolated_rateDOUBLE PRECISION计数器在计数器聚合时间段内的外推变化率。
示例
SELECT
id,
bucket,
extrapolated_rate(
with_bounds(
summary,
toolkit_experimental.time_bucket_range('15 min'::interval, bucket)
),'prometheus'
)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t;
first_time(
cs CounterSummary
) RETURNS TIMESTAMPTZ

从计数器聚合中获取第一个时间戳。

必需参数
名称类型描述
csCounterSummary使用 counter_agg 生成的计数器聚合
返回值
类型描述
first_timeTIMESTAMPTZ计数器聚合中第一个点的时间戳
示例

获取每个每日计数器聚合的第一个和最后一个点

WITH t as (
SELECT
time_bucket('1 day'::interval, ts) as dt,
counter_agg(ts, val) AS cs -- get a CounterSummary
FROM table
GROUP BY time_bucket('1 day'::interval, ts)
)
SELECT
dt,
first_time(cs) -- extract the timestamp of the first point in the CounterSummary
last_time(cs) -- extract the timestamp of the last point in the CounterSummary
FROM t;
first_val(
cs CounterSummary
) RETURNS DOUBLE PRECISION

从计数器聚合中获取第一个点的值。

必需参数
名称类型描述
csCounterSummary使用 counter_agg 生成的计数器聚合
返回值
类型描述
first_valDOUBLE PRECISION计数器聚合中第一个点的值
示例

获取每个每日计数器聚合的第一个和最后一个值

WITH t as (
SELECT
time_bucket('1 day'::interval, ts) as dt,
counter_agg(ts, val) AS cs -- get a CounterSummary
FROM table
GROUP BY time_bucket('1 day'::interval, ts)
)
SELECT
dt,
first_val(cs) -- extract the value of the first point in the CounterSummary
last_val(cs) -- extract the value of the last point in the CounterSummary
FROM t;
idelta_left(
summary CounterSummary
) RETURNS DOUBLE PRECISION

计算计数器聚合左侧(或最早)边缘的瞬时变化。这等于第二个值减去第一个值(并考虑重置)。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
idelta_leftDOUBLE PRECISION计数器聚合左侧(或最早)边缘的瞬时差值
示例

获取每个 15 分钟计数器聚合开始时的瞬时变化

SELECT
id,
bucket,
idelta_left(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
idelta_right(
summary CounterSummary
) RETURNS DOUBLE PRECISION

计算计数器聚合右侧(或最新)边缘的瞬时变化。这等于最后一个值减去倒数第二个值(并考虑重置)。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
idelta_rightDOUBLE PRECISION计数器聚合右侧(或最新)边缘的瞬时差值
示例

获取每个 15 分钟计数器聚合结束时的瞬时变化

SELECT
id,
bucket,
idelta_right(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP 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 截距和斜率绘制最佳拟合线。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
interceptDOUBLE PRECISION线性最小二乘拟合的 y 截距
示例

计算每个 15 分钟计数器聚合的线性拟合的 y 截距

SELECT
id,
bucket,
intercept(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
interpolated_delta(
summary CounterSummary,
start TIMESTAMPTZ,
interval INTERVAL
[, prev CounterSummary]
[, next CounterSummary]
) RETURNS DOUBLE PRECISION

计算计数器在计数器聚合所覆盖时间段内的变化。不需要时间段精确边界处的数据点。如果需要,函数会从相邻计数器聚合中插值边界处的计数器值。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
startTIMESTAMPTZ计算差值的时间段的开始
intervalINTERVAL计算差值的时间段的长度
可选参数
名称类型描述
prevCounterSummary来自前一个间隔的计数器聚合,用于插值 start 处的值。如果为 NULL,则使用 summary 中的第一个时间戳作为间隔的开始。
nextCounterSummary来自下一个间隔的计数器聚合,用于插值 start + interval 处的值。如果为 NULL,则使用 summary 中的最后一个时间戳作为间隔的结束。
返回值
类型描述
interpolated_deltaDOUBLE PRECISION时间间隔的第一个点和最后一个点之间的差值。如果原始数据中缺少第一个点和最后一个点的精确值,则这些值将从相邻计数器聚合中进行线性插值。
示例

计算每个 15 分钟间隔的计数器差值,如果数据中不存在间隔边界的值,则使用插值获取它们

SELECT
id,
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 (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
interpolated_rate(
summary CounterSummary,
start TIMESTAMPTZ,
interval INTERVAL
[, prev CounterSummary]
[, next CounterSummary]
) RETURNS DOUBLE PRECISION

计算计数器在一段时间内的变化率。不需要时间段精确边界处的数据点。如果需要,函数会从相邻计数器聚合中插值边界处的计数器值。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
startTIMESTAMPTZ计算变化率的时间段的开始
intervalINTERVAL计算变化率的时间段的长度
可选参数
名称类型描述
prevCounterSummary来自前一个间隔的计数器聚合,用于插值 start 处的值。如果为 NULL,则使用 summary 中的第一个时间戳作为间隔的开始。
nextCounterSummary来自下一个间隔的计数器聚合,用于插值 start + interval 处的值。如果为 NULL,则使用 summary 中的最后一个时间戳作为间隔的结束。
返回值
类型描述
interpolated_rateDOUBLE PRECISION在指定边界之间计数器每秒的变化率。如果原始数据中缺少第一个点和最后一个点的精确值,则这些值将从相邻计数器聚合中进行线性插值。
示例

计算每个 15 分钟间隔的每秒变化率,如果数据中不存在间隔边界的值,则使用插值获取它们

SELECT
id,
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 (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
irate_left(
summary CounterSummary
) RETURNS DOUBLE PRECISION

计算计数器聚合左侧(或最早)边缘的瞬时变化率。这等于第二个值减去第一个值,除以两点之间的时间差(并考虑重置)。此计算对于快速移动的计数器非常有用。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
idelta_leftDOUBLE PRECISION计数器聚合左侧(或最早)边缘的瞬时变化率
示例

获取每个 15 分钟计数器聚合开始时的瞬时变化率

SELECT
id,
bucket,
irate_left(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
irate_right(
summary CounterSummary
) RETURNS DOUBLE PRECISION

计算计数器聚合右侧(或最新)边缘的瞬时变化率。这等于最后一个值减去倒数第二个值,除以两点之间的时间差(并考虑重置)。此计算对于快速移动的计数器非常有用。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
idelta_rightDOUBLE PRECISION计数器聚合右侧(或最新)边缘的瞬时变化率
示例

获取每个 15 分钟计数器聚合结束时的瞬时变化率

SELECT
id,
bucket,
irate_right(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
last_time(
cs CounterSummary
) RETURNS TIMESTAMPTZ

从计数器聚合中获取最后一个时间戳。

必需参数
名称类型描述
csCounterSummary使用 counter_agg 生成的计数器聚合
返回值
类型描述
last_timeTIMESTAMPTZ计数器聚合中最后一个点的时间戳
示例

获取每个每日计数器聚合的第一个和最后一个点

WITH t as (
SELECT
time_bucket('1 day'::interval, ts) as dt,
counter_agg(ts, val) AS cs -- get a CounterSummary
FROM table
GROUP BY time_bucket('1 day'::interval, ts)
)
SELECT
dt,
first_time(cs) -- extract the timestamp of the first point in the CounterSummary
last_time(cs) -- extract the timestamp of the last point in the CounterSummary
FROM t;
last_val(
cs CounterSummary
) RETURNS DOUBLE PRECISION

从计数器聚合中获取最后一个点的值。

必需参数
名称类型描述
csCounterSummary使用 counter_agg 生成的计数器聚合
返回值
类型描述
last_valDOUBLE PRECISION计数器聚合中最后一个点的值
示例

获取每个每日计数器聚合的第一个和最后一个值

WITH t as (
SELECT
time_bucket('1 day'::interval, ts) as dt,
counter_agg(ts, val) AS cs -- get a CounterSummary
FROM table
GROUP BY time_bucket('1 day'::interval, ts)
)
SELECT
dt,
first_val(cs) -- extract the value of the first point in the CounterSummary
last_val(cs) -- extract the value of the last point in the CounterSummary
FROM t;
num_changes(
summary CounterSummary
) RETURNS BIGINT

获取计数器在计数器聚合汇总期间变化的次数。任何变化都计算在内,包括重置为零。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器摘要
返回值
类型描述
num_changesBIGINT计数器变化的次数
示例

获取计数器在每个 15 分钟间隔内变化的次数

SELECT
id,
bucket,
num_changes(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
num_elements(
summary CounterSummary
) RETURNS BIGINT

从计数器聚合中获取具有不同时间戳的点数。重复的时间戳将被忽略。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
num_elementsBIGINT具有不同时间戳的点数
示例

获取每个 15 分钟计数器聚合的点数

SELECT
id,
bucket,
num_elements(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
num_resets(
summary CounterSummary
) RETURNS BIGINT

获取计数器重置的次数。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
num_resetsBIGINT计数器聚合内的重置次数
示例

获取每个 15 分钟计数器聚合的计数器重置次数

SELECT
id,
bucket,
num_resets(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
rate(
summary CounterSummary
) RETURNS DOUBLE PRECISION

计算计数器的变化率。这是简单的变化率,等于最后一个值减去第一个值,除以经过的时间(并考虑重置)。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
rateDOUBLE PRECISION计数器的变化率
示例

获取整个记录间隔内每个 id 的变化率

SELECT
id,
rate(summary)
FROM (
SELECT
id,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id
) t
slope(
summary CounterSummary
) RETURNS DOUBLE PRECISION

计算计数器聚合的线性最小二乘拟合的斜率。因变量是计数器值(已针对重置进行调整),自变量是时间。时间始终以秒为单位,因此斜率估算每秒变化率。这给出的结果与 rate 类似,但在存在不频繁、异常大的变化时,它可以更准确地反映通常的计数器行为。

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
slopeDOUBLE PRECISION线性最小二乘拟合的斜率
示例

计算每个 id 和每个 15 分钟间隔的计数器斜率

SELECT
id,
bucket,
slope(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
time_delta(
summary CounterSummary
) RETURNS DOUBLE PRECISION

获取计数器聚合中第一次和最后一次测量之间的秒数

必需参数
名称类型描述
summaryCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
time_deltaDOUBLE PRECISION第一次和最后一次之间的时间差,以秒为单位
示例

获取每个 15 分钟间隔内第一次和最后一次计数器读数之间的时间差。请注意,这个差值不一定等于 15 分钟 * 60 秒 / 分钟,因为第一次和最后一次读数可能不完全落在间隔边界上

SELECT
id,
bucket,
time_delta(summary)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t
rollup(
cs CounterSummary
) RETURNS CounterSummary

此函数将多个计数器聚合组合成一个。这可以用于将相邻间隔的聚合组合成一个更大的间隔,例如将每日聚合汇总为每周或每月聚合。

必需参数
名称类型描述
csCounterSummary使用 counter_agg 创建的计数器聚合
返回值
类型描述
counter_aggCounterSummary通过组合输入计数器聚合创建的新计数器聚合
with_bounds(
summary CounterSummary,
bounds TSTZRANGE,
) RETURNS CounterSummary

向已计算的计数器聚合添加时间边界。边界对于在聚合上使用外推访问器是必需的。

必需参数
名称类型描述
csCounterSummary使用 counter_agg 创建的计数器聚合
boundsTSTZRANGE一个 timestamptz 范围,给出计数器聚合中允许的最小和最大时间
返回值
类型描述
counter_aggCounterSummary应用了边界的新计数器聚合
示例

为每个 id 和每个 15 分钟间隔创建计数器聚合。然后向计数器聚合添加边界,以便您可以计算外推率

SELECT
id,
bucket,
extrapolated_rate(
with_bounds(
summary,
time_bucket_range('15 min'::interval, bucket)
)
)
FROM (
SELECT
id,
time_bucket('15 min'::interval, ts) AS bucket,
counter_agg(ts, val) AS summary
FROM foo
GROUP BY id, time_bucket('15 min'::interval, ts)
) t

为 ID 为 bar 的计数器创建每日计数器聚合

SELECT
date_trunc('day', ts) as dt,
counter_agg(ts, val) AS counter_summary -- get a counter aggregate
FROM foo
WHERE id = 'bar'
GROUP BY date_trunc('day')

汇总每日聚合以获取涵盖所有记录时间戳的计数器聚合

WITH t as (
SELECT
date_trunc('day', ts) as dt,
counter_agg(ts, val) AS counter_summary -- get a counter aggregate
FROM foo
WHERE 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 aggregate
FROM t

从每个每日计数器聚合计算差值,即最终值与第一个值之间的差值。同时计算每天发生的总差值的比例

WITH t as (
SELECT
date_trunc('day', ts) as dt,
counter_agg(ts, val) AS counter_summary -- get a counter aggregate
FROM foo
WHERE 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 aggregate
FROM t
)
SELECT
dt,
delta(counter_summary), -- extract the delta from the daily counter aggregates
delta(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 counter
FROM t;

关键词

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