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

有关与适用于 LiveAnalytics 的 Amazon Timestream 类似的功能,可以考虑使用适用于 InfluxDB 的 Amazon Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间,以实现实时分析。点击此处了解更多信息。

插值函数

如果时间序列数据在某些时间点存在事件缺失值,可通过插值法估计这些缺失事件的值。Amazon Timestream 支持四种插值变体:线性插值、三次样条插值、末次观测值结转(LOCF)插值以及常数插值。本部分提供适用于 LiveAnalytics 的 Timestream 插值函数的使用说明及示例查询。

使用情况信息

函数 输出数据类型 描述

interpolate_linear(timeseries, array[timestamp])

时间序列

使用线性插值填充缺失数据。

interpolate_linear(timeseries, timestamp)

double

使用线性插值填充缺失数据。

interpolate_spline_cubic(timeseries, array[timestamp])

时间序列

使用三次样条插值填充缺失数据。

interpolate_spline_cubic(timeseries, timestamp)

double

使用三次样条插值填充缺失数据。

interpolate_locf(timeseries, array[timestamp])

时间序列

使用上次采样值填充缺失数据。

interpolate_locf(timeseries, timestamp)

double

使用上次采样值填充缺失数据。

interpolate_fill(timeseries, array[timestamp], double)

时间序列

使用常量值填充缺失数据。

interpolate_fill(timeseries, timestamp, double)

double

使用常量值填充缺失数据。

查询示例

计算过去 2 小时内特定 EC2 主机的 CPU 平均利用率,按 30 秒间隔进行分箱,并使用线性插值填补缺失值:

WITH binned_timeseries AS ( SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization FROM "sampleDB".DevOps WHERE measure_name = 'cpu_utilization' AND hostname = 'host-Hovjv' AND time > ago(2h) GROUP BY hostname, BIN(time, 30s) ), interpolated_timeseries AS ( SELECT hostname, INTERPOLATE_LINEAR( CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization), SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization FROM binned_timeseries GROUP BY hostname ) SELECT time, ROUND(value, 2) AS interpolated_cpu FROM interpolated_timeseries CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)

计算过去 2 小时内特定 EC2 主机的 CPU 平均利用率,按 30 秒间隔进行分箱,并使用基于末次观测值结转的插值填补缺失值:

WITH binned_timeseries AS ( SELECT hostname, BIN(time, 30s) AS binned_timestamp, ROUND(AVG(measure_value::double), 2) AS avg_cpu_utilization FROM "sampleDB".DevOps WHERE measure_name = 'cpu_utilization' AND hostname = 'host-Hovjv' AND time > ago(2h) GROUP BY hostname, BIN(time, 30s) ), interpolated_timeseries AS ( SELECT hostname, INTERPOLATE_LOCF( CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization), SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)) AS interpolated_avg_cpu_utilization FROM binned_timeseries GROUP BY hostname ) SELECT time, ROUND(value, 2) AS interpolated_cpu FROM interpolated_timeseries CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)