Use agregação aninhada para fazer cálculos adicionais
Com a agregação aninhada, você pode concluir uma consulta NRQL e, em seguida, fazer cálculos adicionais usando os resultados dessa consulta. A agregação aninhada fornece recursos NRQL semelhantes à classe de subconsultas ou subseleções SQL em que a subconsulta está na cláusula FROM da consulta externa.
Dica
Esse recurso é diferente do nosso recurso de subconsulta, que permite subconsultas em cláusulas SELECT e WHERE .
A agregação aninhada pode ajudá-lo a responder perguntas como estas sem criar várias consultas:
Como posso contar as solicitações por minuto do meu aplicativo e obter o máximo de solicitações por minuto na última hora?
Como posso calcular o uso médio da CPU de todos os meus servidores ou hosts e listar apenas aqueles com uso superior a 90%?
De todas as minhas sessões de usuário, como posso descobrir qual porcentagem foi recuperada imediatamente?
Estrutura de consulta de agregação aninhada
Toda consulta NRQL deve começar com uma instrução SELECT ou uma cláusula FROM. Uma consulta de agregação aninhada usa uma instrução SELECT e uma cláusula FROM e as aplica a uma consulta inteira ou a consultas contidas entre parênteses.
Uma consulta de agregação aninhada completa e formatada corretamente se parece com isto:
SELECTfunction(attribute)
FROM(
SELECTfunction(attribute)
FROM dataType
WHERE attribute
TIMESERIES integer units
)
Alguns outros detalhes sobre o comportamento da consulta e da cláusula:
A consulta aninhada pode ter mais de dois níveis.
Você pode aplicar TIMESERIES e FACET a qualquer parte da consulta aninhada. Eles não precisam ser idênticos em todos os níveis.
SINCEAs cláusulas , UNTIL e COMPARE WITH se aplicam a toda a consulta e você só pode usá-las no nível mais externo.
Exemplos de consulta de agregação aninhada
Aqui estão alguns exemplos de consultas aninhadas:
Neste exemplo, a consulta interna primeiro conta a transação de myApp para cada um dos últimos 60 minutos e, em seguida, a consulta externa retorna a maior taxa de solicitação de 1 minuto.
Além disso, ao dar um nome ao resultado da primeira consulta (as rpm), você pode criar um rótulo para o valor retornado. Sem adicionar o rótulo, esta consulta retornará o valor como contagem para uso na consulta externa.
SELECTmax(rpm)
FROM(
SELECTcount(*)as rpm
FROMTransaction
WHERE appName ='myApp'
TIMESERIES 1minute
)
Neste exemplo, a consulta interna calcula o uso médio da CPU para todos os hosts e, em seguida, a consulta externa filtra os resultados para apenas os hosts com uso de CPU acima de um limite de risco (90%).
SELECT hostname, cpu
FROM(
SELECT average(cpuPercent)as cpu
FROM SystemSample
FACET hostname
TIMESERIES 1minute
)
WHERE cpu >90
Neste exemplo, a consulta interna calcula o número de eventos PageView em cada sessão do usuário e, em seguida, a consulta externa calcula qual porcentagem dessas sessões tinha apenas uma única visualização associada.
Neste exemplo, a consulta interna encontra os principais guias de entidade com a duração média da transação mais lenta. Então, a consulta externa descobre quantas dessas consultas são mais lentas que o limite. Aqui, a consulta seleciona as 50 principais consultas e mede em relação a um limite de duração de 1 segundo.
SELECTcount(avgDurations)
FROM(
SELECT average(duration)AS avgDurations
FROMTransaction
FACET entity.guid
LIMIT50
)
WHERE avgDurations >1
Neste exemplo, existem duas agregações aninhadas. A consulta mais interna encontra a média diskWritesPerSecond por hora para cada host. A próxima consulta encontra a média máxima para cada host, e a consulta mais externa calcula o 50º, 75º e 99º percentil desses máximos.