SQL 推論
CloudWatch Metrics Insights は、特定の SQL クエリの意図を推測するために、いくつかのメカニズムを使用しています。
時間バケット
クエリから生成された時系列データポイントは、要求された期間に基づいて時間バケットにロールアップされます。標準 SQL で値を集計するには、明示的な GROUP BY 句を定義して、特定の期間におけるすべての観測値をまとめて収集する必要があります。通常は、時系列データをクエリする際はこのような方法が取られます。ただし、CloudWatch Metrics Insights では、時間バケットを推測することで GROUP BY 句を明示的に記述する必要をなくしています。
例えば、1 分の期間を指定しながらクエリを実行すると、その期間中の次の (excluded) までに属するすべての観測値が、タイムバケットの開始時間にロールアップされます。これにより、Metrics Insights での SQL ステートメントがより簡潔になり、冗長性が低くなります。
SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId)
前出のクエリでは、すべての Amazon EC2 インスタンスにおける平均 CPU 使用率を表す、単一の時系列 (タイムスタンプと値のペア) を返しています。要求された期間が 1 分であると仮定すると、ここで返される各データポイントは、特定の (開始時間を含み終了時間を除く) 1 分間隔の中で測定された、すべての観測値の平均を表すことになります。特定のデータポイントに関連するタイムスタンプは、バケットの開始時刻を示します。
フィールド射影
Metrics Insights のクエリは、常にタイムスタンプの射影を返します。SELECT句では、タイムスタンプ列を指定して、対応する各データポイント値のタイムスタンプを取得する必要はありません。タイムスタンプの計算方法の詳細については、「時間バケット」を参照してください。
GROUP BY を使用すると、各グループ名も推論され結果に反映されるので、返された時系列をグループ化することができます。
SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId) GROUP BY InstanceId
前のクエリでは、各 Amazon EC2 インスタンスに関し時系列を返しています。各時系列は、インスタンス ID の値の後にラベル付けされています。
ORDER BY でのグローバルな集計
ORDER BY を使用する場合、FUNCTION() では、順序付けすべき集計関数 (クエリされたメトリクスでのデータポイント値) を推定します。この集計オペレーションは、クエリされた時間ウィンドウ全体において、個々の時系列内で一致したすべてのデータポイントに対して実行されます。
SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId) GROUP BY InstanceId ORDER BY MAX() LIMIT 10
前出のクエリでは、結果セットを 10 エントリに制限しながら、各 Amazon EC2 インスタンスの CPU 使用量を返しています。この結果は、要求された時間ウィンドウ内の個々の時系列について、その最大値に基づいて順序付けられます。ORDER BY 句は LIMIT の前に適用されます。したがって、順序付けは 10 個を超える時系列に対して計算されることになります。