Para redactar una buena consulta NRQL , es útil comprender cómo funcionan nuestras diversas cláusulas y funciones NRQL . Este documento contiene definiciones de cláusulas y funciones NRQL y ofrece ejemplos de cómo utilizarlas.
¿Busca reglas de sintaxis básicas de NRQL? Consulte Cómo utilizar NRQL. Para ver un tutorial, consulte el tutorial introductorio de NRQL.
Componentes de consulta
Como se indica en nuestro documento de sintaxis básica de NRQL, cada consulta NRQL contendrá una cláusula SELECT
y una cláusula FROM
, siendo todas las demás cláusulas opcionales. Las definiciones de cláusulas siguientes también contienen ejemplos de consulta NRQL .
Cláusulas requeridas
SELECT attribute ...
SELECT function(attribute) ...
El SELECT
especifica qué parte de un tipo de datos desea consultar especificando un atributo o una función. Va seguido de uno o más argumentos separados por comas. En cada argumento puedes:
- Obtenga los valores de todos los atributos disponibles utilizando
*
como comodín. Por ejemplo:SELECT * from Transaction
. - Obtiene valores asociados con un atributo específico o múltiples atributos especificados en una lista separada por comas.
- Obtenga valores agregados del atributo especificado seleccionando una función agregadora.
- Etiquete los resultados devueltos en cada argumento con la cláusula
AS
.
También puedes usar SELECT
con funciones matemáticas básicas.
Esta consulta devuelve el tiempo de respuesta promedio desde la semana pasada.
SELECT average(duration) FROM PageView SINCE 1 week ago
SELECT ...FROM data type...
Utilice la cláusula FROM
para especificar el tipo de datos que desea consultar. Puede comenzar su consulta con FROM
o con SELECT
. Puede combinar valores para el mismo atributo en varios tipos de datos en una lista separada por comas.
Esta consulta devuelve el recuento de todas las transacciones APM durante los últimos siete días:
SELECT count(*) FROM Transaction SINCE 7 days ago
Esta consulta devuelve el recuento de todas las transacciones APM y eventosbrowser durante los últimos tres días:
SELECT count(*) FROM Transaction, PageView SINCE 3 days ago
Ver lookup()
.
Cláusulas opcionales
SELECT ...AS 'label'...
Utilice la cláusula AS
para etiquetar un atributo, agregador, paso en un embudo o el resultado de una función matemática con una cadena delimitada por comillas simples. La etiqueta se utiliza en el gráfico resultante. Tenga en cuenta que las etiquetas de la cláusula AS
en los gráficos de series temporales no se mostrarán si se utiliza una cláusula FACET
.
Esta consulta devuelve el número de páginas vistas por sesión:
SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session'FROM PageView
Esta consulta devuelve un recuento de personas que visitaron tanto la página principal como la página de carreras de un sitio durante la semana pasada:
SELECT funnel(SESSION, WHERE name='Controller/about/main' AS 'Step 1', WHERE name = 'Controller/about/careers' AS 'Step 2')FROM PageView SINCE 1 week ago
SELECT ... (SINCE or UNTIL) (integer units) AGOCOMPARE WITH (integer units) AGO...
Utilice la cláusula COMPARE WITH
para comparar los valores de dos intervalos de tiempo diferentes.
COMPARE WITH
requiere una declaración SINCE
o UNTIL
. El tiempo especificado por COMPARE WITH
es relativo al tiempo especificado por SINCE
o UNTIL
. Por ejemplo, SINCE 1 day ago COMPARE WITH 1 day ago
compara ayer con anteayer.
El intervalo de tiempo para el valorCOMPARE WITH
es siempre el mismo que el especificado por SINCE
o UNTIL
. Por ejemplo, SINCE 2 hours ago COMPARE WITH 4 hours ago
podría comparar de 3:00 p. m. a 5:00 p. m. con 11:00 a. m. a 1:00 p. m.
COMPARE WITH
Puede tener el formato de gráfico de líneas o cartelera:
- Con
TIMESERIES
,COMPARE WITH
crea un gráfico de líneas con la comparación asignada a lo largo del tiempo. - Sin
TIMESERIES
,COMPARE WITH
genera un cartel con el valor actual y el cambio porcentual del valorCOMPARE WITH
.
Example: esta consulta devuelve datos como un gráfico de líneas que muestra el percentil 95 de la semana pasada en comparación con el mismo rango hace una semana. Primero como un valor único, luego como un gráfico de líneas.
SELECT percentile(duration, 95) FROM PageViewSINCE 1 week ago COMPARE WITH 1 week AGO
SELECT percentile(duration, 95) FROM PageViewSINCE 1 week ago COMPARE WITH 1 week AGO TIMESERIES AUTO
Importante
Para FACET
consulta usando COMPARE WITH
, las facetas en el resultado se seleccionan según el rango de tiempo especificado usando SINCE
y UNTIL
y no el rango de tiempo anterior que se compara. Los resultados de una consulta FACET
solo para el intervalo de tiempo anterior pueden incluir un conjunto diferente de facetas.
Puede utilizar esta cláusula con estos tipos de datos:
Transaction
TransactionError
Evento personalizado reportado vía API del agente
El propósito de
EXTRAPOLATE
es compensar matemáticamente los efectos del muestreo del agente APM de los datos del evento para que los resultados de la consulta representen más fielmente la actividad total en su sistema.Esta cláusula será útil cuando un agente APM reporte tantos eventos que a menudo sobrepase sus límites de reporte del ciclo de recolección . Cuando eso ocurre, el agente comienza a muestrear el evento.
Cuando se utiliza
EXTRAPOLATE
en una consulta NRQL que admite su uso, la relación entre reported events y total events se utiliza para extrapolar una aproximación cercana del total de datos no muestreados. Cuando se utiliza en una consulta NRQL que no admite su uso o que no ha utilizado datos de muestra, no tiene ningún efecto.Importante
Tenga en cuenta que
EXTRAPOLATE
es más útil para datos homogéneos (como rendimiento o tasa de errores). No es efectivo cuando se intenta extrapolar un recuento de cosas distintas (comouniqueCount()
ouniques()
).Esta cláusula funciona solo con consultas NRQL que utilizan una de las siguientes funciones de agregador:
apdex
average
count
histogram
sum
percentage
(si la función que toma como argumento admiteEXTRAPOLATE
)rate
(si la función que toma como argumento admiteEXTRAPOLATE
)stddev
Una consulta que mostrará el rendimiento extrapolado de un servicio denominado
interestingApplication
.SELECT count(*) FROM Transaction WHERE appName='interestingApplication' SINCE 60 minutes ago EXTRAPOLATEUna consulta que mostrará el rendimiento extrapolado de un servicio denominado
interestingApplication
por nombre de transacción, mostrado como una serie de tiempo.SELECT count(*) FROM Transaction WHERE appName='interestingApplication'SINCE 60 minutes ago FACET name TIMESERIES 1 minute EXTRAPOLATE
SELECT ...FACET attribute...
Utilice FACET
para separar y agrupar sus resultados por valores de atributos. Por ejemplo, podría FACET
sus PageView
datos antes del deviceType
para determinar qué porcentaje de su tráfico proviene de dispositivos móviles, tabletas y computadoras de escritorio.
Utilice la cláusula LIMIT
para especificar cuántas facetas aparecen (el valor predeterminado es 10). Para agrupaciones más complejas, utilice FACET CASES
. Las cláusulas FACET
admiten hasta cinco atributos, separados por comas.
Las facetas se ordenan en orden descendente según el primer campo que proporcione en la cláusula SELECT
. Si está facetando un atributo con más de 5,000 valor único, se selecciona un subconjunto de valores de faceta y se clasifica según el tipo de consulta. Tenga en cuenta que si un gráfico de serie temporal no devuelve datos (NRQL no coincide con datos coincidentes, NRQL no válido, etc.), solo mostrará una línea plana con la etiqueta que coincide con la primera tabla en la cláusula FROM
.
Al seleccionar min()
, max()
, percentile()
, average()
o count()
, FACET
usa esas funciones para determinar cómo se seleccionan y ordenan las facetas. Al seleccionar cualquier otra función, FACET
utiliza la frecuencia del atributo en el que está facetando para determinar cómo se seleccionan y clasifican las facetas.
Esta consulta muestra las ciudades con el mayor número de páginas vistas. Esta consulta utiliza el número total de páginas vistas por ciudad para determinar cómo se seleccionan y ordenan las facetas.
SELECT count(*) FROM PageView FACET city
Esta consulta muestra las ciudades que acceden al mayor número de URL únicas. Esta consulta utiliza el número total de veces que aparece una ciudad en particular en los resultados para determinar cómo se seleccionan y ordenan las facetas.
SELECT uniqueCount(pageUrl) FROM PageView FACET city
La segmentación avanzada y el análisis de cohortes le permiten agrupar funciones de grupos para desglosar sus datos de manera más efectiva.
El análisis de cohortes es una forma de agrupar resultados según la marca de tiempo. Puede separarlos en grupos que cubran un rango específico de fechas y horas.
Importante
Cuando se utilizan funciones para agregar valores de atributos, es importante que el atributo que se agrega en la primera función de su consulta contenga valores no nulos. Las facetas solo se elegirán para filas que contengan un valor no nulo para el atributo en la primera función.
Ejemplo:
FROM Event SELECT average(attribute) FACET name
Los nombres solo se elegirán de las filas donde el atributo no sea nulo.
Para verificar si el atributo que está utilizando en su función contiene valores no nulos, ejecute la siguiente consulta:
FROM Event SELECT attribute, name WHERE attribute IS NOT NULL
Utilice FACET ... AS
para nombrar facetas utilizando la palabra clave AS
en consulta. Esta cláusula es útil para agregar nombres más claros o simplificados para las facetas en los resultados. También se puede utilizar para cambiar el nombre de facetas en una consulta de agregación anidada .
FACET ... AS
consulta cambiará los nombres de las facetas en los resultados (cuando aparecen como encabezados en tablas, por ejemplo), pero no los nombres de las facetas en sí.
FROM Transaction SELECT count(*) FACET response.headers.contentType AS 'content type'
SELECT ...FACET CASES ( WHERE attribute operator value, WHERE attribute operator value, ...)...
Emplee FACET CASES
para desglosar sus datos según condiciones más complejas que las posibles con FACET
. Separe varias condiciones con una coma ,
. Por ejemplo, podrías consultar tus datos PageView
y FACET CASES
en categorías como menos de 1 segundo, de 1 a 10 segundos y más de 10 segundos. Puede combinar varios atributos dentro de sus casos y etiquetar los casos con el selector AS
. Los puntos de datos se agregarán como máximo a un caso facetario, el primer caso facetario con el que coincidan.
También puede usar una función de tiempo con su atributo y puede usar el operador OR
para facetar los resultados que no coinciden con ninguno de los casos especificados.
SELECT count(*) FROM PageView FACET CASES ( WHERE duration < 1, WHERE duration > 1 AND duration < 10, WHERE duration > 10)
Este ejemplo agrupa los resultados en un depósito donde el nombre de la transacción contiene login
y otro donde la URL contiene login
y un atributo personalizado indica que el usuario era un usuario pago:
SELECT count(*) FROM Transaction FACET CASES ( WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type = 'Paid')
Este ejemplo utiliza el selector AS
para darle a sus resultados un nombre legible por humanos:
SELECT count(*) FROM Transaction FACET CASES ( WHERE name LIKE '%login%' AS 'Total Logins', WHERE name LIKE '%feature%' AND customer_type='Paid' AS 'Feature Visits from Paid Users')
Este ejemplo utiliza el operador OR
para facetar resultados que no coincidieron con ninguno de sus casos:
SELECT count(*) FROM Transaction FACET CASES ( WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid') OR name
En NRQL, el valor predeterminado es que la primera agregación en la cláusula SELECT
guíe la selección de facetas en una consulta. FACET ... ORDER BY
le permite anular este comportamiento predeterminado agregando una función agregada con el modificador ORDER BY
para especificar cómo se seleccionan las facetas. Específicamente, la cláusula anulará la prioridad por la cual se eligen las facetas en el resultado final antes de ser limitadas por la cláusula LIMIT
. Esta cláusula se puede emplear para consultas, pero no para alertas o transmisión.
Este ejemplo muestra cómo usar FACET ... ORDER BY
para encontrar las duraciones promedio de las transacciones de aplicaciones, mostrando las 10 duraciones más altas (límite predeterminado) de las aplicaciones que tienen el tamaño de respuesta más alto. En este caso, si no se utiliza FACET ... ORDER BY
, los resultados de la consulta mostrarán los 10 primeros por duraciones más altas, y el tamaño de la respuesta será irrelevante para la selección de la aplicación.
FROM Transaction SELECT average(duration) TIMESERIES FACET appName ORDER BY max(responseSize)
Tenga en cuenta que si utiliza la cláusula FACET ... ORDER BY
, no puede cambiar el orden de clasificación agregando los modificadores ASC
y DESC
. De forma predeterminada, esta cláusula utiliza DESC
.
Sugerencia
Debido a que las operaciones se realizan antes de que se aplique la cláusula LIMIT
, FACET ... ORDER BY
no afecta el tipo de resultados finales de la consulta, lo que será particularmente notable en los resultados de las consultas que no son de series temporales.
Importante
El modificador ORDER BY
en este caso funciona de manera diferente a la cláusula ORDER BY
. Al analizar consultas que siguen el formato FACET attribute1 ORDER BY attribute2
, New Relic las leerá como FACET ... ORDER BY
consulta, pero solo si ORDER BY
aparece inmediatamente después de FACET
. De lo contrario, New Relic interpretará ORDER BY
como una cláusula.
Utilice la cláusula JOIN
para combinar datos de un tipo de evento con los resultados de una subconsulta basada en un atributo o clave común.
FROM Event [INNER|LEFT] JOIN (SELECT... FROM...) ON [key =] key SELECT ...
Existen algunas reglas simples para las uniones de subconsultas:
- La cláusula
JOIN
siempre debe seguir inmediatamente a la cláusulaFROM
. - Prefijar un tipo de unión (
INNER
oLEFT
) es opcional. Cuando se omite, el tipo de unión por defecto esINNER
. - Los paréntesis que contienen una subconsulta deben seguir inmediatamente
JOIN
. - La cláusula
ON
debe seguir inmediatamente a la subconsulta.
Join types | |
---|---|
| El resultado solo incluirá valores de la consulta externa que tengan un valor coincidente en los resultados de la subconsulta unida. Este es el tipo de unión predeterminado. |
| El resultado incluirá eventos de la consulta externa que no tengan una coincidencia de la subconsulta unida. |
Join | |
---|---|
| Define el valor principal a comparar en la subconsulta y la consulta externa. El único operador de comparación permitido es la igualdad.
|
| Esta es una sintaxis abreviada para cuando el identificador de clave es el mismo en ambos contextos. Es equivalente a |
Restricciones y limitaciones a considerar:
- 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. - 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.
Para conocer en profundidad la cláusula JOIN
, consulte el tutorial sobre uniones de subconsultas NRQL.
Esta consulta encuentra el recuento de eventos facetados por browserTransactionName
del tipo de evento PageView
y luego por currentUrl
del tipo de evento PageAction
. Esto une los dos tipos de eventos basados en valores de atributo session
comunes.
FROM PageViewJOIN ( FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl
Ejemplo de
INNER JOIN
facetado
Este ejemplo consulta los mismos datos que el ejemplo INNER JOIN
facetado, pero como consulta LEFT JOIN
, los resultados incluyen elementos en la tabla PageView
que no tienen valores session
coincidentes en los resultados de la subconsulta PageAction
. .
FROM PageViewLEFT JOIN ( FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl
Ejemplo de
LEFT JOIN
facetado
Aquí estamos realizando una subconsulta no agregada, por filas, en la que la consulta externa encuentra el recuento de eventos facetados por currentUrl
del tipo de evento PageAction
y luego por browserTransactionNamed
del tipo de evento PageView
. Esto une los dos tipos de eventos basados en valores de atributo session
comunes.
Tenga en cuenta que el valor session
34d5ce6acf4c60be
tiene dos valores browserTransactionName
del tipo de evento PageView
de la subconsulta, lo que agrega filas adicionales al resultado.
FROM PageActionLEFT JOIN ( FROM PageView SELECT session, browserTransactionName LIMIT MAX) ON sessionSELECT count(*) FACET session, currentUrl, browserTransactionName LIMIT MAX
Ejemplo de
INNER JOIN
no agregado
SELECT ...LIMIT count...
Utilice la cláusula LIMIT
para controlar el número máximo de valores de faceta devueltos por FACET
consulta o el número máximo de elementos devueltos por SELECT *
consulta. Esta cláusula toma un único valor entero como argumento. Si no se especifica la cláusula LIMIT
o no se proporciona ningún valor, el límite predeterminado es 10 para FACET
consulta y 100 en el caso de SELECT *
consulta.
El valor máximo permitido para la cláusula LIMIT
es 5000. consulta puede usar la cláusula LIMIT MAX
en lugar de un valor específico, que automáticamente toma de forma predeterminada el valor máximo actual. Puede usar esto si siempre desea publicar la cantidad máxima de resultados, incluso si cambia en el futuro. Si desea que el comportamiento de su consulta permanezca sin cambios, especifique un valor explícito en lugar de usar LIMIT MAX
.
Esta consulta muestra los 20 países principales por recuento de sesiones y proporciona el percentil 95 del tiempo de respuesta para cada país solo para usuarios de Windows.
SELECT uniqueCount(session), percentile(duration, 95)FROM PageView WHERE userAgentOS = 'Windows'FACET countryCode LIMIT 20 SINCE YESTERDAY
SELECT ...LIMIT count OFFSET count...
Utilice la cláusula OFFSET
con LIMIT
para controlar la parte de filas devueltas por SELECT *
o SELECT column
consulta. Al igual que la cláusula LIMIT
, OFFSET
toma un valor entero único como argumento. OFFSET
establece el número de filas que se omitirán antes de que se devuelvan las filas seleccionadas de su consulta. Esto está restringido por LIMIT
.
OFFSET
las filas se omiten a partir del registro más reciente.
Por ejemplo, la consulta SELECT interestingValue FROM Minute_Report LIMIT 5 OFFSET 1
devuelve los últimos 5 valores de Minute_Report
excepto el más reciente.
La cláusula ORDER BY
le permite especificar cómo desea ordenar los resultados de su consulta en la consulta que selecciona el evento atributo por fila.
Esta consulta ordena dos atributos de transacción específicos por duración.
FROM Transaction SELECT appName, duration ORDER BY duration
El orden de clasificación predeterminado es ascendente, pero se puede cambiar agregando los modificadores ASC
o DESC
.
Esta consulta ordena todos los atributos de transacción por duración en orden descendente.
FROM Transaction SELECT * ORDER BY duration DESC
Importante
La cláusula ORDER BY
no se aplica a FACET
consulta. No debe confundirse con la cláusula FACET ... ORDER BY
, que guía la selección de facetas. Para obtener más información, consulte FACET ... ORDER BY
.
SHOW EVENT TYPES...
SHOW EVENT TYPES
devolverá una lista de todos los tipos de datos presentes en su cuenta durante un rango de tiempo específico. Se utiliza como primera cláusula de una consulta en lugar de SELECT
.
Importante
En este contexto, "tipos de eventos" se refiere a los tipos de datos a los que puede acceder con una consulta NRQL .
Esta consulta devolverá todos los tipos de datos presentes durante el último día:
SHOW EVENT TYPES SINCE 1 day ago
SELECT ...SINCE [numerical units AGO | phrase]...
El valor de default es 1 hour ago.
Utilice la cláusula SINCE
para definir el comienzo inclusivo de un rango de tiempo para los datos devueltos. Puede especificar una zona horaria para la consulta pero no para los resultados. Los resultados de NRQL se basan en la hora de su sistema.
Al emplear NRQL, puede establecer una timestamp UTC, una hora relativa o una cadena DateTime
. Consulte Especificación de una hora.
Ver también:
La cláusula SLIDE BY
admite una característica conocida como ventanas deslizantes. Con las ventanas deslizantes, los datos SLIDE BY
se recopilan en "ventanas" de tiempo que se superponen entre sí. Estas ventanas pueden ayudar a suavizar los gráficos de líneas con mucha variación en los casos en que el agregado móvil (como una media móvil) es más importante que los agregados de ventanas de tiempo estrechas.
Para utilizar SLIDE BY
, colóquelo en una consulta después de la cláusula TIMESERIES
. Por ejemplo, esta consulta extrae datos en ventanas de 5 minutos con un intervalo SLIDE BY
1 minuto, lo que significa que cada ventana dura 5 minutos, pero la ventana 1 comienza en 0 minutos, la ventana 2 comienza en 1 minuto, la ventana 3 comienza en 2 minutos, etcétera.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY 1 minute
Para obtener más información sobre cómo y cuándo puede utilizar SLIDE BY
, consulte Crear gráficos más fluidos con ventanas deslizantes. O mire este breve vídeo (aprox. 3:20 minutos).
Puede utilizar ventanas deslizantes en combinación con MAX
o AUTO
. Sin embargo, MAX
o AUTO
no se pueden colocar entre TIMESERIES
y SLIDE BY
.
Esta consulta decidirá automáticamente un intervalo de ventana SLIDE BY
.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY AUTO
Esta consulta establecerá la ventana SLIDE BY
con el detalle de intervalo máxima.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY MAX
Importante
El valor SLIDE BY
determinado por AUTO
o MAX
puede producir un intervalo de paso mayor que el tamaño de la ventana, lo que puede provocar espacios vacíos y resultados inesperados.
SELECT ...TIMESERIES integer units...
Utilice la cláusula TIMESERIES
para devolver datos como una serie temporal desglosada por un período de tiempo específico. Dado que TIMESERIES
se utiliza para activar ciertos gráficos, no existe un valor predeterminado.
Para indicar el rango de tiempo, utilice integer units
. Por ejemplo:
TIMESERIES 1 minute
TIMESERIES 30 minutes
TIMESERIES 1 hour
TIMESERIES 30 seconds
TIMESERIES
se puede combinar con argumentos como MAX
, AUTO
y SLIDE BY
para personalizar aún más los resultados de la consulta, como se muestra en los ejemplos siguientes.
Importante
Para funciones como average()
o percentile()
, una ventana de agregación grande puede tener un efecto de suavizado significativo en el valor atípico. Esto es cierto independientemente de que la consulta utilice ventanas deslizantes o no.
El valor proporcionado indica las unidades utilizadas para desglosar el gráfico. Por ejemplo, para presentar un gráfico de un día que muestre incrementos de 30 minutos:
SELECT ... SINCE 1 day AGO TIMESERIES 30 minutes
TIMESERIES
También se puede configurar en AUTO
, lo que dividirá su gráfico en un número razonable de divisiones. Por ejemplo, un gráfico diario se dividirá en intervalos de 30 minutos y un gráfico semanal se dividirá en intervalos de 6 horas.
Esta consulta devuelve datos como un gráfico de líneas que muestra el percentil 50 y 90 del tiempo de transacción del lado del cliente durante una semana con un punto de datos cada 6 horas.
SELECT average(duration), percentile(duration, 50, 90)FROM PageView SINCE 1 week AGO TIMESERIES AUTO
Puede configurar TIMESERIES
en MAX
, lo que ajustará automáticamente su ventana de tiempo al número máximo de intervalos permitidos para un período de tiempo determinado. Esto le permite actualizar sus ventanas de tiempo sin tener que actualizar manualmente sus TIMESERIES
depósitos y garantiza que su ventana de tiempo se divida en la cantidad máxima de intervalos permitidos. El número máximo de TIMESERIES
depósitos que se devolverán es 366.
Por ejemplo, la siguiente consulta crea intervalos de 4 minutos, que es el límite para un gráfico diario.
SELECT average(duration) FROM Transaction SINCE 1 day ago TIMESERIES MAX
SELECT ...UNTIL integer units AGO...
Utilice la cláusula UNTIL
para definir el final del rango de tiempo para realizar la consulta. El valor es exclusivo, lo que significa que el rango de tiempo irá al instante especificado, pero no lo incluirá.
El valor de default es NOW. Utilice únicamente UNTIL
para especificar un punto final distinto del predeterminado.
Ver también:
Utilice la cláusula WHERE
para filtrar los resultados. NRQL devuelve los resultados que cumplen las condiciones especificadas en la cláusula.
SELECT function(attribute) ...WHERE attribute [operator 'value' | IN ('value' [, 'value']) | IS [NOT] NULL ][AND|OR ...]...
- Si especifica más de una condición, separe las condiciones por los operadores
AND
oOR
.
Operators that the | Description |
---|---|
| NRQL acepta operadores de comparación estándar. Ejemplo: Para atributo con valores booleanos, use |
| Se utiliza para definir una intersección de dos condiciones. |
| Se utiliza para definir una unión de dos condiciones. |
| Determina si un atributo tiene un valor nulo. |
| Determina si un atributo no tiene un valor nulo. |
| Determina si un atributo tiene un valor booleano de |
| Determina si un atributo tiene un valor booleano de |
| Determina si el valor de cadena de un atributo está en un conjunto específico. El uso de este método produce un mejor rendimiento que encadenar varias cláusulas Ejemplo:
|
| Determina si el valor de cadena de un atributo no está en un conjunto específico. El uso de este método produce un mejor rendimiento que encadenar varias cláusulas Los valores deben estar entre paréntesis, separados por comas. Por ejemplo:
|
| Determina si un atributo contiene una subcadena especificada. El argumento de cadena para el operador Tenga en cuenta lo siguiente:
|
| Determina si un atributo no contiene una subcadena especificada. |
| Determina si un atributo contiene una subcadena Regex especificada. Utiliza la sintaxis RE2. Examples:
|
| Determina si un atributo no contiene una subcadena Regex especificada. Utiliza la sintaxis RE2. |
Esta consulta devuelve el tiempo de respuesta del browser para las páginas con checkout
en la URL para el usuario de Safari en los Estados Unidos y Canadá durante las últimas 24 horas.
SELECT histogram(duration, 50, 20) FROM PageViewWHERE countryCode IN ('CA', 'US') AND userAgentName='Safari' AND pageUrl LIKE '%checkout%'SINCE 1 day ago
Para obtener información sobre cómo consultar datos métricos, consulte consulta métrica.
FROM ...WITH function(attribute) AS varSELECT var...
Utilice la cláusula WITH ... AS
para definir variables NRQL para almacenar valores como variables a las que se puede hacer referencia en cualquier parte de la consulta. Algunas reglas y consejos:
- La cláusula
WITH ... AS
puede ir antes, entre o directamente luego de la cláusulaFROM
oSELECT
- Solo las funciones de fila (por ejemplo,
capture()
) se pueden configurar como variables. Las funciones de agregador, comoaverage()
, no son compatibles. - Solo se puede usar un
WITH
, pero puedes usar múltiples variables NRQL siempre que estén separadas por una coma. - Si una variable NRQL definida usa el mismo nombre que un atributo existente, la variable tendrá prioridad.
- Los nombres de variables no pueden incluir el símbolo
%
.
Importante
Las reglas de evento a métrica no soportan la cláusula WITH ... AS
en NRQL consulta.
A continuación se muestran algunos ejemplos de consultas:
FROM TransactionWITH duration * 1000 AS millisecSELECT millisec
FROM LogWITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice)SELECT itemId, unitPrice
Obtenga más información sobre el análisis de anclaje (aparse()
).
En este ejemplo, se utiliza una variable NRQL, unitPrice
, para crear otra variable, unitPriceNum
, convirtiendo la cadena extraída en un número. Luego, las variables se utilizan en las cláusulas SELECT
, WHERE
y FACET
.
FROM LogWITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice), numeric(unitPrice) AS unitPriceNumSELECT sum(unitPriceNum)FACET itemIdWHERE unitPriceNum < 100
SELECT ... WITH TIMEZONE (selected zone)...
Utilice la cláusula WITH TIMEZONE
para seleccionar una zona horaria para una fecha u hora en la consulta que aún no tiene una zona horaria especificada.
Si incluye la cláusula WITH TIMEZONE
sin especificar una zona horaria en una fecha y hora, las cláusulas since
y until
se mantienen en la zona horaria proporcionada.
Si no incluye la cláusula WITH TIMEZONE
, pero incluye una zona horaria en una cadena de fecha y hora, la zona horaria de la cadena de fecha y hora se mantiene.
Importante
La zona horaria predeterminada siempre es UTC si no se especifica ninguna. Los valores de timestamp sin procesar (como se ven en la vista JSON) en los resultados son siempre UTC. La UI muestra los resultados en la zona horaria que haya especificado en la configuración de su cuenta. Una zona horaria en una cadena de marca de tiempo siempre funciona. Reemplaza la zona WITH TIMEZONE
.
Por ejemplo, la cláusula de consulta SINCE Monday UNTIL Tuesday WITH TIMEZONE 'America/New_York'
devuelve datos registrados desde la medianoche del lunes, hora de Estados Unidos/Nueva York, hasta la medianoche del martes, hora de Estados Unidos/Nueva York.
A continuación se muestran algunos ejemplos de cláusulas de intervalo de tiempo de consulta:
No hay zona horaria en la cadena de fecha y hora usando la cláusula
WITH TIMEZONE
:SINCE today UNTIL '2022-05-19T12:00' WITH TIMEZONE 'America/Los_Angeles'Esto se resuelve como
"beginTime": "2022-05-19T07:00:00Z"
y"endTime": "2022-05-19T19:00:00Z"
.Zona horaria en la cadena de fecha y hora, sin utilizar la cláusula
WITH TIMEZONE
:SINCE today UNTIL '2022-05-19T12:00-0500'Esto se resuelve como
"beginTime": "2022-05-19T00:00:00Z"
y"endTime": "2022-05-19T17:00:00Z"
.Zona horaria en la cadena de fecha y hora, utilizando la cláusula
WITH TIMEZONE
América/Los Ángeles, que es -0700 durante el horario de verano:SINCE today UNTIL '2022-05-19T12:00-0500' WITH TIMEZONE 'America/Los_Angeles'Esto se resuelve como
"beginTime": "2022-05-19T07:00:00Z"
y"endTime": "2022-05-19T19:00:00Z"
.
Consulte la lista de ID de zona disponibles.
Consulte Establecer rango de tiempo en paneles y gráficos para obtener información detallada y ejemplos.
Consulta de datos metricos
Los datos métricos son más complejos que otros tipos de datos. Hay consejos específicos para consultarlo bien. Disponemos de dos tipos de datos métricos, cada uno con sus propias pautas de consulta:
- consulta dimensional métrica, que son reportados por nuestra API métrica y por algunas de nuestras soluciones que utilizan esa API (por ejemplo, nuestra integración Dropwizard o integración Micrometer).
- consulta intervalo de tiempo de datos métricos, que es nuestro tipo de datos métricos original reportado por nuestro APM, monitoreo de móviles y .
Para obtener más detalles sobre cómo reportamos datos métricos, consulte tipos de datos métricos.
Funciones
En esta sección explicamos las funciones NRQL , tanto funciones agregadoras como funciones no agregadoras.
Funciones agregadoras
Puede utilizar funciones de agregador para filtrar y agregar datos. Algunos consejos para utilizarlos:
- Consulte los tutoriales New Relic University para consultar Filter, Apdex consulta y percentil consulta. O vaya al curso completo en línea Redacción de consulta NRQL .
- Si utiliza una función de agregador varias veces en la misma consulta (por ejemplo,
SELECT median(one_metric), median(another_metric)
), puede causar problemas al mostrar los resultados. Para solucionar esto, utilice la funciónAS
. Por ejemplo:SELECT median(one_metric) AS 'med-a', median(another_metric) AS 'med-b' - No se admite el tipo de datos "coerción". Lea acerca de las funciones de conversión de tipos disponibles.
- Para saber cómo mostrar los resultados a lo largo del tiempo, consulte Agrupar resultados a lo largo del tiempo.
Ejemplos:
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago
Utilice la función aggregationendtime()
para devolver la hora de la agregación relevante. Más específicamente, para un agregado determinado, la función aggregationendtime()
proporciona la timestamp del final del período de tiempo de esa agregación. Por ejemplo, en una consulta de series de tiempo, para un punto de datos que abarca una hora de datos, la función devolvería la timestamp del final de ese período de hora.
Emplee la función apdex
para obtener una puntaje de Apdex para una sola transacción o para todas sus transacciones. El puntaje Apdex predeterminada es 0,5 segundos. El atributo puede ser cualquier atributo basado en el tiempo de respuesta, como duration
o backendDuration
. El argumento t:
define un umbral Apdex T
en la misma unidad de tiempo que el atributo elegido. Por ejemplo, si el atributo se mide en segundos, t
será un umbral en segundos.
El puntaje Apdex devuelta por la función apdex()
se basa únicamente en el tiempo de ejecución. No tiene en cuenta los errores de APM. Si una transacción incluye un error pero se completa en Apdex T o menos, la función apdex ()
calificará esa transacción como satisfactoria.
Si ha definido un atributo personalizado, puede filtrar en función de esos atributos. Por ejemplo, podrías monitor el Apdex para clientes particularmente importantes:
SELECT apdex(duration, t: 0.4) FROM TransactionWHERE customerName='ReallyImportantCustomer' SINCE 1 day ago
Utilice el atributo name
para devolver una puntuación para una transacción específica o devolver un Apdex general omitiendo name
. Esta consulta devuelve una puntuación de Apdex para la transacción Controller/notes/index durante la última hora:
La función apdex
devuelve una puntuación de Apdex que mide la satisfacción del usuario con su sitio. Los argumentos son un atributo de tiempo de respuesta y un umbral Apdex T en segundos.
SELECT apdex(duration, t: 0.5) from TransactionWHERE name='Controller/notes/index' SINCE 1 hour ago
Esta consulta de ejemplo devuelve un Apdex general para la aplicación durante las últimas tres semanas:
SELECT apdex(duration, t: 0.08) FROM Transaction SINCE 3 week ago
Utilice la función average()
para devolver el valor medio de un atributo. Toma un único nombre de atributo como argumento. Si un valor del atributo no es numérico, se ignorará al agregar. Si no se encuentran datos que coincidan con las condiciones de la consulta, o la consulta no devuelve valores numéricos, devolverá un valor nulo.
La función bucketPercentile()
es el equivalente NRQL de la función histogram_quantile
en Prometheus. Está pensado para ser utilizado con datos dimensionales métricos. En lugar del cuantil, New Relic devuelve el percentil, que es el cuantil * 100.
Utilice la función bucketPercentile()
para calcular el cuantil a partir de los datos del histograma en formato Prometheus.
Toma el nombre del depósito como argumento e informa el percentil a lo largo de los límites del depósito:
SELECT bucketPercentile(duration_bucket) FROM Metric SINCE 1 day ago
Opcionalmente, puedes agregar especificaciones percentiles como argumento:
SELECT bucketPercentile(duration_bucket, 50, 75, 90) FROM Metric SINCE 1 day ago
Debido a que se utilizan múltiples métricas para componer los datos del histograma de Prometheus, debe consultar la métrica de Prometheus específica en términos del <basename>
asociado.
Por ejemplo, para calcular el percentil a partir de un histograma de Prometheus, con <basename>
prometheus_http_request_duration_seconds
usando NRQL, use bucketPercentile(prometheus_http_request_duration_seconds_bucket, 50)
. Observe cómo se agrega _bucket
al final de <basename>
como sufijo.
Consulte la documentación de Prometheus.io para obtener más información.
Utilice la función cardinality()
para obtener el número de combinaciones de todas las dimensiones (atributo) en una métrica.
Se necesitan tres argumentos, todos opcionales:
- Nombre métrica: si está presente,
cardinality()
solo calcula la métrica especificada. - Incluir: si está presente, la lista de inclusión restringe el cálculo de cardinalidad a esos atributos.
- Excluir: si está presente, la lista de exclusión hace que esos atributos sean ignorados en el cálculo de cardinalidad.
cdfPercentage()
es una implementación de la función de distribución acumulativa, que devuelve porcentajes de attribute
valores cuyo valor es menor o igual a uno o más thresholds
.
cdfPercentage()
se agrega en su argumento attribute
, que puede ser un atributo numérico o un atributo de métrica de distribución. Se aceptan tipos mixtos en una consulta. Otros tipos (como cadenas) se ignoran. Se pueden especificar hasta 10 umbrales.
Esta consulta devuelve el porcentaje de evento donde firstPaint
es menor o igual a 0,5 segundos, y el porcentaje de evento donde firstPaint
es menor o igual a 1 segundo.
FROM PageView SELECT cdfPercentage(firstPaint, 0.5, 1.0)
Utilice la función count()
para devolver un recuento de registros disponibles. Se necesita un solo argumento; ya sea *
, un atributo o un valor constante. Actualmente, sigue el comportamiento típico de SQL y cuenta todos los registros que tienen valores para su argumento.
Dado que count(*)
no nombra un atributo específico, los resultados tendrán el formato predeterminado "humanizar" .
derivative()
encuentra la tasa de cambio para un conjunto de datos determinado. La tasa de cambio se calcula utilizando una regresión lineal de mínimos cuadrados para aproximar la derivada. Dado que este cálculo requiere comparar más de un punto de datos, si solo se incluye un punto de datos en el rango de evaluación, el cálculo es indeterminado y no funcionará, lo que dará como resultado un valor null
.
El time interval
es el período para el cual se calcula la tasa de cambio. Por ejemplo, derivative(attributeName, 1 minute)
devolverá la tasa de cambio por minuto.
Utilice la función earliest()
para devolver el valor más antiguo de un atributo durante el intervalo de tiempo especificado.
Se necesita un solo argumento.
Si se usa junto con un FACET
, devolverá el valor más reciente de un atributo para cada una de las facetas resultantes.
Esta consulta devuelve el código de país más antiguo por cada agente de usuario del evento PageView
.
SELECT earliest(countryCode) FROM PageView FACET userAgentName
Emplee la función filter()
para limitar los resultados de una de las funciones de agregador en su declaración SELECT
. Puede emplear filter()
junto con FACET
o TIMESERIES
. El filtro solo es útil cuando se seleccionan varias agregaciones diferentes, como por ejemplo:
SELECT filter(sum(x), WHERE attribute='a') AS 'A', filter(sum(x), WHERE attribute='b') AS 'B' ...
De lo contrario, es mejor utilizar la cláusula estándar WHERE
.
Utilice la función funnel()
para generar un gráfico embudos. Toma un atributo como primer argumento. Luego, especifica los pasos como cláusulas WHERE
(con cláusulas AS
opcionales para las etiquetas) separadas por comas.
Para obtener detalles y ejemplos, consulte la documentación de embudos.
Emplee la función histogram()
para generar histograma, que son útiles para visualizar la distribución de un conjunto de datos. Divide el conjunto de datos en una cantidad específica de depósitos y cuenta la cantidad de puntos de datos que se encuentran en cada depósito.
Argumentos:
attribute
El primer argumento es obligatorio y especifica el atributo para el cual se cuentan los valores que se encuentran dentro de cada rango de depósito de histograma.width:
Indica el ancho del rango de muestra. El valor máximo del rango es el valor del argumentostart
más este valorwidth
.- Cuando se emplean argumentos posicionales (sin etiquetas),
width
es el segundo argumento. - Por defecto:
10
- Cuando se emplean argumentos posicionales (sin etiquetas),
buckets:
Número total de depósitos (entre1
y500
, inclusive).- Cuando se emplean argumentos posicionales (sin etiquetas),
buckets
es el tercer argumento. - Por defecto:
40
- Cuando se emplean argumentos posicionales (sin etiquetas),
start:
El comienzo del rango del histograma.- Cuando se emplean argumentos posicionales (sin etiquetas),
start
es el cuarto argumento. - Por defecto:
0
Nota
Los valores que quedan fuera del rango de histograma definido se incluyen en el primer o último segmento. El primer recuento de depósitos incluirá elementos que sean más pequeños que el rango del histograma y el último recuento de depósitos incluirá elementos que sean más grandes que el rango del histograma. Para excluir estos valores de los resultados del histograma, incluya un filtro en la cláusula donde de la consulta. (Ejemplo:
WHERE attribute >= [start] AND attribute <= [start + width]
)Esta consulta da como resultado un histograma de tiempo de respuesta que varía hasta 10 segundos en 40 periodos. Esto significa que cada segmento cubre un rango de valores de 0,25 segundos. (10/40 = 0,25). Cualquier valor de duración superior a 10 segundos se incluye en el último depósito. Si la duración pudiera ser menor que cero, esos valores se incluirían en el primer grupo.
SELECT histogram(duration) FROM PageView SINCE 1 week agoEstas consultas equivalentes dan como resultado un histograma de tiempo de respuesta que varía hasta 5 segundos en 10 periodos.
SELECT histogram(duration, 5, 10) FROM PageView SINCE 1 week agoSELECT histogram(duration, width: 5, buckets: 10) FROM PageView SINCE 1 week agoEstas consultas equivalentes dan como resultado un histograma de tiempo de respuesta que oscila entre 1 y 4 segundos en 3 periodos.
Aquí hay un desglose de los cubos:
Cubo 1
Cubo 2
Cubo 3
Gama de cucharones
1 a 2
2 a 3
3 a 4
Valores contados
< 2
≥ 2 y < 3
≥ 3
SELECT histogram(duration, 3, 3, 1)FROM PageView SINCE 1 week agoSELECT histogram(duration, width: 3, buckets: 3, start: 1)FROM PageView SINCE 1 week agohistogram()
Acepta cubos de histograma Prometheus:SELECT histogram(duration_bucket, 10, 20)FROM Metric SINCE 1 week agohistogram()
acepta la métrica de distribución como entrada:SELECT histogram(myDistributionMetric, 10, 20)FROM Metric SINCE 1 week agoUtilice
histogram()
con una cláusulaFACET
para generar un gráfico de mapa de calor:SELECT histogram(duration)FROM PageView FACET appName SINCE 1 week ago- Cuando se emplean argumentos posicionales (sin etiquetas),
Usar keyset()
le permitirá ver todos los atributos para un tipo de datos determinado durante un rango de tiempo determinado. No se necesitan argumentos. Devuelve una estructura JSON que contiene grupos de claves escritas en cadenas, claves numéricas, claves booleanas y todas las claves.
Esta consulta devuelve el atributo encontrado para PageView
evento del último día:
SELECT keyset() FROM PageView SINCE 1 day ago
Utilice la función latest()
para devolver el valor más reciente de un atributo durante un rango de tiempo específico.
Se necesita un solo argumento.
Si se usa junto con un FACET
, devolverá el valor más reciente de un atributo para cada una de las facetas resultantes.
Esta consulta devuelve el código de país más reciente por cada agente de usuario del evento PageView
.
SELECT latest(countryCode) FROM PageView FACET userAgentName
Utilice la función latestrate()
para devolver la tasa de cambio de un valor en función de los 2 últimos puntos de datos. Toma el atributo en cuestión como primer argumento y la unidad de tiempo de la tasa resultante como segundo argumento. La función devuelve un resultado en unidades de change in attribute/time interval
.
Esta función puede resultar útil para proporcionar la tasa de cambio más reciente de un atributo a fin de ver las tendencias de vanguardia.
Esta consulta devuelve la tasa de cambio de duración según los 2 últimos puntos de datos. Se devolverá en unidades de duration/second
debido al argumento 1 SECOND
.
SELECT latestrate(duration, 1 SECOND) FROM PageView
Utilice la función max()
para devolver el valor máximo registrado de un atributo numérico durante el rango de tiempo especificado. Toma un único nombre de atributo como argumento. Si un valor del atributo no es numérico, se ignorará al agregar. Si no se encuentran datos que coincidan con las condiciones de la consulta, o la consulta no devuelve valores numéricos, devolverá un valor nulo.
Emplee la función median()
para devolver la mediana de un atributo o el percentil 50. Para obtener más información sobre percentil consulta, consulte percentile()
.
Esta consulta generará un gráfico de líneas para el valor mediano.
SELECT median(duration) FROM PageView TIMESERIES AUTO
Mediana en una cláusula JOIN
:
Dado que la mediana es simplemente un atajo para
percentile(attribute, 50)
, un resultadomedian()
de una subconsulta unida es un tipo de datos compuesto, que asigna el percentil 50 a su valor calculado.Para hacer referencia al valor mediano real en la consulta externa, puede utilizar la función
getField()
. Tenga en cuenta que la clave asignada es una representación de cadena de un valor doble, por lo que paramedian()
es'50.0'
.
Utilice la función min()
para devolver el valor mínimo registrado de un atributo numérico durante el rango de tiempo especificado. Toma un único nombre de atributo como argumento. Si un valor del atributo no es numérico, se ignorará al agregar. Si no se encuentran datos que coincidan con las condiciones de la consulta, o la consulta no devuelve valores numéricos, devolverá un valor nulo.
Utilice la función percentage()
para devolver el porcentaje de un conjunto de datos objetivo que coincide con alguna condición.
Esta función espera exactamente dos argumentos (los argumentos luego de los dos primeros se ignoran). El primer argumento requiere una función agregadora contra el atributo deseado. Si el atributo no es numérico, esta función devuelve un valor de 100%. El segundo argumento requiere una cláusula WHERE
.
FROM Transaction SELECT percentage(count(*), WHERE error is true ) AS 'Error Percent' WHERE host LIKE '%west%' EXTRAPOLATE
Utilice la función percentile()
para devolver el valor aproximado de un atributo en un percentil determinado. Requiere un atributo y puede tomar cualquier número de argumentos que representen puntos percentiles. La función percentile()
permite que el percentil se muestre con hasta tres dígitos después del punto decimal, lo que proporciona mayor precisión. El umbral de percentil se puede especificar como valores decimales, pero tenga en cuenta que, para la mayoría de los conjuntos de datos, no se resolverán los percentiles más cercanos a 0,1 entre sí.
Ejemplos de visualización de percentiles
Utilice TIMESERIES
para generar un gráfico de líneas con percentiles asignados a lo largo del tiempo.
Omita
TIMESERIES
para generar un cartel y una hoja de atributos que muestre los valores agregados para el percentil.Si no aparece ningún percentil, el valor predeterminado es el percentil 95. Para devolver solo el valor del percentil 50, la mediana, también puede emplear
median()
.Esta consulta generará un gráfico de líneas con líneas para los percentil 5, 50 y 95.
SELECT percentile(duration, 5, 50, 95) FROM PageView TIMESERIES AUTOpercentil en una cláusula
JOIN
:Cuando utilice percentil en una subconsulta unida, tenga en cuenta que los resultados de la subconsulta son un tipo de datos compuesto, que asigna cada percentil a su valor calculado.
Para hacer referencia a cualquiera de los valores de percentil individuales en la consulta externa, puede emplear la función
getField()
. Tenga en cuenta que la clave asignada es una representación de cadena de un valor doble, por lo que debe sumar.0
a los números enteros. Por ejemplo, la clave para el percentil 95 es'95.0'
.
predictLinear()
es una extensión de la función derivative()
. Utiliza un método similar de regresión lineal de mínimos cuadrados para predecir los valores futuros de un conjunto de datos.
- El
time interval
es hasta dónde se verá la consulta en el futuro. Por ejemplo,predictLinear(attributeName, 1 hour)
es una predicción lineal 1 hora en el futuro de la ventana de tiempo de consulta. - Generalmente,
predictLinear()
es útil para valores en continuo crecimiento, como el espacio en disco o predicciones sobre grandes tendencias. - Dado que
predictLinear()
es una regresión lineal, estar familiarizado con el conjunto de datos que se consulta ayuda a garantizar predicciones precisas a largo plazo. - Cualquier conjunto de datos que crezca exponencial, logarítmicamente o por otros medios no lineales probablemente sólo tendrá éxito en predicciones a muy corto plazo.
- New Relic recomienda no usar
predictLinear
enTIMESERIES
consulta. Esto se debe a que cada segmento hará una predicción individual basada en su período de tiempo relativo dentro de la consulta, lo que significa que dicha consulta no mostrará predicciones desde el final de la serie de tiempo en adelante.
Utilice la función rate()
para visualizar la frecuencia o tasa de una consulta determinada por intervalo de tiempo. Por ejemplo, es posible que desee saber la cantidad de páginas vistas por minuto durante un período de una hora o el recuento de sesiones únicas en su sitio por hora durante un período de un día.
Utilice
TIMESERIES
para generar un gráfico de líneas con tarifas asignadas a lo largo del tiempo.Omita
TIMESERIES
para generar un cartel que muestre un valor de tarifa único promediado a lo largo del tiempo.Aquí hay una consulta básica que generará un gráfico de líneas que muestra la tasa de rendimiento de la transacción APM por 10 minutos durante las últimas 6 horas:
SELECT rate(count(*), 10 minute) FROM TransactionSINCE 6 hours ago TIMESERIESA continuación se muestra un vídeo breve (3:21 minutos) que explica cómo utilizar
rate
para comparar datos en diferentes períodos de tiempo:
Utilice la función stdvar()
para devolver la variación estándar de un atributo numérico durante el rango de tiempo especificado.
Se necesita un solo argumento. Si el atributo no es numérico, devolverá un valor de cero.
Utilice la función sum()
para devolver la suma de los valores registrados de un atributo numérico durante el rango de tiempo especificado.
Se necesita un solo argumento. Si el atributo no es numérico, devolverá un valor de cero.
Utilice la función uniqueCount()
para devolver el número de valor único registrado para un atributo durante el rango de tiempo especificado.
Sugerencia
Para optimizar el rendimiento de la consulta, esta función devuelve resultados aproximados para consultas que inspeccionan 256 o más valor único.
Utilice la función uniques()
para devolver una lista de valor único registrado para un atributo durante el rango de tiempo especificado. Cuando se usa junto con la cláusula facet
, se devolverá una lista de valores de atributos únicos por cada valor de faceta.
El parámetro limit
es opcional. Cuando no se proporciona, se aplica el límite predeterminado de 1000 valores de atributos únicos por faceta. Puede especificar un valor limit
diferente, hasta un máximo de 10 000. La función uniques()
devolverá el primer conjunto de valores de atributos únicos descubiertos, hasta alcanzar el límite. Por lo tanto, si tiene 5000 valores de atributos únicos en su conjunto de datos y el límite está establecido en 1000, el operador devolverá los primeros 1000 valores únicos que descubra, independientemente de su frecuencia.
El número máximo de valores que se pueden devolver en el resultado de una consulta es el producto del límite uniques()
por el límite facet
. En la siguiente consulta, el número máximo teórico de valores que se pueden devolver es 5 millones (5000 x 1000).
Dependiendo del conjunto de datos que se consulte y de la complejidad de la consulta, los límites de protección de la memoria pueden impedir que se ejecute una consulta muy grande.
From Transaction SELECT uniques(host,5000) FACET appName LIMIT 1000
Si desea conocer las combinaciones únicas de un puñado de atributos, puede estructurar una consulta en el formato SELECT uniques(tuple(x, y, ... z)) ...
para obtener todas las tuplas únicas de valores, para mantener su relación. En la siguiente consulta, tuple
se utiliza en index
y cellName
juntos para encontrar valores únicos donde esos dos valores aparecen en combinación.
FROM NodeStatus SELECT uniques(tuple(index, cellName), 5)
Funciones no agregadoras
Utilice funciones no agregadoras para datos no numéricos en la consulta NRQL .
Utilice la función accountId()
para devolver el ID de cuenta asociado con los datos de la consulta. Esta función no acepta argumentos. A continuación se muestran algunos ejemplos de consultas:
Esta consulta devuelve el ID de cuenta asociado con cada evento Transaction
devuelto:
SELECT accountId() FROM Transaction SINCE 1 day ago
Esta consulta devuelve el número de Transaction
eventos del último día asociados con cada ID de cuenta:
SELECT count(*) FROM Transaction FACET accountId() SINCE 1 day ago
Esta consulta devuelve el número de Transaction
evento del último día donde el ID de cuenta es específicamente uno de 1
, 2
o 3
:
SELECT count(*) FROM Transaction WHERE accountId() IN (1,2,3) SINCE 1 day ago
Utilice la función de análisis de anclaje, aparse()
para extraer valores específicos de una cadena. Esta es una alternativa a capture()
.
aparse()
toma dos argumentos:
Un atributo de cadena
Una cadena de patrón con cadenas de anclaje y caracteres de extracción. Por ejemplo, podría utilizar
www.*.com
para extraer el dominio de una URL.Cuando se utiliza
aparse()
, la cadena de patrón debe contener anclajes, comowww.
y.com
arriba, para identificar la ubicación de la cadena extraída deseada, indicada por*
.aparse()
utiliza los siguientes caracteres en cadenas de patrones:%
: comodín que no captura, como se ve en la cláusulaLIKE
*
: Captura de comodines, similar al uso de captura de expresiones regularesEn la práctica, las cadenas de anclaje suelen aparecer en medio de un atributo de cadena, y no al principio ni al final.
En este caso, utilice el comodín
%
para ignorar valores no deseados: por ejemplo,%www.*.com%
.Al igual que
capture()
, todos los resultados deaparse()
son cadenas. Para utilizar estos resultados en funciones matemáticas, deben convertirlos con la funciónnumeric()
.Nota:
aparse()
no distingue entre mayúsculas y minúsculas.FROM PageViewSELECT aparse(browserTransactionName, 'website.com/*')Para extraer un valor del medio de una cadena, utilice el comodín que no captura,
%
, al principio y al final de la cadena del patrón. Por ejemplo:FROM LogSELECT count(*)FACET aparse(string, '%"itemId":"*"%')Al extraer varios valores como variables, tenga en cuenta que el orden es importante. Por ejemplo:
FROM LogWITH aparse(string, 'POST: * body: {"itemId":"*","unitPrice":*}\n') AS (url, itemId, unitPrice)SELECT url, itemId, unitPricePara obtener más información sobre las variables, consulte Variables NRQL.
Utilice la función blob()
en un atributo de tipo blob para devolver una cadena codificada en base 64 de ese atributo.
Esta función tiene las siguientes restricciones:
La consulta que contiene llamadas a
blob()
tiene un valor máximo deLIMIT
de 20blob()
no se puede llamar en la cláusulaWHERE
de una consultablob()
no se puede utilizar en consulta facetada o consulta de series temporalesPara obtener más información sobre cómo se usa esto en el registro, consulte Buscar datos en registros largos (blobs).
Para decodificar un blob codificado en base 64, consulte la función
decode()
.SELECT message, blob(`newrelic.ext.message`)FROM Log WHERE newrelic.ext.message IS NOT NULL
Utilice la función buckets()
para agregar datos divididos por una cláusula FACET
en depósitos basados en rangos. Puede agrupar por cualquier atributo que esté almacenado como un valor numérico en la base de datos de New Relic.
Se necesitan tres argumentos:
Nombre del atributo
Valor máximo del rango de muestra (cualquier valor atípico aparecerá en el grupo final)
Número total de cubos
Para obtener más información y ejemplos, consulte Divida sus datos en depósitos.
Utilice la función concat()
para devolver la cadena resultante de concatenar sus argumentos.
Se pueden proporcionar hasta 20 argumentos de tipo numérico, booleano, tupla o matriz. Se ignoran los argumentos nulos y los argumentos de tipos no admitidos. Si no se proporcionan argumentos, el resultado es una cadena vacía.
Se puede proporcionar el argumento de precisión opcional para limitar el número de decimales incluidos al concatenar valores numéricos de punto flotante.
La cadena resultante puede tener una longitud máxima de 4096 caracteres.
Esta consulta devuelve duraciones de backend y de red del evento PageView
, formateadas con dos decimales y etiquetas, como una sola cadena.
FROM PageView SELECT concat('Backend Duration: ', backendDuration, ', Network Duration: ', networkDuration, precision: 2)
Esto devolvería respuestas en un formato como:
Backend Duration: 0.69, Network Duration: 0
Esta consulta devuelve la duración promedio de la configuración de la conexión desde el evento PageView
, dividida por una cadena compuesta por la ciudad, la región y el país del usuario.
FROM PageView SELECT average(connectionSetupDuration) FACET concat(city, ', ', regionCode, ' ', countryCode) WHERE countryCode IN ('US', 'CA')
Utilice la función convert()
para realizar la conversión de unidades entre las unidades proporcionadas en el valor de entrada dado.
Las unidades comunes y abreviaturas de tiempo, longitud, peso, volumen y datos se admiten mediante los estándares UCUM para alinearse con las especificaciones de OpenTelemetry. Para mayor comodidad, las abreviaturas estandarizadas se complementan con algunas alternativas de lenguaje natural como ft
además de ft_us
, kilobytes
y µs
.
Las unidades distinguen entre mayúsculas y minúsculas. Todas las unidades están en minúsculas, a menos que su especificación requiera que estén en mayúsculas. Por ejemplo, las unidades de datos 'bits'
son válidas para bits y 'By'
debe tener una B
mayúscula para bytes.
La unidad de tiempo más grande es el juliano year
, que siempre es 365,25 días.
FROM Transaction SELECT convert(duration, 'ms', 'min') AS durationMin
FROM Product SELECT convert(sum(itemWeight), 'grams', 'lbs')
Esta consulta supone que tiene la información de la unidad almacenada como un atributo de cadena en el evento mismo y que desea estandarizar los valores a segundos.
FROM Metric SELECT average(convert(apm.mobile.external.duration, unit, 's')) WHERE appName = 'my-application'
Utilice capture()
para extraer valores de un atributo mediante una expresión regular con sintaxis RE2.
Se necesitan dos argumentos:
Nombre del atributo
Expresión regular con sintaxis de captura (las expresiones regulares en NRQL usan una sintaxis similar a Python,
r'...'
)Al capturar, utilice la sintaxis de captura con nombre RE2
...(?P<name> pattern )...
para capturar el patrón contenido, dado el nombre especificado.Se pueden capturar varios valores especificando grupos de captura adicionales en una expresión regular. Por ejemplo:
...(?P<name1> pattern1)...(?P<name2> pattern2)...
Nota: Al capturar varios valores, cada declaración de captura puede tener hasta 16 grupos de captura y cada consulta NRQL puede tener hasta 5 declaraciones de captura.
Lea cómo utilizar la captura de expresiones regulares para mejorar los resultados de su consulta.
Sugerencia
La expresión regular debe coincidir con toda su entrada. Si una expresión de captura no extrae los resultados esperados, verifique si necesita
.*
al principio o al final, que es el patrón para una expresión regular de coincidencia parcial. Sin embargo, la expresión regular de coincidencia parcial puede provocar una ejecución de consulta lenta.A continuación se muestra un vídeo breve (3:05 minutos) que muestra cómo utilizar
capture()
para mejorar la legibilidad dashboard :Para obtener más información, consulte los ejemplos siguientes:
Lo siguiente seleccionará el nombre de dominio del sitio web, eliminando
https://
y cualquier ruta que siga el.com
SELECT capture(pageUrl, r'https://(?P<baseUrl>.*.com)/.+')FROM PageView SINCE 1 day agoLo siguiente capturará solo la primera palabra del mensaje de error.
SELECT capture(errorMessage, r'(?P<firstWord>\S+)\s.+')FROM TransactionWHERE errorMessage IS NOT NULLSINCE 1 hour agoLo siguiente se facetará mediante el método HTTP capturado.
SELECT count(*) FROM LogWHERE message LIKE '%HTTP%'FACET capture(message, r'.* "(?P<httpMethod>[A-Z]+) .*')Lo siguiente filtrará los resultados según el registro de evento con el atributo
message
que coincide con la expresión regular donde el nombre del trabajo capturado esExampleJob
.SELECT message FROM LogWHERE capture(message, r'.*Job Failed: (?P<jobName>[A-Za-z]+),.*') = 'ExampleJob'SINCE 10 minutes agoLo siguiente capturará la suma del tiempo de CPU de las líneas log . Debe convertir explícitamente a numérico para realizar operaciones matemáticas.
SELECT sum(numeric(capture(message, r'.*CpuTime:\s(?P<cpuTime>\d+)')))FROM LogWHERE message LIKE '%CpuTime:%' SINCE 1 hour agoEn este ejemplo, las variables NRQL se utilizan para almacenar múltiples valores capturados de un mensaje de registro.
FROM LogWITH capture(message, r'POST to carts: (?P<URL>.*) body: {"itemId":"(?P<UUID>.*)","unitPrice":(?P<unitPrice>.*)}.*')AS (URL, UUID, unitPrice)SELECT URL, UUID, unitPriceWHERE URL IS NOT NULLVea más sobre las variables NRQL aquí.
Utilice decode()
para realizar conversiones base 64 en cadenas y blobs. El valor de entrada (el primer argumento) se decodificará utilizando el estándar base-64 especificado por la codificación (el segundo argumento).
Se admiten los siguientes valores de cadena en el parámetro de codificación:
'base64': utiliza el estándar RFC4648 base-64
'base64mime': Utiliza el estándar RFC2045 base-64 (MIME)
'base64url': utiliza el estándar RFC4648 base-64 con URL y alfabeto seguro para nombres de archivos
Como
blob()
no está permitido en las cláusulasWHERE
oFACET
,decode()
con tipos de blob no se admite en la cláusulaWHERE
ni para consultas facetadas.Para codificar cadenas, consulte la función
encode()
.FROM Span SELECT entity.guid, decode(entity.guid, 'base64')WHERE entity.guid IS NOT NULLFROM Span SELECT count(*)WHERE entity.guid IS NOT NULLFACET entity.guid, decode(entity.guid, 'base64')FROM Span SELECT count(*)WHERE entity.guid IS NOT NULLAND decode(entity.guid, 'base64') NOT LIKE '%APM%'FROM LogWITH blob(`newrelic.ext.message`) AS encodedBlob,decode(encodedBlob, 'base64') AS decodedBlobSELECT encodedBlob, decodedBlobWHERE newrelic.ext.message IS NOT NULLLIMIT 10
Utilice la función dimensions()
para devolver todos los valores dimensionales de un tipo de datos.
Puede incluir o excluir explícitamente un atributo específico utilizando los argumentos opcionales:
include
: si está presente, la lista de inclusión limitadimensions()
a esos atributos.exclude
: si está presente, el cálculodimensions()
ignora esos atributos.FROM Metric SELECT count(node_filesystem_size)TIMESERIES FACET dimensions()Cuando se usa con una cláusula
FACET
,dimensions()
produce una serie de tiempo única para todas las facetas disponibles en el tipo de evento, similar a cómo se comporta Prometheus con consultas no agregadas.
Utilice encode()
para realizar conversiones base 64 en cadenas. El valor de entrada (el primer argumento) se codificará utilizando el estándar base-64 especificado por la codificación (el segundo argumento).
Se admiten los siguientes valores de cadena en el parámetro de codificación:
'base64': utiliza el estándar RFC4648 base-64
'base64mime': Utiliza el estándar RFC2045 base-64 (MIME)
'base64url': utiliza el estándar RFC4648 base-64 con URL y alfabeto seguro para nombres de archivos
Para decodificar cadenas o blobs, consulte la función
decode()
.encode()
no es compatible con blobs.FROM PageView SELECT session, encode(session, 'base64')
Utilice la función cidrAddress()
para obtener la dirección de red base de una dirección IP CIDR.
cidrAddress()
toma los siguientes argumentos:
attribute
- Un valor de cadena que contiene una dirección IP sola o con una longitud de prefijo en notación CIDR.- Puede ser un atributo de cadena o un literal de cadena entre comillas.
- La dirección IP debe ser una dirección IPv4.
number
- Un valor entero que representa la longitud del prefijo.- Puede ser un atributo entero o un valor entero.
- Si el parámetro de atributo está en notación CIDR, este parámetro es opcional y tiene prioridad sobre la longitud del prefijo proporcionada en la cadena CIDR.
cidrFormat
- Un valor booleano opcional que se emplea para determinar si la salida de la dirección de red debe formatear en notación CIDR. Este valor predeterminado será verdadero.La función
cidrAddress()
devolverá un valor siempre que el atributo y el parámetro number contengan una dirección IP válida y una longitud de prefijo. Si la entrada del parámetro no es válida,cidrAddress()
devolveránull
.La siguiente consulta devuelve las subredes que procesan la mayoría de las solicitudes del tipo de evento SyntheticRequest .
FROM SyntheticRequest SELECT count(*) FACET cidrAddress(serverIPAddress, 24)Esto devolvería respuestas en un formato como:
Dirección Cidr de la dirección IP del servidor
Contar
10.0.0.0/24
6k
10.10.1.0/24
4k
10.0.14.0/24
1k
Esta consulta devuelve todas las direcciones IP en el atributo
serverIPAddress
que existen dentro del rango CIDR de 10.0.0.0 a 10.0.0.255.FROM SyntheticRequest SELECT uniques(serverIPAddress)WHERE cidrAddress(serverIPAddress, 24) = '10.0.0.0/24'Esta consulta devuelve un recuento de todos los registros y excluye los registros que contienen un valor
serverIPAddress
que se encuentra dentro del rango CIDR de 10.0.0.0/24 o 10.10.1.0/24.FROM SyntheticRequest SELECT count(*)WHERE cidrAddress(serverIPAddress, 24) NOT IN ('10.0.0.0/24', '10.10.1.0/24')
...WHERE eventType() = 'EventNameHere'......FACET eventType()...
Utilice la función eventType()
en una cláusula FACET para dividir los resultados por el tipo de datos seleccionado o en una cláusula WHERE para filtrar los resultados según un tipo de datos específico. Esto es particularmente útil para apuntar a tipos de datos específicos con las funciones filter() y percentage() .
Importante
En este contexto, "tipo de evento" se refiere a los tipos de datos a los que puede acceder con una consulta NRQL.
Esta consulta devuelve el porcentaje del total de TransactionError
resultados del total Transaction
resultados. Puede utilizar la función eventType()
para orientar tipos de datos específicos con la función filter()
.
SELECT 100 * filter(count(*), WHERE eventType() = 'TransactionError') / filter(count(*), where eventType() = 'Transaction') FROM Transaction, TransactionError WHERE appName = 'App.Prod' TIMESERIES 2 Minutes SINCE 6 hours ago
Esta consulta muestra un recuento de cuántos registros devuelve cada tipo de datos (Transaction
y TransactionError
).
SELECT count(*) FROM Transaction, TransactionError FACET eventType() TIMESERIES
Utilice la función getField()
para extraer un campo de tipos de datos compuestos, como datos métricos dimensionales.
Se necesitan los siguientes argumentos:
Tipo de métrica | Campos admitidos |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Ejemplos:
SELECT max(getField(mySummary, count)) FROM Metric
SELECT sum(mySummary) FROM Metric where getField(mySummary, count) > 10
getCdfCount()
es una implementación de la función de distribución acumulativa, que devuelve el número de valores en attribute
en threshold
o menos.
Sólo se permite un umbral. Attribute
puede ser un atributo numérico o un atributo de métrica de distribución. Se aceptan tipos mixtos en una consulta.
Para un tipo numérico, devuelve 1 si el atributo es menor o igual que el umbral; de lo contrario, devuelve 0. Para una distribución, devuelve el recuento en el conjunto de datos representado por la distribución. Para todos los demás tipos, devuelve 0.
Esta consulta devuelve el número de eventos donde firstPaint
es menor o igual a 1 segundo.
FROM PageView SELECT sum(getCdfCount(firstPaint, 1.0))
Utilice if()
para realizar operaciones de flujo de control if-then-else a lo largo de una consulta.
if()
toma 3 argumentos:
condition
- una expresión que puede evaluar comotrue
ofalse
trueValue
- este valor se devuelve si la expresión booleana estrue
falseValue
- este valor opcional se devuelve si la expresión booleana esfalse
, o si no se proporciona, se devuelveNULL
FROM LogSELECT count(*)FACET if(level_name = 'ERROR', 'ERROR', 'NOT_ERROR')FROM LogSELECT count(*)FACET if(level_name = 'INFO' OR level_name = 'WARNING', 'NOT_ERROR', 'ERROR')Utilice una función if() anidada para agregar lógica condicional adicional.
FROM Transaction SELECT count(*)FACET if(appName LIKE '%java%', 'Java',if(appName LIKE '%kafka%', 'Kafka', 'Other'))
Utilice la función de análisis JSON, jparse()
, para analizar un valor de cadena y producir un mapa/lista de valores (o estructuras anidadas) que se pueden manejar como cualquier otro tipo de valor de primera clase en NRQL.
jparse()
toma dos argumentos:
attribute
- Un valor de cadena JSON.path
- Un valor de cadena opcional que se emplea para hacer referencia directa a una parte particular del JSON dentro del parámetroattribute
. Consulte la sección Referencia de sintaxis de ruta de análisis JSON a continuación.La función
jparse()
sigue el formato RFC 8259 para analizar valores JSON. Cuando la funciónjparse()
se utiliza sin el parámetropath
, devolverá el valor JSON deserializado.Puede usar corchetes para extraer valores individuales de un resultado
jparse()
a través de una clave/índice y asignar claves JSON directamente al atributo usando la cláusulaWITH
.Referencing a key
La siguiente consulta hace referencia a la clave
userNames
dentro del atributojsonString
y devolverá['abc', 'xyz']
.WITH '{"userNames": ["abc", "xyz"]}' AS jsonString SELECT jparse(jsonString)[userNames]Referencing an index
La siguiente consulta hace referencia al índice
0
dentro del atributojsonString
y devolverá'abc'
.WITH '["abc", "xyz"]' AS jsonString SELECT jparse(jsonString)[0]La siguiente consulta utiliza
jparse()
en la cláusulaWITH
para asignar las claves JSONuserName
yid
a variables NRQL para que puedan usarse en el resto de la consulta.WITH '{"userName": "test", "unused": null, "id": 100}' AS jsonString, jparse(jsonString) AS (userName, id) SELECT userName, idPara analizar valores específicos de la cadena JSON, puede utilizar el parámetro
path
.Es común que los datos JSON estén anidados en varias capas en formas no triviales. La sintaxis de la ruta le permite hacer referencia directamente a una parte particular de los datos JSON.
Datos de ejemplo:
{"valueA": "test","valueB": {"nestedValue1": [1, 2, 3],"nestedValue2": 100},"valueC": [{ "id": 1, "label": "A", "other": 7 },{ "id": 2, "label": "B", "other": 9 },{ "id": 3, "label": "C", "other": 13 }]}Ejemplos de sintaxis de ruta utilizando los datos anteriores:
Path Syntax Example
Result Description
Result
valueA
Devuelve el valor en la clave
"test"
["valueA"]
Devuelve el valor en la clave
"test"
[valueA, valueC]
Devuelve la lista de valor principal
["test", [{"id": 1…}, {"id": 2…}], {"id": 3…}]]
valueB.nestedValue2
Devuelve el valor en la clave
100
valueC[0]
Devuelve el valor de la lista en el índice
0
{"id": 1…}
valueC[0,2]
Devuelve los valores de la lista en el índice
0
y2
[{"id": 1…}, {"id": 3…}]
valueC[0:2]
Devuelve el rango de valores de la lista desde el primer índice al segundo, excluyendo el valor en el segundo índice. En este caso, se devuelven los valores de la lista en el índice
0
y1
.[{"id": 1…}, {"id": 2…}]
valueC[:2]
Devuelve el rango de valores de la lista desde el principio hasta el segundo índice, excluyendo el valor en el segundo índice. En este caso, se devuelven los valores de la lista en el índice
0
y1
.[{"id": 1…}, {"id": 2…}]
valueC[:-2]
Devuelve todos los valores de la lista excepto el último n, donde n es un número negativo luego de los dos puntos (es decir,
[:-n]
). En este caso, se devolverá el valor de la lista en el índice0
.[{"id": 1…}]
valueC[1:]
Devuelve el rango de valores de la lista desde el índice especificado hasta el final de la lista. En este caso, se devuelven los valores de la lista en el índice
1
y2
.[{"id": 2…}, {"id": 3…}]
valueC[-1:]
Devuelve los últimos n valores de la lista, donde n es un número negativo antes de los dos puntos (por ejemplo,
[-n:]
). En este caso se devolverá el valor de la lista en el índice2
.[{"id": 3…}]
valueC[*]
Devuelve todos los valores de la lista
[{"id": 1…}, {"id": 2…}, {"id": 3…}]
valueC[*].id
Devuelve el valor principal especificado de todos los afiliados a la lista. En este caso, el valor principal es
id
.[1, 2, 3]
valueC[*]["label", "other"]
Devuelve las claves especificadas de todos los afiliados a la lista. En este caso, el valor principal es
label
yother
.[["A", 7],…]
Ejemplos:
La siguiente consulta analiza la cadena JSON dentro del atributo
jsonString
.WITH '{"user": {"name": "John", "id": 5}}' AS jsonString SELECT jparse(jsonString)Esta consulta devolverá la cadena JSON deserializada:
{ "user": { "name": "John", "id": 5 } }Un problema común es tener datos ricos y estructurados escondidos dentro de un mensaje de registro. Puede aprovechar
aparse()
yjparse()
para eliminar el ruido y encontrar valores específicos.La siguiente consulta:
Llama a
aparse()
para extraer datos JSON del atributologMessage
Analiza el campo
user.name
de los datos JSON extraídos utilizandojparse()
y el parámetro de rutauser.name
.WITH '1693242121842: value=\'{"user": {"name": "John", "id": 5}}\', useless=stuff' AS logMessage, aparse(logMessage, '%: value=\'*\'%') AS jsonString SELECT jparse(jsonString, 'user.name')
La siguiente consulta analiza cada campo
id
de la lista de objetos dentro del atributojsonString
y genera estos valores como una matriz.WITH '{"users": [{"name": "A", "id": 5}, {"name": "B", "id": 10}]}' AS jsonString, jparse(jsonString, 'users[*].id') AS ids SELECT idsLa consulta anterior devolverá
[5, 10]
.Funciones relacionadas:
mapKeys()
,mapValues()
Utilice la función length()
para devolver la longitud de un valor de cadena o el número de elementos en un valor de matriz.
Se necesita un solo argumento.
Esta consulta devuelve la longitud de cada cadena de URL del evento PageView
.
SELECT length(pageUrl) FROM PageView
Si has subido una tabla de búsquedas, puedes usar esta función con un nombre de tabla para acceder a los datos de esa tabla en una consulta. Aquí hay una consulta de ejemplo:
FROM LogSELECT count(*)WHERE hostname IN (FROM lookup(myHosts) SELECT uniques(myHost))
Para obtener más información, consulte Cómo consultar la tabla de búsquedas de datos.
Utilice la función lower()
para cambiar todos los caracteres alfabéticos de un valor de cadena a minúsculas.
Argumentos:
str
- El valor de la cadena se escribirá en minúsculas.- Puede ser cualquier cosa que se evalúe como una cadena, incluida una cadena literal entre comillas, un atributo de cadena de consulta, una función que devuelve una cadena o incluso una subconsulta que devuelve un único valor de cadena.
- Si este argumento se evalúa como nulo, la función
lower()
devolverá nulo.
Función relacionada:
upper()
Utilice la función mapKeys()
para devolver una lista de claves cuando se proporciona un mapa como entrada dentro del parámetro attribute
.
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys
La consulta anterior:
- Deserializa la cadena JSON dentro del atributo
jsonString
en un mapa usando la funciónjparse()
- Llama a la función
mapKeys()
para extraer una lista de todas las claves dentro de este mapa. - Vincula esta lista de claves al atributo
keys
Después de ejecutar la consulta anterior, keys
contendrá la lista ['userResult1', 'userResult2', 'userResult3']
.
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys
La consulta anterior extraerá solo las claves más externas de la cadena JSON dentro del atributo jsonString
. Después de ejecutar la consulta, keys
contendrá la lista ['value1', 'value2']
.
Utilice la función mapValues()
para devolver una lista de valores cuando se proporciona un mapa como entrada dentro del parámetro attribute
.
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values
La consulta anterior:
- Deserializa la cadena JSON dentro del atributo
jsonString
en un mapa usando la funciónjparse()
- Llama a la función
mapValues()
para extraer una lista de todos los valores dentro de este mapa. - Vincula esta lista de valores al atributo
values
Después de ejecutar la consulta anterior, values
contendrá la lista [100, 200, 4]
.
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values
La consulta anterior extrae los valores más externos de la cadena JSON dentro del atributo jsonString
. Después de ejecutar la consulta, values
contendrá una lista de la cadena "test"
y el objeto anidado.
Esto se puede ver en la vista JSON:
"contents": [ { "function": "alias", "alias": "values", "contents": { "constant": [ "test", { "nestedValue1": [ 1, 2, 3 ], "nestedValue2": 100 } ] } }],
Utilice la función minuteOf()
para extraer solo la porción de minutos (es decir, los minutos 0 a 59) de un atributo que contiene un valor timestamp válido. Esto también funciona para funciones como hourOf()
, weekOf()
, etc. Para obtener una lista completa de funciones basadas en el tiempo, consulte la tabla en nuestro documento de resultados de grupo a lo largo del tiempo.
Emplee la función mod()
para devolver el módulo base luego de dividir el valor del atributo numérico proporcionado (el primer argumento o dividendo) por un valor numérico (el segundo argumento o divisor). Esta operación de módulo se puede emplear dentro de una condición de cláusula WHERE
para filtrar un subconjunto arbitrario de resultados o dentro de una cláusula FACET
como una forma de subdividir el conjunto de resultados.
FROM Transaction SELECT * WHERE mod(port, 2) = 1
FROM NrConsumption SELECT uniques(hostId, 10000) SINCE 1 day AGO FACET mod(hostId, 10)
Utilice la función position()
para encontrar la ubicación de una subcadena dentro de una cadena. La coincidencia distingue entre mayúsculas y minúsculas.
Argumentos:
str
- la cadena en la que se encontrará la subcadena.- Puede ser cualquier cosa que se evalúe como una cadena, incluida una cadena literal entre comillas, un atributo de cadena de consulta, una función que devuelve una cadena o incluso una subconsulta que devuelve un único valor de cadena.
substr
- la cadena que se va a buscar dentro de str.occurrence
- indica qué ocurrencia de substr de la cual se devolverá la posición.Por defecto:
0
Si es positivo, encuentre la enésima aparición de substr desde el comienzo de str, basada en cero
Si es negativo, encuentre la enésima aparición de la substr desde el final de str. La última aparición de substr sería la aparición -1.
Alias:
indexOf(str, substr [, occurrence])
-indexOf()
es un nombre alternativo para la funciónposition()
Devoluciones:
El índice basado en 0 del carácter inicial de la substr dentro de str
Se devuelve nulo si str es nulo, substr es nulo o no se encuentra la aparición de substr a la que se hace referencia
Esta consulta demuestra el uso de la función
position()
para encontrar el índice posicional de varias subcadenas dentro de una cadena. Aquí también se demuestra el uso de la funciónposition()
dentro de los argumentos de la funciónsubstring()
.FROM PageViewWITH position(pageUrl, ':') AS FirstColon,position(pageUrl, '/', 1) + 1 AS DomainBegin,position(pageUrl, '/', 2) AS DomainEnd,DomainEnd - DomainBegin AS DomainLengthSELECT pageUrl, FirstColon, substring(pageUrl, 0, FirstColon) AS Protocol,DomainBegin, DomainEnd, DomainLength, substring(pageUrl, DomainBegin, DomainLength) AS Domain,position(pageUrl, '/', -1) AS LastSlash,substring(pageUrl, position(pageUrl, '/', -1)) AS PathEndposition(str, substr [, occurrence])
ejemplo
Utilice la función round()
para devolver el valor redondeado de un atributo.
Opcionalmente, round()
puede tomar un segundo argumento, to_nearest
, para redondear el primer argumento al múltiplo más cercano del segundo. to_nearest
puede ser fraccionario.
SELECT round(n [, to_nearest])
Utilice la función stddev()
para devolver una desviación estándar para un atributo numérico durante el rango de tiempo especificado. Se necesita un solo argumento. Si el atributo no es numérico, devolverá un valor de cero.
Utilice la función string()
para convertir un valor numérico, booleano, de tupla o de matriz en un valor de cadena.
Se necesitan dos argumentos, uno opcional:
Nombre del atributo
Precisión: si está presente, impone un límite en el número de decimales incluidos al convertir valores numéricos de punto flotante.
Esta consulta devuelve la duración de PageView como una cadena, con dos decimales.
FROM PageView SELECT string(duration, precision: 2)Esta consulta devuelve el promedio de la duración de PageView como una cadena, con dos decimales.
FROM PageView SELECT string(average(duration), precision: 2)Utilice
string()
para facetar por un valor de punto flotante sin perder decimales.FROM PageView SELECT count(*)FACET string(tuple(asnLatitude, asnLongitude), precision: 2)
Utilice la función substring()
para extraer una parte de una cadena.
Argumentos:
str
- la cadena de la que se extraerá una subcadena.- Puede ser cualquier cosa que se evalúe como una cadena, incluida una cadena literal entre comillas, un atributo de cadena de consulta, una función que devuelve una cadena o incluso una subconsulta que devuelve un único valor de cadena.
- Si este argumento se evalúa como nulo, la función
substring()
devolverá nulo.
start
- la posición dentro de str desde donde comenzar la extracción.- El primer carácter de str es la posición 0.
- Un valor negativo encontrará la posición relativa al final de str, siendo el último carácter de la cadena la posición -1.
- Si el inicio es mayor o igual a la longitud de str, la función
substring()
devolverá una cadena vacía. - Si el inicio es negativo y su valor absoluto es mayor que la longitud de str, la subcadena extraída comenzará en la posición 0.
length
- la longitud, o número de caracteres, de la subcadena a extraer de str.- Opcional : si no se proporciona la longitud, se incluirán todos los caracteres de str después de la posición inicial resuelta.
Consulte la función
position()
para ver ejemplos del uso desubstring()
yposition()
juntos.
Utilice la función toDatetime()
para traducir una timestamp a una cadena de fecha y hora formateada.
toDatetime()
toma los siguientes argumentos:
timestamp
- Una timestamp numérica que se traducirá en una cadena de fecha y hora. Este puede ser un valor numérico o un atributo, y se convertirá along
internamente.pattern
- Un patrón de fecha y hora opcional empleado para formatear el resultado. Consulte la sección Patrones para formatear y analizar en la documentación de DatetimeFormatter para saber cómo construir una cadena de patrón.- Debe ser un valor de cadena constante y su valor predeterminado será
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
si no se proporciona un patrón.
- Debe ser un valor de cadena constante y su valor predeterminado será
timezone
- Un valor de zona horaria opcional que se emplea para interpretar la cadena de fecha y hora (por ejemplo, (hora UTC).- Debe ser un valor de cadena constante y su valor predeterminado será UTC o el valor proporcionado en
WITH TIMEZONE
si está disponible.
Siempre que la entrada sea un número válido, la función
toDatetime()
siempre devolverá un valor.Alias:
fromTimestamp()
es un nombre alternativo para la funcióntoDatetime()
.Ejemplos:
La siguiente consulta traduce el atributo
timestampValue
utilizando el patrón predeterminado deyyyy-MM-dd'T'HH:mm:ss.SSSXXX
. Esto devolverá la cadena de fecha y hora1970-01-01T00:20:34.567Z
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue)La siguiente consulta traduce el atributo
timestampValue
utilizando la cadena de patrónyyyy-MM-dd
con la zona horaria establecida en 'América/Los_Angeles'. Esto devolverá la cadena de fecha y hora1969-12-31
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd', timezone:'America/Los_Angeles')La siguiente consulta traduce el atributo
timestampValue
utilizando la zona horaria proporcionada en la cláusulaWITH TIMEZONE
. Esto devolverá la cadena de fecha y hora1969-12-31
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd') FROM Event WITH TIMEZONE 'America/Los_Angeles'- Debe ser un valor de cadena constante y su valor predeterminado será UTC o el valor proporcionado en
Utilice la función toTimestamp()
para analizar una timestamp en milisegundos de época a partir de una cadena de fecha y hora.
toTimestamp()
toma los siguientes argumentos:
datestring
- Una cadena de fecha y hora que se traducirá a una timestamp (milisegundos de época). Esto puede ser un atributo de cadena o un literal de cadena entre comillas.pattern
- Un patrón de fecha y hora opcional empleado para analizar el parámetro de cadena de fecha. Consulte la sección Patrones para formatear y analizar en la documentación de DatetimeFormatter para saber cómo construir una cadena de patrón.- Debe ser un valor de cadena constante y su valor predeterminado será
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
si no se proporciona un patrón.
- Debe ser un valor de cadena constante y su valor predeterminado será
timezone
- Un valor de zona horaria opcional que se emplea para interpretar el parámetro de cadena de fecha (por ejemplo, (hora del Pacífico).- Debe ser un valor de cadena constante y su valor predeterminado será UTC o el valor proporcionado en
WITH TIMEZONE
si está disponible.
Alias:
fromDatetime()
es un nombre alternativo para la funcióntoTimestamp()
.Sugerencia
Si la cadena encontrada no coincide con el patrón dado, devolverá
null
. Si tiene cadenas de fecha y hora en una variedad de patrones, puede fusionar resultados usandoOR
para conectar en cascada hasta que uno de los valores no sea nulo. También puede utilizar segmentos de patrón opcionales. El patrón predeterminado utiliza corchetes para que las partes de milisegundos y desplazamiento de zona sean opcionales.Guión
Detalle
Patrón de muestra
Fecha y hora de muestra
Resuelve
Falta zona horaria
Empleará el argumento de zona horaria o el valor
WITH TIMEZONE
. El valor predeterminado esUTC
.aaaa-MM-dd HH:mm:ss.SSS
2023-10-18 15:27:03.123
2023-10-18T15:27:03.123Z
Falta el campo de fecha y hora
Cualquier campo de hora que falte se reemplazará con 0. Cualquier campo de fecha que falte se reemplazará con 1. Si un campo está presente, todos los campos de prioridad superior también deben estar presentes.
Nota: Se admiten los patrones de día del año y trimestre del año.aaaa-MM-dd HH:mm:ss
2023-10-18 15:27:03
2023-10-18T15:27:03.000Z
aaaa-MM-dd HH:mm
2023-10-18 15:27
2023-10-18T15:27:00.000Z
aaaa-MM-dd HH
2023-10-18 15
2023-10-18T15:00:00.000Z
aaaa-MM-dd
2023-10-18
2023-10-18T00:00:00.000Z
aaaa 'día' D
2023 día 291
2023-10-18T00:00:00.000Z
aaaa-MM
2023-10
2023-10-01T00:00:00.000Z
yyyy qqq
2023 Q4
2023-10-01T00:00:00.000Z
yyyy
2023
2023-01-01T00:00:00.000Z
Tiempo solo
Si se utiliza un patrón de tiempo sin fecha, se calculará la timestamp de Unix en milisegundos.
Nota: El ajuste de zona horaria aún se respeta.HH:mm
00:30
1971-01-01T00:30:00.000Z
HH: mmO
00:30 GMT-1
1971-01-01T01:30:00.000Z
HH: mmO
00:30 GMT+1
1969-12-31T23:30:00.000Z
tiempo de 12 horas
Si se utiliza un patrón de 12 horas (h minúscula), entonces también se debe utilizar el patrón am-pm-del día (a).
Nota: Dentro de la cadena de fecha y hora AM/PM debe estar en mayúsculas.aaaa-MM-dd h:mm a
2023-10-18 15:27
2023-10-18T15:27:00.000Z
aaaa-MM-dd h:mm
2023-10-18 3:27
Patrón no admitido
aaaa-MM-dd h:mm a
2023-10-18 15:27
nulo (debido a pm minúscula)
Prioridad de campo
Si un campo está presente, todos los campos de prioridad superior también deben estar presentes.
aaaa dd
2023 18
Patrón no admitido (dd es el día del mes y falta el mes)
Ejemplos:
La siguiente consulta analiza la cadena de fecha y hora '2023-10-18T15:27:03.123Z' utilizando el patrón predeterminado de
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
. Esto devuelve el valor timestamp1697642823123
.SELECT toTimestamp('2023-10-18T15:27:03.123Z')FROM EventLa siguiente consulta analiza la cadena de fecha y hora '2023-11-03 11:00:32' con la zona horaria establecida en 'América/Los_Angeles'. Esto devuelve el valor timestamp
1699034432000
.SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss', timezone:'America/Los_Angeles')FROM EventLa siguiente consulta analiza la cadena de fecha y hora '2023-11-03 11:00:32' con la zona horaria proporcionada en la cláusula
WITH TIMEZONE
. Esto devuelve el valor timestamp1699034432000
.SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss')FROM Event WITH TIMEZONE 'America/Los_Angeles'Importante
La UI detectará automáticamente el valor
toTimestamp()
como timestamp y lo formateará como valor de fecha y hora. Para mostrar la timestamp numérica real, ajuste la funcióntoTimestamp()
en una funciónstring()
.- Debe ser un valor de cadena constante y su valor predeterminado será UTC o el valor proporcionado en
Utilice la función upper()
para cambiar todos los caracteres alfabéticos de un valor de cadena a mayúsculas.
Argumentos:
str
- El valor de la cadena debe estar en mayúsculas.Puede ser cualquier cosa que se evalúe como una cadena, incluida una cadena literal entre comillas, un atributo de cadena de consulta, una función que devuelve una cadena o incluso una subconsulta que devuelve un único valor de cadena.
Si este argumento se evalúa como nulo, la función
upper()
devolverá nulo.Función relacionada:
lower()
Conversión de tipo
NRQL no admite la "coerción". Esto significa que un flotante almacenado como una cadena se trata como una cadena y no puede ser operado por funciones que esperan valores flotantes.
Puede convertir una cadena con un valor numérico o un valor booleano con un valor de cadena a sus equivalentes numéricos y booleanos, o convertir un valor que no sea una cadena en un valor de cadena, con estas funciones:
- Emplee la función
numeric()
para convertir un número con formato de cadena en un valor numérico. La función se puede integrar en una consulta que emplea funciones matemáticas en los resultados de la consulta o funciones de agregador NRQL, comoaverage()
. Tenga en cuenta que si el valor NRQL está en el formato medidor, entoncesnumeric()
no funcionará en él. En su lugar, debe emplear una de estas funciones de consulta compatibles: latest()
min()
max()
sum()
count()
average()
- Utilice la función
boolean()
para convertir un valor de cadena de"true"
o"false"
al valor booleano correspondiente. - Utilice la función
string()
para convertir un valor numérico, booleano, de tupla o de matriz en un valor de cadena. Consultestring()
arriba para obtener más información.
Comentarios
Al escribir una consulta NRQL, puede agregar comentarios, que pueden ayudar a los miembros de su equipo a comprender y utilizar mejor la consulta.
Aquí hay detalles de sintaxis:
--
Dos guiones comentarán todo el texto a la derecha de este indicador en la misma línea.//
Dos barras diagonales comentarán todo el texto a la derecha de este indicador en la misma línea./* */
Cualquier texto entre estos conjuntos de caracteres será comentado. Este indicador puede aplicarse a varias líneas.
Tenga en cuenta que los comentarios no se muestran en todas partes. Algunas vistas, como "consulta reciente" y "ver consulta", no mostrarán comentarios.
Algunos ejemplos de consulta que incluyen comentarios:
FROM Transaction SELECT uniqueCount(appId) -- This will return the number of unique App IDs
FROM TransactionErrorSELECT count(*) SINCE 1 day ago // Transaction Error for the past day
FROM TransactionTrace /* This data may be incomplete;If so, run a query of Transaction */SELECT count(*)
Documentos relacionados
Otros recursos populares para comprender la sintaxis y las reglas de NRQL incluyen: