

如需與 Amazon Timestream for LiveAnalytics 類似的功能，請考慮使用 Amazon Timestream for InfluxDB。它提供簡化的資料擷取和單一位數毫秒查詢回應時間，以進行即時分析。[在這裡](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)進一步了解。

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

# 時間序列檢視
<a name="timeseries-specific-constructs.views"></a>

LiveAnalytics 的 Timestream 支援下列函數，可將您的資料轉換為 `timeseries`資料類型：

**Topics**
+ [CREATE\_TIME\_SERIES](#timeseries-specific-constructs.views.CREATE_TIME_SERIES)
+ [UNNEST](#timeseries-specific-constructs.views.UNNEST)

## CREATE\_TIME\_SERIES
<a name="timeseries-specific-constructs.views.CREATE_TIME_SERIES"></a>

 **CREATE\_TIME\_SERIES** 是一種彙總函數，會取得時間序列的所有原始測量 （時間和測量值），並傳回時間序列資料類型。此函數的語法如下：

```
CREATE_TIME_SERIES(time, measure_value::{{<data_type>}})
```

 其中 `<data_type>`是度量值的資料類型，可以是 bigint、布林值、雙值或 varchar 其中之一。第二個參數不能為 null。

考慮儲存在名為**指標**之資料表中的 EC2 執行個體 CPU 使用率，如下所示：


| 時間 | region | az | vpc | instance\_id | measure\_name | measure\_value::double | 
| --- | --- | --- | --- | --- | --- | --- | 
| 2019-12-04 19：00：00.000000000 | us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef0 | cpu\_utilization | 35.0 | 
| 2019-12-04 19：00：01.000000000 | us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef0 | cpu\_utilization | 38.2 | 
| 2019-12-04 19：00：02.000000000 | us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef0 | cpu\_utilization | 45.3 | 
| 2019-12-04 19：00：00.000000000 | us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef1 | cpu\_utilization | 54.1 | 
| 2019-12-04 19：00：01.000000000 | us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef1 | cpu\_utilization | 42.5 | 
| 2019-12-04 19：00：02.000000000 | us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef1 | cpu\_utilization | 33.7 | 

執行查詢：

```
SELECT region, az, vpc, instance_id, CREATE_TIME_SERIES(time, measure_value::double) as cpu_utilization FROM metrics
    WHERE measure_name=’cpu_utilization’
    GROUP BY region, az, vpc, instance_id
```

將傳回具有 `cpu_utilization`作為度量值的所有序列。在這種情況下，我們有兩個系列：


| region | az | vpc | instance\_id | cpu\_utilization | 
| --- | --- | --- | --- | --- | 
| us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef0 | 【{time： 2019-12-04 19：00：00.000000000， measure\_value：：double： 35.0}， {time： 2019-12-04 19：00：01.000000000， measure\_value：：double： 38.2}， {time： 2019-12-04 19：00：02.000000000， measure\_value：：double： 45.3}】 | 
| us-east-1 | us-east-1d | vpc-1a2b3c4d | i-1234567890abcdef1 | 【{time： 2019-12-04 19：00：00.000000000， measure\_value：：double： 35.1}， {time： 2019-12-04 19：00：01.000000000， measure\_value：：double： 38.5}， {time： 2019-12-04 19：00：02.000000000， measure\_value：：double： 45.7}】 | 

## UNNEST
<a name="timeseries-specific-constructs.views.UNNEST"></a>

 `UNNEST` 是一種資料表函數，可讓您將`timeseries`資料轉換為平面模型。語法如下：

 `UNNEST` 將 `timeseries` 轉換為兩個資料欄，即 `time`和 `value`。您也可以搭配 UNNEST 使用別名，如下所示：

```
UNNEST(timeseries) AS {{<alias_name>}} ({{time_alias}}, {{value_alias}})
```

其中 `<alias_name>`是平面資料表的別名， `time_alias` 是`time`欄的別名， `value_alias`是`value`欄的別名。

例如，假設機群中的某些 EC2 執行個體設定為以 5 秒間隔發出指標，其他執行個體則以 15 秒間隔發出指標，而您需要過去 6 小時內以 10 秒精細程度發出所有執行個體的平均指標。若要取得此資料，您可以使用 **CREATE\_TIME\_SERIES** 將指標轉換為時間序列模型。然後，您可以使用 **INTERPOLATE\_LINEAR** 以 10 秒精細程度取得缺少的值。接著，您可以使用 **UNNEST** 將資料轉換回一般模型，然後使用 **AVG** 取得所有執行個體的平均指標。

```
WITH interpolated_timeseries AS (
    SELECT region, az, vpc, instance_id,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(time, measure_value::double),
                SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization
    FROM timestreamdb.metrics 
    WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h)
    GROUP BY region, az, vpc, instance_id
)
SELECT region, az, vpc, instance_id, avg(t.cpu_util)
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_cpu_utilization) AS t (time, cpu_util)
GROUP BY region, az, vpc, instance_id
```

 上述查詢示範搭配別名使用 **UNNEST**。以下是未使用 **UNNEST** 別名的相同查詢範例：

```
WITH interpolated_timeseries AS (
    SELECT region, az, vpc, instance_id,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(time, measure_value::double),
                SEQUENCE(ago(6h), now(), 10s)) AS interpolated_cpu_utilization
    FROM timestreamdb.metrics 
    WHERE measure_name= ‘cpu_utilization’ AND time >= ago(6h)
    GROUP BY region, az, vpc, instance_id
)
SELECT region, az, vpc, instance_id, avg(value)
FROM interpolated_timeseries
CROSS JOIN UNNEST(interpolated_cpu_utilization)
GROUP BY region, az, vpc, instance_id
```