

# Inferência SQL
<a name="cloudwatch-metrics-insights-inference"></a>

O CloudWatch Metrics Insights utiliza vários mecanismos para inferir a intenção de determinada consulta SQL.

**Topics**
+ [Intervalo de tempo](#cloudwatch-metrics-insights-inference-timebucketing)
+ [Projeção de campos](#cloudwatch-metrics-insights-inference-fieldsprojection)
+ [Agregação global ORDER BY](#cloudwatch-metrics-insights-inference-OrderBy)

## Intervalo de tempo
<a name="cloudwatch-metrics-insights-inference-timebucketing"></a>

Os pontos de dados de séries temporais resultantes de uma consulta são agrupados em intervalos de tempo com base no período solicitado. Para agregar valores no SQL padrão, deve-se definir uma cláusula GROUP BY explícita para coletar todas as observações de um determinado período juntas. Como essa é a forma padrão de consultar dados de séries temporais, o CloudWatch Metrics Insights infere o intervalo de tempo sem a necessidade de expressar uma cláusula **GROUP BY** explícita. 

Por exemplo, quando uma consulta é realizada com um período de um minuto, todas as observações pertencentes a esse minuto até o próximo (excluído) são acumuladas até a hora de início do bucket de tempo. Isso torna as instruções SQL do Metrics Insights mais concisas e menos detalhadas. 

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

A consulta anterior retorna uma única série temporal (pares de valores de timestamp), representando a utilização média da CPU de todas as instâncias do Amazon EC2. Supondo que o período solicitado seja de um minuto, cada ponto de dados retornado representa a média de todas as observações medidas dentro do intervalo específico de um minuto (incluindo a hora de início e excluindo a hora de término). O timestamp relacionado ao ponto de dados específico é a hora de início do bucket

## Projeção de campos
<a name="cloudwatch-metrics-insights-inference-fieldsprojection"></a>

As consultas do Metrics Insights sempre retornam a projeção de timestamp. Não é necessário especificar uma coluna timestamp na cláusula **SELECT** para obter o timestamp de cada valor de ponto de dados correspondente. Para obter detalhes sobre como o timestamp é calculado, consulte [Intervalo de tempo](#cloudwatch-metrics-insights-inference-timebucketing).

Ao usar **GROUP BY**, cada nome de grupo também é inferido e projetado no resultado, para que você possa agrupar a série temporal retornada. 

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

A consulta anterior retorna uma série temporal para cada instância do Amazon EC2. Cada série temporal é rotulada com base no valor do ID da instância.

## Agregação global ORDER BY
<a name="cloudwatch-metrics-insights-inference-OrderBy"></a>

Ao usar a **ORDER BY**, a **FUNCTION()** infere por qual função agregada você deseja ordenar os valores dos pontos de dados das métricas consultadas. A operação agregada é executada em todos os pontos de dados correspondentes de cada série temporal individual na janela de tempo consultada. 

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

A consulta anterior retorna a utilização da CPU para cada instância do Amazon EC2, limitando o conjunto de resultados a 10 entradas. Os resultados são ordenados com base no valor máximo da série temporal individual na janela de tempo solicitada. A cláusula **ORDER BY** é aplicada antes de **LIMIT**, para que se calcule o ordenamento com relação a mais de dez séries temporais.