篩選和減少函數 - Amazon Timestream

如需類似 Amazon Timestream for LiveAnalytics 的功能,請考慮使用 Amazon Timestream for InfluxDB。它提供簡化的資料擷取和單一位數毫秒查詢回應時間,以進行即時分析。在這裡進一步了解。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

篩選和減少函數

Amazon Timestream 支援執行篩選和減少時間序列資料操作的函數。本節提供 Timestream for LiveAnalytics 篩選和減少函數的使用資訊,以及範例查詢。

用量資訊

函式 輸出資料類型 描述

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

timeseries(T)

使用傳遞的 function傳回 的值,從輸入時間序列建構時間序列true

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

R

傳回單一值,從時間序列減少。inputFunction 將依序在時間序列中的每個元素上調用 。除了採用目前元素之外,inputFunction 也會採用目前狀態 (一開始為 initialState),並傳回新狀態。outputFunction 將調用 ,將最終狀態轉換為結果值。outputFunction 可以是身分函數。

查詢範例

建構測量大於 70 的主機和篩選條件點的 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 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