

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

# SQL 推斷
<a name="cloudwatch-metrics-insights-inference"></a>

CloudWatch Metrics Insights 使用數種機制來推斷指定 SQL 查詢的意圖。

**Topics**
+ [時段](#cloudwatch-metrics-insights-inference-timebucketing)
+ [欄位投影](#cloudwatch-metrics-insights-inference-fieldsprojection)
+ [ORDER BY 全域彙總](#cloudwatch-metrics-insights-inference-OrderBy)

## 時段
<a name="cloudwatch-metrics-insights-inference-timebucketing"></a>

查詢產生的時間序列資料點會根據請求的期間以時段彙整。若要彙總標準 SQL 中的值，必須定義明確的 GROUP BY 子句，以便一起收集指定期間的所有觀察值。由於這是查詢時間序列資料的標準方式，因此 CloudWatch Metrics Insights 會推斷時段，而不需要表達明確的 **GROUP BY** (分組依據) 子句。

例如，當以一分鐘的期間執行查詢時，屬於該分鐘直到下一分鐘 (不包含) 的所有觀察值都會彙整到該時段的開始時間。這讓 Metrics Insights SQL 陳述式更簡潔且更簡短。

```
SELECT AVG(CPUUtilization)
FROM SCHEMA("AWS/EC2", InstanceId)
```

上一個查詢會傳回單一時間序列 (時間戳記-值對)，代表所有 Amazon EC2 執行個體的平均 CPU 使用率。假設請求的期間為一分鐘，傳回的每個資料點代表在特定一分鐘間隔內測量之所有觀測值的平均值 (包含開始時間、不包含結束時間)。與特定資料點相關的時間戳記是儲存貯體的開始時間

## 欄位投影
<a name="cloudwatch-metrics-insights-inference-fieldsprojection"></a>

Metrics Insights 查詢一律會傳回時間戳記投影。您不需要在 **SELECT** (選取) 子句中指定時間戳記欄來取得每個相應資料點值的時間戳記。如需如何計算時間戳記的詳細資訊，請參閱 [時段](#cloudwatch-metrics-insights-inference-timebucketing)。

使用 **GROUP BY** (分組依據) 時，每個群組名稱也會在結果中推斷和投影，以便您可以將傳回的時間序列分組。

```
SELECT AVG(CPUUtilization)
FROM SCHEMA("AWS/EC2", InstanceId)
GROUP BY InstanceId
```

上一個查詢會傳回每個 Amazon EC2 執行個體的時間序列。每個時間序列皆依執行個體 ID 的值進行標記。

## ORDER BY 全域彙總
<a name="cloudwatch-metrics-insights-inference-OrderBy"></a>

使用 **ORDER BY** (排序依據) 時，**FUNCTION()** (函數 ()) 推斷您要排序的彙總函數 (查詢指標的資料點值)。彙總操作會在所有查詢的時段中，跨每個個別時間序列的所有相符資料點執行。

```
SELECT AVG(CPUUtilization)
FROM SCHEMA("AWS/EC2", InstanceId)
GROUP BY InstanceId
ORDER BY MAX()
LIMIT 10
```

上一個查詢會傳回每個 Amazon EC2 執行個體的 CPU 使用率，將結果集限制為 10 個項目。結果是根據請求的時段內個別時間序列的最大值來排序。**ORDER BY** (排序依據) 子句會在 **LIMIT** (限制) 之前套用，以便在超過 10 個時間序列時計算排序。