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 
JOINdeve sempre seguir imediatamente após a cláusulaFROM. - Você pode prefixar 
JOINcom o tipo de associação.INNERouLEFTé opcional e o padrão éINNERquando omitido. - Os parênteses que contêm uma subconsulta devem seguir imediatamente a cláusula 
JOIN. - A cláusula 
ONdeve 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 JOINs 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, errorClassA 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 
LIMITpadrão de 10, com um máximo deLIMITde 5.000. Observe que oLIMITda consulta externa não afeta a consulta interna. - O uso de 
TIMESERIESna 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 WITHna 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 
ONoferece suporte apenas a condições de igualdade. - A chave 
JOINnã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çãoONdeJOINprecisa ser do mesmo tipo que o lado direito da condiçãoON. - Curingas de métrica não são suportados na condição 
ONdeJOIN - A subconsulta não pode ser uma consulta métrica por linha.
 - O lado direito da condição 
ONdoJOINdeve 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:



