Gran parte de los datos almacenados en New Relic se relacionan con otros datos: Transaction
y TransactionError
, PageView
y PageAction
, Log
y eventos de infraestructura, y más. Puede realizar análisis y calcular correlaciones entre estos eventos utilizando combinaciones de subconsultas.
Cómo escribir una unión de subconsulta
Una subconsulta es una consulta anidada dentro de otra consulta. Con las uniones de subconsultas, puede combinar el resultado de una subconsulta con el resultado de su consulta externa basada en una clave, lo que permite el análisis y el enriquecimiento de todos los conjuntos de datos.
Una unión de subconsulta requiere tres componentes: dos conjuntos de datos y una clave principal para vincularlos.
FROM Event [INNER|LEFT] JOIN (subquery) ON [key =] key SELECT ...
Las uniones de subconsultas contienen reglas simples de sintaxis:
- La cláusula
JOIN
siempre debe seguir inmediatamente a la cláusulaFROM
. - Puede anteponer el
JOIN
con el tipo de unión.INNER
oLEFT
es opcional y el valor predeterminado esINNER
cuando se omite. - Los paréntesis que contengan una subconsulta deben seguir inmediatamente a la cláusula
JOIN
. - La cláusula
ON
debe seguir inmediatamente a la subconsulta y tiene dos formatos (más detalles a continuación).
También puede tener varias cláusulas JOIN
en una consulta. Por ejemplo, esta consulta utiliza dos JOIN
dentro de las 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
La siguiente imagen contiene dos conjuntos de datos: el porcentaje promedio de CPU del contenedor de infraestructura (ProcessSample
) y la duración promedio de la transacción de la aplicación por contenedor.
A menudo, los datos de diferentes fuentes están correlacionados. En este caso, puede determinar si el mayor uso de CPU de un contenedor está provocando una transacción más lenta utilizando la siguiente combinación 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
Con esta consulta, puede ver el contenedor que tiene una duración promedio de transacción más alta dado su uso de CPU e investigar el valor atípico para ver si hay algún error que corregir u optimizaciones que realizar.
Limitaciones de unión de subconsultas
Las uniones de subconsultas tienen las siguientes limitaciones:
- La subconsulta unida seguirá teniendo un
LIMIT
predeterminado de 10, con un máximo deLIMIT
de 5000. Tenga en cuenta que elLIMIT
de la consulta externa no afecta la consulta interna. - No se admite el uso de
TIMESERIES
en la subconsulta unida. Si su consulta externa utilizaTIMESERIES
, tenga en cuenta que la subconsulta unida proporcionará un resultado único durante todo el período de la consulta. - No se admite el uso de
COMPARE WITH
en la subconsulta unida. Si su consulta externa utilizaCOMPARE WITH
, tenga en cuenta que la subconsulta unida proporcionará un resultado único basado en el período de tiempo de la base de consulta y no proporcionará un valor separado para la comparación de la consulta externa con el período de tiempo. - Como todas las subconsultas, las subconsultas unidas no se pueden utilizar en condición de alerta.
- Si bien
SELECT
* se admite en la consulta principal, no se admite en la subconsulta unida. - La cardinalidad de la combinación está limitada a 1:100, lo que significa que una única clave de combinación no puede asignarse a más de cien filas en el resultado de la subconsulta.
- La cláusula
ON
solo admite condiciones de igualdad. - La clave
JOIN
no puede ser un atributo complejo, como un valor de métrica. - No aplicamos coerción a los tipos de atributos en la condición
JOIN
. El lado izquierdo de la condiciónON
deJOIN
debe ser del mismo tipo que el lado derecho de la condiciónON
. - Los comodines de métrica no se admiten en la condición
ON
deJOIN
- La subconsulta no puede ser una consulta métrica por filas.
- El lado derecho de la condición ON de
JOIN
debe ser un identificador proyectado por la consulta. No puede utilizar una función u operación matemática. - La subconsulta unida no puede proyectar un resultado
uniques()
.
Ejemplos de unión de subconsultas
A continuación se muestran algunos ejemplos de combinaciones de subconsultas: