筛选和缩小函数 - Amazon Timestream
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

筛选和缩小函数

Amazon Timestream 支持对时间序列数据执行筛选和减少操作的功能。本节提供 LiveAnalytics 筛选和缩减函数的时间流的用法信息,以及示例查询。

使用情况信息

函数 输出数据类型 描述

filter(timeseries(T), function(T, Boolean))

时间序列 (T)

根据输入的时间序列构造一个时间序列,使用传递的function返回true值。

reduce(timeseries(T), initialState S, inputFunction(S, T, S), outputFunction(S, R))

R

返回从时间序列中减去的单个值。inputFunction将按顺序对时间序列中的每个元素调用。除了获取当前元素外,InputFunction 还会获取当前状态(最初initialState)并返回新状态。outputFunction将调用以将最终状态转换为结果值。outputFunction可以是标识函数。

查询示例

构造主机的 CPU 利用率的时间序列以及测量值大于 70 的过滤点:

WITH time_series_view AS ( SELECT INTERPOLATE_LINEAR( CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user FROM sample.DevOps WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization' AND time > ago(30m) GROUP BY hostname ) SELECT FILTER(cpu_user, x -> x.value > 70.0) AS cpu_above_threshold from time_series_view

构造主机的 CPU 利用率的时间序列并确定测量值的总和平方:

WITH time_series_view AS ( SELECT INTERPOLATE_LINEAR( CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user FROM sample.DevOps WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization' AND time > ago(30m) GROUP BY hostname ) SELECT REDUCE(cpu_user, DOUBLE '0.0', (s, x) -> x.value * x.value + s, s -> s) from time_series_view

构造主机的 CPU 利用率的时间序列,并确定超过 CPU 阈值的样本比例:

WITH time_series_view AS ( SELECT INTERPOLATE_LINEAR( CREATE_TIME_SERIES(time, ROUND(measure_value::double,2)), SEQUENCE(ago(15m), ago(1m), 10s)) AS cpu_user FROM sample.DevOps WHERE hostname = 'host-Hovjv' and measure_name = 'cpu_utilization' AND time > ago(30m) GROUP BY hostname ) SELECT ROUND( REDUCE(cpu_user, -- initial state CAST(ROW(0, 0) AS ROW(count_high BIGINT, count_total BIGINT)), -- function to count the total points and points above a certain threshold (s, x) -> CAST(ROW(s.count_high + IF(x.value > 70.0, 1, 0), s.count_total + 1) AS ROW(count_high BIGINT, count_total BIGINT)), -- output function converting the counts to fraction above threshold s -> IF(s.count_total = 0, NULL, CAST(s.count_high AS DOUBLE) / s.count_total)), 4) AS fraction_cpu_above_threshold from time_series_view