

要获得与亚马逊 Timestream 类似的功能 LiveAnalytics，可以考虑适用于 InfluxDB 的亚马逊 Timestream。适用于 InfluxDB 的 Amazon Timestream 提供简化的数据摄取和个位数毫秒级的查询响应时间，以实现实时分析。点击[此处](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)了解更多信息。

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

# 插值函数
<a name="timeseries-specific-constructs.functions.interpolation"></a>

如果时间序列数据在某些时间点存在事件缺失值，可通过插值法估计这些缺失事件的值。Amazon Timestream 支持四种插值变体：线性插值、三次样条插值、末次观测值结转（LOCF）插值以及常数插值。本节提供 LiveAnalytics插值函数的 Timestream 的用法信息以及示例查询。



## 使用情况信息
<a name="w2aab7c59c13c13c11b7"></a>


| 函数 | 输出数据类型 | 说明 | 
| --- | --- | --- | 
|  `interpolate_linear(timeseries, array[timestamp])`  |  时间序列  |  使用[线性插值](https://wikipedia.org/wiki/Linear_interpolation)填充缺失数据。  | 
|  `interpolate_linear(timeseries, timestamp)`  |  double  |  使用[线性插值](https://wikipedia.org/wiki/Linear_interpolation)填充缺失数据。  | 
|  `interpolate_spline_cubic(timeseries, array[timestamp])`  |  时间序列  |  使用[三次样条插值](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.)填充缺失数据。  | 
|  `interpolate_spline_cubic(timeseries, timestamp)`  |  double  |  使用[三次样条插值](https://wikiversity.org/wiki/Cubic_Spline_Interpolation#:~:text=Cubic%20spline%20interpolation%20is%20a,Lagrange%20polynomial%20and%20Newton%20polynomial.)填充缺失数据。  | 
|  `interpolate_locf(timeseries, array[timestamp])`  |  时间序列  |  使用上次采样值填充缺失数据。  | 
|  `interpolate_locf(timeseries, timestamp)`  |  double  |  使用上次采样值填充缺失数据。  | 
|  `interpolate_fill(timeseries, array[timestamp], double)`  |  时间序列  |  使用常量值填充缺失数据。  | 
|  `interpolate_fill(timeseries, timestamp, double)`  |  double  |  使用常量值填充缺失数据。  | 

## 查询示例
<a name="w2aab7c59c13c13c11b9"></a>

**Example**  
计算过去 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)
```

**Example**  
计算过去 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)
```