Muitos dos dados armazenados no New Relic estão relacionados a outros dados: Transaction
e TransactionError
, PageView
e PageAction
, Log
e evento de infraestrutura e muito mais. Você pode realizar análises e calcular correlações entre esses eventos usando junções de subconsulta.
Como escrever uma junção de subconsulta
Uma subconsulta é uma consulta aninhada dentro de outra consulta. Com junções de subconsulta, você pode combinar o resultado de uma subconsulta com o resultado de sua consulta externa com base em uma chave, permitindo análise e enriquecimento em conjuntos de dados.
Uma junção de subconsulta requer três componentes: dois conjuntos de dados e uma chave primária para vincular os dois.
FROM Event [INNER|LEFT] JOIN (subquery) ON [key =] key SELECT ...
As junções de subconsulta contêm regras simples para a sintaxe:
- A cláusula
JOIN
deve sempre seguir imediatamente após a cláusulaFROM
. - Você pode prefixar
JOIN
com o tipo de associação.INNER
ouLEFT
é opcional e o padrão éINNER
quando omitido. - Os parênteses que contêm uma subconsulta devem seguir imediatamente a cláusula
JOIN
. - A cláusula
ON
deve seguir imediatamente a subconsulta e possui dois formatos (mais detalhes abaixo).
Você também pode ter diversas cláusulas JOIN
em uma consulta. Por exemplo, esta consulta usa dois JOIN
s em subconsultas:
FROM JavaScriptError JOIN ( FROM PageAction JOIN ( FROM PageView SELECT count(*) FACET session as pageViewSession, city LIMIT MAX ) ON session = pageViewSession SELECT count(*) FACET city, currentUrl, session as pageActionSession ) ON session = pageActionSessionSELECT count(*) FACET city, currentUrl, session, errorClass
A imagem abaixo contém dois conjuntos de dados: o percentual médio de CPU da infraestrutura contêiner (ProcessSample
) e a duração média da transação do aplicativo por contêiner.
Muitas vezes, os dados de diferentes fontes estão correlacionados. Nesse caso, você pode determinar se o maior uso de CPU de um contêiner está causando lentidão na transação usando a seguinte junção de subconsulta:
FROM Transaction JOIN (FROM ProcessSample SELECT average(cpuPercent) AS cpu FACET containerId LIMIT MAX) ON containerIdSELECT average(duration)/latest(cpu) FACET containerId, containerName
Com esta consulta, você pode ver os contêineres que possuem maior duração média de transação devido ao uso de CPU, e investigar outliers para ver se há algum bug a ser corrigido ou otimizações a serem feitas.
Limitações de junção de subconsulta
As junções de subconsulta têm as seguintes limitações:
- A subconsulta unida continuará a ter um
LIMIT
padrão de 10, com um máximo deLIMIT
de 5.000. Observe que oLIMIT
da consulta externa não afeta a consulta interna. - O uso de
TIMESERIES
na subconsulta unida não é compatível. Se sua consulta externa usarTIMESERIES
, lembre-se de que a subconsulta unida fornecerá um único resultado para todo o intervalo de tempo da consulta. - O uso de
COMPARE WITH
na subconsulta unida não é compatível. Se sua consulta externa usarCOMPARE WITH
, lembre-se de que a subconsulta unida fornecerá um único resultado com base no intervalo de tempo base da consulta e não fornecerá um valor separado para a consulta externa em comparação com o intervalo de tempo. - Como todas as subconsultas, as subconsultas unidas não podem ser utilizadas na condição do alerta.
- Embora
SELECT
* seja compatível com a consulta pai, ele não é compatível com a subconsulta unida. - A cardinalidade da junção é limitada a 1:100, o que significa que uma única chave de junção não pode mapear mais de cem linhas no resultado da subconsulta.
- A cláusula
ON
oferece suporte apenas a condições de igualdade. - A chave
JOIN
não pode ser um atributo complexo, como um valor de métrica. - Não fazemos coerção de tipos de atributos na condição
JOIN
. O lado esquerdo da condiçãoON
deJOIN
precisa ser do mesmo tipo que o lado direito da condiçãoON
. - Curingas de métrica não são suportados na condição
ON
deJOIN
- A subconsulta não pode ser uma consulta métrica por linha.
- O lado direito da condição ON do
JOIN
deve ser um identificador projetado pela consulta. Não pode usar uma função ou operação matemática. - A subconsulta unida não pode projetar um resultado
uniques()
.
Exemplos de junção de subconsulta
Aqui estão alguns exemplos de junções de subconsulta: