

如需與 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\$1TIME\$1SERIES](#timeseries-specific-constructs.views.CREATE_TIME_SERIES)
+ [UNNEST](#timeseries-specific-constructs.views.UNNEST)

## CREATE\$1TIME\$1SERIES
<a name="timeseries-specific-constructs.views.CREATE_TIME_SERIES"></a>

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

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

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

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


| 時間 | region | az | vpc | instance\$1id | measure\$1name | measure\$1value::double | 
| --- | --- | --- | --- | --- | --- | --- | 
|  2019-12-04 19：00：00.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  cpu\$1utilization  |  35.0  | 
|  2019-12-04 19：00：01.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  cpu\$1utilization  |  38.2  | 
|  2019-12-04 19：00：02.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  cpu\$1utilization  |  45.3  | 
|  2019-12-04 19：00：00.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  54.1  | 
|  2019-12-04 19：00：01.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  42.5  | 
|  2019-12-04 19：00：02.000000000  |  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  cpu\$1utilization  |  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\$1id | cpu\$1utilization | 
| --- | --- | --- | --- | --- | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef0  |  【\$1time： 2019-12-04 19：00：00.000000000， measure\$1value：：double： 35.0\$1， \$1time： 2019-12-04 19：00：01.000000000， measure\$1value：：double： 38.2\$1， \$1time： 2019-12-04 19：00：02.000000000， measure\$1value：：double： 45.3\$1】  | 
|  us-east-1  |  us-east-1d  |  vpc-1a2b3c4d  |  i-1234567890abcdef1  |  【\$1time： 2019-12-04 19：00：00.000000000， measure\$1value：：double： 35.1\$1， \$1time： 2019-12-04 19：00：01.000000000， measure\$1value：：double： 38.5\$1， \$1time： 2019-12-04 19：00：02.000000000， measure\$1value：：：double： 45.7\$1】  | 

## 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\$1TIME\$1SERIES** 將指標轉換為時間序列模型。然後，您可以使用 **INTERPOLATE\$1LINEAR** 取得 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
```