Para escrever uma boa consulta NRQL , é útil entender como funcionam nossas diversas cláusulas e funções NRQL . Este documento contém definições de cláusulas e funções NRQL e fornece exemplos de como usá-las.
Procurando regras básicas de sintaxe NRQL? Consulte Como usar o NRQL. Para obter um tutorial, consulte Tutorial introdutório de NRQL.
Componentes de consulta
Conforme observado em nosso documento básico de sintaxe NRQL, cada consulta NRQL conterá uma cláusula SELECT
e uma cláusula FROM
, sendo todas as outras cláusulas opcionais. As definições das cláusulas abaixo também contêm exemplos de consulta NRQL .
Cláusulas obrigatórias
SELECT attribute ...
SELECT function(attribute) ...
O SELECT
especifica qual parte de um tipo de dados você deseja consultar especificando um atributo ou uma função. É seguido por um ou mais argumentos separados por vírgulas. Em cada argumento você pode:
- Obtenha os valores de todos os atributos disponíveis usando
*
como curinga. Por exemplo:SELECT * from Transaction
. - Obtenha valores associados a um atributo especificado ou a vários atributos especificados em uma lista separada por vírgulas.
- Obtenha valores agregados de um atributo especificado selecionando uma função agregadora.
- Rotule os resultados retornados em cada argumento com a cláusula
AS
.
Você também pode usar SELECT
com funções matemáticas básicas.
Esta consulta retorna o tempo médio de resposta desde a semana passada.
SELECT average(duration) FROM PageView SINCE 1 week ago
SELECT ...FROM data type...
Use a cláusula FROM
para especificar o tipo de dados que você deseja consultar. Você pode iniciar sua consulta com FROM
ou com SELECT
. Você pode mesclar valores para o mesmo atributo em vários tipos de dados em uma lista separada por vírgulas.
Esta consulta retorna a contagem de todas as transações APM nos últimos sete dias:
SELECT count(*) FROM Transaction SINCE 7 days ago
Esta consulta retorna a contagem de todos os APM transação e eventos de Browser nos últimos três dias:
SELECT count(*) FROM Transaction, PageView SINCE 3 days ago
Consulte lookup()
.
Cláusulas opcionais
SELECT ...AS 'label'...
Use a cláusula AS
para rotular um atributo, agregador, etapa de um funis ou o resultado de uma função matemática com uma string delimitada por aspas simples. O rótulo é usado no gráfico resultante. Observe que os rótulos de cláusula AS
em gráficos de série temporal não serão exibidos se uma cláusula FACET
for usada.
Esta consulta retorna o número de visualizações de página por sessão:
SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session'FROM PageView
Esta consulta retorna uma contagem de pessoas que visitaram a página principal e a página de carreiras de um site na semana passada:
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...
Use a cláusula COMPARE WITH
para comparar os valores de dois intervalos de tempo diferentes.
COMPARE WITH
requer uma instrução SINCE
ou UNTIL
. O horário especificado por COMPARE WITH
é relativo ao horário especificado por SINCE
ou UNTIL
. Por exemplo, SINCE 1 day ago COMPARE WITH 1 day ago
compara ontem com o dia anterior.
O intervalo de tempo para o valorCOMPARE WITH
é sempre o mesmo especificado por SINCE
ou UNTIL
. Por exemplo, SINCE 2 hours ago COMPARE WITH 4 hours ago
pode comparar das 15h às 17h com as 11h às 13h.
COMPARE WITH
pode ser formatado como um gráfico de linhas ou um outdoor:
- Com
TIMESERIES
,COMPARE WITH
cria um gráfico de linhas com a comparação mapeada ao longo do tempo. - Sem
TIMESERIES
,COMPARE WITH
gera um outdoor com o valor atual e a variação percentual do valorCOMPARE WITH
.
Example: esta consulta retorna dados como um gráfico de linhas mostrando o percentil 95 da semana anterior em comparação com o mesmo intervalo da semana anterior. Primeiro como um valor único e depois como um gráfico de linhas.
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
, as facetas no resultado são selecionadas com base no intervalo de tempo especificado usando SINCE
e UNTIL
e não no intervalo de tempo anterior que está sendo comparado. Os resultados de uma consulta FACET
apenas para o intervalo de tempo anterior podem incluir um conjunto diferente de aspectos.
Você pode usar esta cláusula com estes tipos de dados:
Transaction
TransactionError
Evento personalizado reportado via API do agente
O objetivo de
EXTRAPOLATE
é compensar matematicamente os efeitos da amostragem do agente APM de dados de eventos para que os resultados da consulta representem mais de perto a atividade total em seu sistema.Esta cláusula será útil quando um agente APM relata tantos eventos que muitas vezes ultrapassa os limites de relatórios do ciclo de coleta . Quando isso ocorre, o agente começa a amostrar o evento.
Quando
EXTRAPOLATE
é usado em uma consulta NRQL que suporta seu uso, a proporção entre reported events e total events é usada para extrapolar uma grande aproximação do total de dados sem amostragem. Quando é utilizado numa consulta NRQL que não suporta a sua utilização ou que não utilizou dados amostrados, não tem efeito.Importante
Observe que
EXTRAPOLATE
é mais útil para dados homogêneos (como taxas de transferência ou taxas de erros). Não é eficaz ao tentar extrapolar uma contagem de coisas distintas (comouniqueCount()
ouuniques()
).Esta cláusula funciona apenas com consultas NRQL que utilizam uma das seguintes funções agregadoras:
apdex
average
count
histogram
sum
percentage
(se a função for tomada como argumento suportaEXTRAPOLATE
)rate
(se a função for tomada como argumento suportaEXTRAPOLATE
)stddev
Uma consulta que mostrará as taxas de transferência extrapoladas de um serviço denominado
interestingApplication
.SELECT count(*) FROM Transaction WHERE appName='interestingApplication' SINCE 60 minutes ago EXTRAPOLATEUma consulta que mostrará as taxas de transferência extrapoladas de um serviço denominado
interestingApplication
por nome de transação, exibidas como uma série temporal.SELECT count(*) FROM Transaction WHERE appName='interestingApplication'SINCE 60 minutes ago FACET name TIMESERIES 1 minute EXTRAPOLATE
SELECT ...FACET attribute...
Use FACET
para separar e agrupar seus resultados por valores de atributo. Por exemplo, você poderia FACET
seus PageView
dados por deviceType
para descobrir qual porcentagem do seu tráfego vem de dispositivos móveis, tablets e desktops.
Use a cláusula LIMIT
para especificar quantas facetas aparecem (o padrão é 10). Para agrupamentos mais complexos, use FACET CASES
. As cláusulas FACET
suportam até cinco atributos, separados por vírgulas.
Os aspectos são classificados em ordem decrescente pelo primeiro campo fornecido na cláusula SELECT
. Caso você esteja facetando um atributo com mais de 5.000 valores exclusivos, um subconjunto de valores de faceta é selecionado e ordenado de acordo com o tipo de consulta. Observe que se um gráfico de série temporal não retornar dados (NRQL não corresponde a dados correspondentes, NRQL inválido etc.), ele mostrará apenas uma linha plana com o rótulo correspondente à primeira tabela na cláusula FROM
.
Ao selecionar min()
, max()
, percentile()
, average()
ou count()
, FACET
usa essas funções para determinar como as facetas são escolhidas e classificadas. Ao selecionar qualquer outra função, FACET
usa a frequência do atributo que você está facetando para determinar como as facetas são selecionadas e classificadas.
Esta consulta mostra as cidades com as maiores contagens de visualizações de página. Esta consulta usa o número total de visualizações de página por cidade para determinar como as facetas são escolhidas e ordenadas.
SELECT count(*) FROM PageView FACET city
Esta consulta mostra as cidades que acessam o maior número de URLs exclusivos. Esta consulta utiliza o número total de vezes que uma determinada cidade aparece nos resultados para determinar como as facetas são selecionadas e ordenadas.
SELECT uniqueCount(pageUrl) FROM PageView FACET city
A segmentação avançada e a análise de coorte permitem que você analise as funções do bucket para dividir seus dados de maneira mais eficaz.
A análise de coorte é uma forma de agrupar resultados com base no carimbo de data/hora. Você pode separá-los em grupos que cobrem um intervalo especificado de datas e horas.
Importante
Ao usar funções para agregar valores de atributo, é importante que o atributo agregado na primeira função da sua consulta contenha valores não nulos. As facetas serão escolhidas apenas para linhas que contenham um valor não nulo para o atributo na primeira função.
Exemplo:
FROM Event SELECT average(attribute) FACET name
Os nomes serão escolhidos apenas em linhas onde o atributo não é nulo.
Para verificar se o atributo que você está usando na sua função contém valores não nulos, execute a seguinte consulta:
FROM Event SELECT attribute, name WHERE attribute IS NOT NULL
Use FACET ... AS
para nomear facetas usando a palavra-chave AS
na consulta. Esta cláusula é útil para adicionar nomes mais claros ou simplificados para facetas nos seus resultados. Também pode ser usado para renomear facetas em consultas de agregação aninhadas .
FACET ... AS
consulta alterará os nomes das facetas nos resultados (quando aparecem como cabeçalhos nas tabelas, por exemplo), mas não os próprios nomes das facetas.
FROM Transaction SELECT count(*) FACET response.headers.contentType AS 'content type'
SELECT ...FACET CASES ( WHERE attribute operator value, WHERE attribute operator value, ...)...
Use FACET CASES
para dividir seus dados por condições mais complexas do que é possível com FACET
. Separe diversas condições com uma vírgula ,
. Por exemplo, você poderia consultar seus dados PageView
e FACET CASES
em categorias como menos de 1 segundo, de 1 a 10 segundos e mais de 10 segundos. Você pode combinar vários atributos em seus casos e rotular os casos com o seletor AS
. Os pontos de dados serão adicionados a no máximo um caso de faceta, o primeiro caso de faceta que eles corresponderem.
Você também pode usar uma função de tempo com seu atributo e usar o operador OR
para facetar resultados que não correspondam a nenhum dos casos especificados.
SELECT count(*) FROM PageView FACET CASES ( WHERE duration < 1, WHERE duration > 1 AND duration < 10, WHERE duration > 10)
Este exemplo agrupa os resultados em um bucket onde o nome da transação contém login
e outro onde o URL contém login
e um atributo personalizado indica que o usuário era um usuário pago:
SELECT count(*) FROM Transaction FACET CASES ( WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type = 'Paid')
Este exemplo usa o seletor AS
para dar aos resultados um nome legível:
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 exemplo usa o operador OR
para facetar resultados que não correspondem a nenhum dos seus casos:
SELECT count(*) FROM Transaction FACET CASES ( WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid') OR name
No NRQL, o padrão é a primeira agregação na cláusula SELECT
para orientar a seleção de aspectos em uma consulta. FACET ... ORDER BY
permite substituir esse comportamento padrão adicionando uma função agregada com o modificador ORDER BY
para especificar como as facetas são selecionadas. Especificamente, a cláusula substituirá a prioridade pela qual as facetas são escolhidas para estarem no resultado final antes de serem limitadas pela cláusula LIMIT
. Esta cláusula pode ser usada em consultas, mas não para alertas ou streaming.
Este exemplo mostra como usar FACET ... ORDER BY
para encontrar as durações médias de transação de aplicativos, mostrando as 10 durações mais altas (limite padrão) por aplicativos que têm o maior tamanho de resposta. Nesse caso, se FACET ... ORDER BY
não for usado, os resultados da consulta mostrarão os 10 primeiros pelas durações mais altas, sendo o tamanho da resposta irrelevante para a seleção do aplicativo.
FROM Transaction SELECT average(duration) TIMESERIES FACET appName ORDER BY max(responseSize)
Tenha em mente que se você usar a cláusula FACET ... ORDER BY
, não poderá alterar a ordem de classificação adicionando os modificadores ASC
e DESC
. Por padrão, esta cláusula usa DESC
.
Dica
Como as operações são executadas antes da cláusula LIMIT
ser aplicada, FACET ... ORDER BY
não afeta o tipo dos resultados finais da consulta, o que será particularmente perceptível nos resultados de consultas que não sejam de séries temporais.
Importante
O modificador ORDER BY
neste caso funciona de maneira diferente da cláusula ORDER BY
. Ao analisar consultas que seguem o formato FACET attribute1 ORDER BY attribute2
, New Relic as lerá como FACET ... ORDER BY
consulta, mas somente se ORDER BY
aparecer imediatamente após FACET
. Caso contrário ORDER BY
será interpretado pela New Relic como uma cláusula.
Use a cláusula JOIN
para combinar dados de um tipo de evento com os resultados de uma subconsulta baseada em um atributo ou chave comum.
FROM Event [INNER|LEFT] JOIN (SELECT... FROM...) ON [key =] key SELECT ...
Existem algumas regras simples para junções de subconsulta:
- A cláusula
JOIN
deve sempre seguir imediatamente após a cláusulaFROM
. - Prefixar um tipo de junção (
INNER
ouLEFT
) é opcional. Quando omitido, o tipo de junção é padronizado comoINNER
. - Parênteses contendo uma subconsulta devem seguir imediatamente
JOIN
. - A cláusula
ON
deve seguir imediatamente a subconsulta.
Join types | |
---|---|
| O resultado incluirá apenas valores da consulta externa que tenham um valor correspondente nos resultados da subconsulta associada. Este é o tipo de junção padrão. |
| O resultado incluirá eventos da consulta externa que não correspondem à subconsulta associada. |
Join | |
---|---|
| Define o valor principal a ser comparado na subconsulta e na consulta externa. O único operador de comparação permitido é a igualdade.
|
| Esta é uma sintaxe abreviada para quando o identificador da chave é o mesmo em ambos os contextos. É equivalente a |
Restrições e limitações a considerar:
- A subconsulta unida continuará a ter um
LIMIT
padrão de 10, com um máximo deLIMIT
de 5.000. Observe que oLIMIT
da consulta externa não afeta a consulta interna. - O uso de
TIMESERIES
na subconsulta unida não é compatível. Se sua consulta externa usarTIMESERIES
, lembre-se de que a subconsulta unida fornecerá um único resultado para todo o intervalo de tempo da consulta. - Como todas as subconsultas, as subconsultas unidas não podem ser utilizadas na condição do alerta.
- Embora
SELECT *
seja compatível com a consulta pai, ele não é compatível com a subconsulta unida. - A cardinalidade da junção é limitada a 1:100, o que significa que uma única chave de junção não pode mapear mais de cem linhas no resultado da subconsulta.
Para uma análise detalhada da cláusula JOIN
, consulte o tutorial de junções de subconsulta NRQL.
Esta consulta encontra a contagem de eventos facetados por browserTransactionName
do tipo de evento PageView
e depois por currentUrl
do tipo de evento PageAction
. Isso une os dois tipos de eventos com base em valores de atributo session
comuns.
FROM PageViewJOIN ( FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl
Exemplo
INNER JOIN
facetado
Este exemplo consulta os mesmos dados do exemplo INNER JOIN
facetado, mas como uma consulta LEFT JOIN
, os resultados incluem itens na tabela PageView
que não possuem valores session
correspondentes nos resultados da subconsulta PageAction
.
FROM PageViewLEFT JOIN ( FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl
Exemplo
LEFT JOIN
facetado
Aqui estamos realizando uma subconsulta não agregada em linhas, com a consulta externa encontrando a contagem de eventos facetados por currentUrl
do tipo de evento PageAction
e depois por browserTransactionNamed
do tipo de evento PageView
. Isso une os dois tipos de eventos com base em valores de atributo session
comuns.
Observe que o valor session
34d5ce6acf4c60be
possui dois valores browserTransactionName
do tipo de evento PageView
da subconsulta, adicionando linhas adicionais ao resultado.
FROM PageActionLEFT JOIN ( FROM PageView SELECT session, browserTransactionName LIMIT MAX) ON sessionSELECT count(*) FACET session, currentUrl, browserTransactionName LIMIT MAX
Exemplo
INNER JOIN
não agregado
SELECT ...LIMIT count...
Use a cláusula LIMIT
para controlar o número máximo de valores de faceta retornados por FACET
consulta ou o número máximo de itens retornados por SELECT *
consulta. Esta cláusula usa um único valor inteiro como argumento. Se a cláusula LIMIT
não for especificada ou nenhum valor for fornecido, o limite será padronizado como 10 para FACET
consulta e 100 no caso de SELECT *
consulta.
O valor máximo permitido para a cláusula LIMIT
é 5.000. consulta pode usar a cláusula LIMIT MAX
em vez de um valor específico, cujo padrão é automaticamente o valor máximo atual. Você pode usar isso se quiser sempre postar o número máximo de resultados, mesmo que isso mude no futuro. Se quiser que o comportamento da sua consulta permaneça inalterado, especifique um valor explícito em vez de usar LIMIT MAX
.
Esta consulta mostra os 20 principais países por contagem de sessões e fornece o 95º percentil do tempo de resposta para cada país apenas para usuários do Windows.
SELECT uniqueCount(session), percentile(duration, 95)FROM PageView WHERE userAgentOS = 'Windows'FACET countryCode LIMIT 20 SINCE YESTERDAY
SELECT ...LIMIT count OFFSET count...
Use a cláusula OFFSET
com LIMIT
para controlar a parte das linhas retornadas por SELECT *
ou SELECT column
consulta. Assim como a cláusula LIMIT
, OFFSET
usa um único valor inteiro como argumento. OFFSET
define o número de linhas a serem ignoradas antes que as linhas selecionadas da sua consulta sejam retornadas. Isso é limitado por LIMIT
.
OFFSET
as linhas são ignoradas a partir do registro mais recente.
Por exemplo, a consulta SELECT interestingValue FROM Minute_Report LIMIT 5 OFFSET 1
retorna os últimos 5 valores de Minute_Report
exceto o mais recente.
A cláusula ORDER BY
permite especificar como deseja ordenar os resultados da consulta em consultas que selecionam evento atributo por linha.
Esta consulta ordena dois atributos de transação específicos por duração.
FROM Transaction SELECT appName, duration ORDER BY duration
A ordem de classificação padrão é crescente, mas isso pode ser alterado adicionando os modificadores ASC
ou DESC
.
Esta consulta ordena todos os atributos de transação por duração em ordem decrescente.
FROM Transaction SELECT * ORDER BY duration DESC
Importante
A cláusula ORDER BY
não se aplica à consulta FACET
. Não deve ser confundida com a cláusula FACET ... ORDER BY
, que orienta a seleção de facetas. Para obter mais informações, consulte FACET ... ORDER BY
.
SHOW EVENT TYPES...
SHOW EVENT TYPES
retornará uma lista de todos os tipos de dados presentes em sua conta para um intervalo de tempo específico. É usado como a primeira cláusula em uma consulta em vez de SELECT
.
Importante
Neste contexto, “tipos de eventos” referem-se aos tipos de dados que você pode acessar com uma consulta NRQL .
Esta consulta retornará todos os tipos de dados presentes no último dia:
SHOW EVENT TYPES SINCE 1 day ago
SELECT ...SINCE [numerical units AGO | phrase]...
O valor default é 1 hour ago.
Use a cláusula SINCE
para definir o início inclusivo de um intervalo de tempo para os dados retornados. Você pode especificar um fuso horário para a consulta, mas não para os resultados. Os resultados do NRQL são baseados na hora do sistema.
Ao usar NRQL, você pode definir um timestamp /hora UTC , um horário relativo ou uma string DateTime
. Consulte Especificando um horário.
Veja também:
A cláusula SLIDE BY
oferece suporte a um recurso conhecido como janelas deslizantes. Com janelas deslizantes,SLIDE BY
os dados são reunidos em "janelas" de tempo que se sobrepõem entre si. Essas janelas podem ajudar a suavizar gráficos de linha com muita variação nos casos em que o agregado móvel (como uma média móvel) é mais importante do que agregados de janelas estreitas de tempo.
Para usar SLIDE BY
, coloque-o em uma consulta após a cláusula TIMESERIES
. Por exemplo, esta consulta extrai dados em janelas de 5 minutos com um intervalo SLIDE BY
de 1 minuto, o que significa que cada janela dura 5 minutos, mas a janela 1 começa em 0 minutos, a janela 2 começa em 1 minuto, a janela 3 começa em 2 minutos e assim por diante.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY 1 minute
Para saber mais sobre como e quando você pode usar SLIDE BY
, consulte Criar gráficos mais suaves com janelas deslizantes. Ou assista a este pequeno vídeo (aprox. 3:20 minutos).
Você pode usar janelas deslizantes em combinação com MAX
ou AUTO
. Contudo, MAX
ou AUTO
não podem ser colocados entre TIMESERIES
e SLIDE BY
.
Esta consulta decidirá automaticamente um intervalo de janela SLIDE BY
.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY AUTO
Esta consulta definirá a janela SLIDE BY
para a granularidade máxima do intervalo.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY MAX
Importante
O valor SLIDE BY
determinado por AUTO
ou MAX
pode produzir um intervalo de etapas maior que o tamanho da janela, o que pode causar lacunas e resultados inesperados.
SELECT ...TIMESERIES integer units...
Use a cláusula TIMESERIES
para retornar dados como uma série temporal dividida por um período especificado. Como TIMESERIES
é usado para acionar determinados gráficos, não há valor padrão.
Para indicar o intervalo de tempo, use integer units
. Por exemplo:
TIMESERIES 1 minute
TIMESERIES 30 minutes
TIMESERIES 1 hour
TIMESERIES 30 seconds
TIMESERIES
pode ser combinado com argumentos como MAX
, AUTO
e SLIDE BY
para personalizar ainda mais os resultados da consulta, conforme mostrado nos exemplos abaixo.
Importante
Para funções como average()
ou percentile()
, uma grande janela de agregação pode ter um efeito de suavização significativo no outlier. Isso é verdade quer a consulta utilize ou não janelas deslizantes.
O valor fornecido indica as unidades usadas para quebrar o gráfico. Por exemplo, para apresentar um gráfico de um dia mostrando incrementos de 30 minutos:
SELECT ... SINCE 1 day AGO TIMESERIES 30 minutes
TIMESERIES
também pode ser definido como AUTO
, o que dividirá seu gráfico em um número razoável de divisões. Por exemplo, um gráfico diário será dividido em intervalos de 30 minutos e um gráfico semanal será dividido em intervalos de 6 horas.
Esta consulta retorna dados como um gráfico de linhas mostrando os percentis 50 e 90 do tempo de transação do lado do cliente durante uma semana, com um ponto de dados a cada 6 horas.
SELECT average(duration), percentile(duration, 50, 90)FROM PageView SINCE 1 week AGO TIMESERIES AUTO
Você pode definir TIMESERIES
como MAX
, o que ajustará automaticamente sua janela de tempo para o número máximo de intervalos permitidos para um determinado período. Isso permite que você atualize suas janelas de tempo sem precisar atualizar manualmente seus TIMESERIES
buckets e garante que sua janela de tempo seja dividida no número máximo de intervalos permitidos. O número máximo de TIMESERIES
buckets que serão retornados é 366.
Por exemplo, a consulta a seguir cria intervalos de 4 minutos, que é o limite máximo para um gráfico diário.
SELECT average(duration) FROM Transaction SINCE 1 day ago TIMESERIES MAX
SELECT ...UNTIL integer units AGO...
Utilize a cláusula UNTIL
para definir o término do intervalo de tempo de consulta. O valor é exclusivo, o que significa que o intervalo de tempo irá para o instante especificado, mas não o incluirá.
O valor default é NOW. Use apenas UNTIL
para especificar um ponto final diferente do padrão.
Veja também:
Use a cláusula WHERE
para filtrar resultados. NRQL retorna os resultados que atendem às condições especificadas na cláusula.
SELECT function(attribute) ...WHERE attribute [operator 'value' | IN ('value' [, 'value']) | IS [NOT] NULL ][AND|OR ...]...
- Se você especificar mais de uma condição, separe as condições pelos operadores
AND
ouOR
.
Operators that the | Description |
---|---|
| NRQL aceita operadores de comparação padrão. Exemplo: Para atributos com valores booleanos, use |
| Usado para definir uma interseção de duas condições. |
| Usado para definir uma união de duas condições. |
| Determina se um atributo possui um valor nulo. |
| Determina se um atributo não possui valor nulo. |
| Determina se um atributo tem um valor booleano |
| Determina se um atributo tem um valor booleano |
| Determina se o valor da string de um atributo está em um conjunto especificado. Usar esse método gera melhor desempenho do que encadear várias cláusulas Exemplo:
|
| Determina se o valor da string de um atributo não está em um conjunto especificado. Usar esse método gera melhor desempenho do que encadear várias cláusulas Os valores devem estar entre parênteses, separados por vírgulas. Por exemplo:
|
| Determina se um atributo contém uma substring especificada. O argumento de string para o operador Tenha o seguinte em mente:
|
| Determina se um atributo não contém uma subsequência especificada. |
| Determina se um atributo contém uma substring Regex especificada. Usa sintaxe RE2. Examples:
|
| Determina se um atributo não contém uma substring Regex especificada. Usa sintaxe RE2. |
Esta consulta retorna o tempo de resposta do Browser para páginas com checkout
na URL do usuário Safari nos Estados Unidos e Canadá nas ú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 informações sobre consulta de dados métricos, consulte consulta métrica.
FROM ...WITH function(attribute) AS varSELECT var...
Use a cláusula WITH ... AS
para definir variáveis NRQL para armazenar valores como variáveis que podem ser referenciadas em qualquer lugar da consulta. Algumas regras e dicas:
- A cláusula
WITH ... AS
pode ir antes, no meio ou diretamente depois da cláusulaFROM
ouSELECT
- Somente funções de linha (por exemplo,
capture()
) podem ser definidas como variáveis. funções agregadoras, comoaverage()
, não são suportadas. - Apenas um
WITH
pode ser usado, mas você pode usar diversas variáveis NRQL, desde que sejam separadas por vírgula. - Se uma variável NRQL definida usar o mesmo nome de um atributo existente, a variável terá precedência.
- Os nomes de variáveis não podem incluir o símbolo
%
.
Importante
As regras de evento para métrica não suportam a cláusula WITH ... AS
na consulta NRQL.
Aqui estão alguns exemplos de consulta:
FROM TransactionWITH duration * 1000 AS millisecSELECT millisec
FROM LogWITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice)SELECT itemId, unitPrice
Saiba mais sobre análise de âncora (aparse()
).
Neste exemplo, uma variável NRQL, unitPrice
, é usada para criar outra variável, unitPriceNum
, convertendo a string extraída em um número. As variáveis são então usadas nas cláusulas SELECT
, WHERE
e 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)...
Use a cláusula WITH TIMEZONE
para selecionar um fuso horário para uma data ou hora na consulta que ainda não tenha um fuso horário especificado.
Se você incluir a cláusula WITH TIMEZONE
sem especificar um fuso horário em uma data e hora, as cláusulas since
e until
permanecerão no fuso horário fornecido.
Se você não incluir a cláusula WITH TIMEZONE
, mas incluir um fuso horário em uma sequência de data e hora, o fuso horário da sequência de data e hora será mantido.
Importante
O fuso horário padrão é sempre UTC se nenhum for especificado. Os valores brutos timestamp (conforme visto na visualização JSON) nos resultados são sempre UTC. A interface exibe os resultados no fuso horário que você especificou nas configurações da sua conta. Um fuso horário em uma sequência de carimbo de data/hora sempre funciona. Ela substitui a zona WITH TIMEZONE
.
Por exemplo, a cláusula de consulta SINCE Monday UNTIL Tuesday WITH TIMEZONE 'America/New_York'
retorna dados registrados da meia-noite de segunda-feira, horário dos Estados Unidos/Nova York, até meia-noite de terça-feira, horário dos Estados Unidos/Nova York.
Aqui estão alguns exemplos de cláusulas de intervalo de tempo de consulta:
Nenhum fuso horário na string de data e hora usando a cláusula
WITH TIMEZONE
:SINCE today UNTIL '2022-05-19T12:00' WITH TIMEZONE 'America/Los_Angeles'Isso é resolvido como
"beginTime": "2022-05-19T07:00:00Z"
e"endTime": "2022-05-19T19:00:00Z"
.Fuso horário na string de data e hora, sem usar a cláusula
WITH TIMEZONE
:SINCE today UNTIL '2022-05-19T12:00-0500'Isso é resolvido como
"beginTime": "2022-05-19T00:00:00Z"
e"endTime": "2022-05-19T17:00:00Z"
.Fuso horário na sequência de data e hora, usando a cláusula
WITH TIMEZONE
América/Los Angeles, que é -0700 durante o horário de verão:SINCE today UNTIL '2022-05-19T12:00-0500' WITH TIMEZONE 'America/Los_Angeles'Isso é resolvido como
"beginTime": "2022-05-19T07:00:00Z"
e"endTime": "2022-05-19T19:00:00Z"
.
Consulte a lista de IDs de zona disponíveis.
Consulte Definir intervalo de tempo no painel e nos gráficos para obter informações detalhadas e exemplos.
dados de consulta métrica
Os dados métricos são mais complexos do que outros tipos de dados. Existem dicas específicas para consultá-lo bem. Temos dois tipos de dados métricos, cada um com suas próprias diretrizes de consulta:
- consulta dimensional métrica, que são reportados pela nossa API métrica e por algumas das nossas soluções que utilizam essa API (por exemplo, a nossa integração Dropwizard ou Micrometer integração).
- consulta métrica de fração de tempo data, que é nosso tipo de dados métrico original relatado por nosso APM, monitoramento de Mobile e .
Para obter mais detalhes sobre como reportamos dados métricos, consulte tipos de dados métricos.
Funções
Nesta seção explicamos as funções NRQL , tanto funções agregadoras quanto funções não agregadoras.
Funções agregadoras
Você pode usar funções agregadoras para filtrar e agregar dados. Algumas dicas para usá-los:
- Consulte os tutoriais New Relic University para consulta de filtro, consulta de Apdex e consulta de percentual. Ou acesse o curso online completo Writing NRQL consulta.
- Se você estiver usando uma função agregadora diversas vezes na mesma consulta (por exemplo,
SELECT median(one_metric), median(another_metric)
), isso poderá causar problemas na exibição dos resultados. Para resolver isso, use a funçãoAS
. Por exemplo:SELECT median(one_metric) AS 'med-a', median(another_metric) AS 'med-b' - O tipo de dados "coerção" não é compatível. Leia sobre as funções de conversão de tipo disponíveis.
- Para saber como exibir resultados ao longo do tempo, consulte Agrupar resultados ao longo do tempo.
Exemplos:
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago
Use a função aggregationendtime()
para retornar o horário da agregação relevante. Mais especificamente, para um determinado agregado, a função aggregationendtime()
fornece o timestamp do final do período dessa agregação. Por exemplo, em uma consulta de série temporal, para um ponto de dados que abrange dados de uma hora, a função retornaria o timestamp de data/hora do final desse período de hora.
Use a função apdex
para retornar uma pontuação Apdex para uma única transação ou para todas as suas transações. A pontuação padrão Apdex é 0,5 segundos. O atributo pode ser qualquer atributo baseado no tempo de resposta, como duration
ou backendDuration
. O argumento t:
define um limite Apdex T
na mesma unidade de tempo que o atributo escolhido. Por exemplo, se o atributo for medido em segundos, t
será um limite em segundos.
A pontuação Apdex retornada pela função apdex()
é baseada somente no tempo de execução. Não leva em conta erros de APM. Se uma transação incluir um erro, mas for concluída no Apdex T ou menos, essa transação será classificada como satisfatória pela função apdex ()
.
Se você definiu atributo personalizado, você pode filtrar com base nesses atributo. Por exemplo, você pode monitor o Apdex para clientes particularmente importantes:
SELECT apdex(duration, t: 0.4) FROM TransactionWHERE customerName='ReallyImportantCustomer' SINCE 1 day ago
Use o atributo name
para retornar uma pontuação para uma transação específica ou retorne um Apdex geral omitindo name
. Esta consulta retorna uma pontuação Apdex para a transação Controller/notes/index na última hora:
A função apdex
retorna uma pontuação Apdex que mede a satisfação do usuário com seu site. Os argumentos são um atributo de tempo de resposta e um limite Apdex T em segundos.
SELECT apdex(duration, t: 0.5) from TransactionWHERE name='Controller/notes/index' SINCE 1 hour ago
Este exemplo de consulta retorna um Apdex geral do aplicativo nas últimas três semanas:
SELECT apdex(duration, t: 0.08) FROM Transaction SINCE 3 week ago
Use a função average()
para retornar o valor médio médio de um atributo. Leva um único nome de atributo como argumento. Se um valor do atributo não for numérico, ele será ignorado na agregação. Se os dados que correspondem às condições da consulta não forem encontrados ou se não houver valores numéricos retornados pela consulta, ela retornará um valor nulo.
A função bucketPercentile()
é o equivalente NRQL da função histogram_quantile
no Prometheus. Destina-se a ser utilizado com dados métricos dimensionais. Em vez do quantil, o New Relic retorna o percentil, que é o quantil * 100.
Use a função bucketPercentile()
para calcular o quantil a partir dos dados do histograma em formato Prometheus.
Ele usa o nome do intervalo como argumento e relata o percentual ao longo dos limites do intervalo:
SELECT bucketPercentile(duration_bucket) FROM Metric SINCE 1 day ago
Opcionalmente, você pode adicionar especificações percentuais como argumento:
SELECT bucketPercentile(duration_bucket, 50, 75, 90) FROM Metric SINCE 1 day ago
Como múltiplas métricas são usadas para compor os dados do histograma do Prometheus, você deve consultar a métrica específica do Prometheus em termos do <basename>
associado.
Por exemplo, para calcular o percentil de um histograma do Prometheus, com <basename>
prometheus_http_request_duration_seconds
usando NRQL, use bucketPercentile(prometheus_http_request_duration_seconds_bucket, 50)
. Observe como _bucket
é adicionado ao final de <basename>
como sufixo.
Consulte a documentação do Prometheus.io para obter mais informações.
Utilize a função cardinality()
para obter o número de combinações de todas as dimensões (atributo) em uma métrica.
São necessários três argumentos, todos opcionais:
- Nome da métrica: se presente,
cardinality()
calcula apenas a métrica especificada. - Incluir: se presente, a lista de inclusão restringe o cálculo da cardinalidade a esses atributos.
- Excluir: se presente, a lista de exclusão faz com que esses atributos sejam ignorados no cálculo da cardinalidade.
cdfPercentage()
é uma implementação da função de distribuição cumulativa, retornando porcentagens de attribute
valores cujo valor é menor ou igual a um ou mais thresholds
.
cdfPercentage()
agrega em seu argumento attribute
, que pode ser um atributo numérico ou um atributo de métrica de distribuição. Tipos mistos em uma consulta são aceitos. Outros tipos (como string) são ignorados. Até 10 limites podem ser especificados.
Esta consulta retorna a porcentagem do evento onde firstPaint
é menor ou igual a 0,5 segundos, e a porcentagem do evento onde firstPaint
é menor ou igual a 1 segundo.
FROM PageView SELECT cdfPercentage(firstPaint, 0.5, 1.0)
Use a função count()
para retornar uma contagem de registros disponíveis. É necessário um único argumento; seja *
, um atributo ou um valor constante. Atualmente, ele segue o comportamento típico do SQL e conta todos os registros que possuem valores para seu argumento.
Como count(*)
não nomeia um atributo específico, os resultados serão formatados no formato padrão "humanizar" .
derivative()
encontra a taxa de mudança para um determinado conjunto de dados. A taxa de variação é calculada usando uma regressão linear de mínimos quadrados para aproximar a derivada. Como esse cálculo exige a comparação de mais de um ponto de dados, se apenas um ponto de dados for incluído no intervalo de avaliação, o cálculo será indeterminado e não funcionará, resultando em um valor null
.
O time interval
é o período para o qual a taxa de alteração é calculada. Por exemplo, derivative(attributeName, 1 minute)
retornará a taxa de alteração por minuto.
Use a função earliest()
para retornar o valor mais antigo de um atributo no intervalo de tempo especificado.
É preciso um único argumento.
Se usado em conjunto com FACET
, ele retornará o valor mais recente de um atributo para cada um dos aspectos resultantes.
Esta consulta retorna o código de país mais antigo de cada agente de usuário do evento PageView
.
SELECT earliest(countryCode) FROM PageView FACET userAgentName
Use a função filter()
para limitar os resultados de uma das funções agregadoras em sua instrução SELECT
. Você pode usar filter()
em conjunto com FACET
ou TIMESERIES
. O filtro só é útil ao selecionar várias agregações diferentes, como:
SELECT filter(sum(x), WHERE attribute='a') AS 'A', filter(sum(x), WHERE attribute='b') AS 'B' ...
Caso contrário, é melhor usar apenas a cláusula WHERE
padrão.
Use a função funnel()
para gerar um gráfico Funis. Leva um atributo como seu primeiro argumento. Em seguida, você especifica as etapas como cláusulas WHERE
(com cláusulas AS
opcionais para rótulos) separadas por vírgulas.
Para obter detalhes e exemplos, consulte a documentação dos funis.
Use a função histogram()
para gerar histograma, que é útil para visualizar a distribuição de um conjunto de dados. Ele divide o conjunto de dados em um número especificado de intervalos e conta o número de pontos de dados que se enquadram em cada intervalo.
Argumentos:
attribute
O primeiro argumento é obrigatório e especifica o atributo para o qual serão contados os valores que se enquadram em cada intervalo do histograma.width:
Indica a largura do intervalo de amostragem. O valor máximo do intervalo é o valor do argumentostart
mais este valorwidth
.- Ao usar argumentos posicionais (não rotulados),
width
é o segundo argumento. - Padrão:
10
- Ao usar argumentos posicionais (não rotulados),
buckets:
Número total de buckets (entre1
e500
, inclusive).- Ao usar argumentos posicionais (não rotulados),
buckets
é o terceiro argumento. - Padrão:
40
- Ao usar argumentos posicionais (não rotulados),
start:
O início do intervalo do histograma.- Ao usar argumentos posicionais (não rotulados),
start
é o quarto argumento. - Padrão:
0
Observação
Os valores que estão fora do intervalo definido do histograma são incluídos no primeiro ou no último intervalo. A primeira contagem do intervalo incluirá itens menores que o intervalo do histograma e a última contagem do intervalo incluirá itens maiores que o intervalo do histograma. Para excluir esses valores dos resultados do histograma, inclua um filtro na cláusula where da consulta. (Exemplo:
WHERE attribute >= [start] AND attribute <= [start + width]
)Esta consulta resulta em um histograma de tempo de resposta que varia de até 10 segundos em 40 buckets. Isso significa que cada intervalo cobre um intervalo de valores de 0,25 segundos. (10/40 = 0,25). Quaisquer valores de duração maiores que 10 segundos serão incluídos no último intervalo. Se a duração pudesse ser menor que zero, esses valores seriam incluídos no primeiro intervalo.
SELECT histogram(duration) FROM PageView SINCE 1 week agoEssas consultas equivalentes resultam em um histograma de tempo de resposta que varia de até 5 segundos em 10 baldes.
SELECT histogram(duration, 5, 10) FROM PageView SINCE 1 week agoSELECT histogram(duration, width: 5, buckets: 10) FROM PageView SINCE 1 week agoEssas consultas equivalentes resultam em um histograma de tempo de resposta variando de 1 a 4 segundos em 3 baldes.
Aqui está uma análise dos baldes:
Balde 1
Balde 2
Balde 3
Gama de baldes
1 a 2
2 a 3
3 a 4
Valores contados
<2
≥ 2 e < 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()
aceita intervalos de histograma do Prometheus:SELECT histogram(duration_bucket, 10, 20)FROM Metric SINCE 1 week agohistogram()
aceita a métrica de distribuição como entrada:SELECT histogram(myDistributionMetric, 10, 20)FROM Metric SINCE 1 week agoUse
histogram()
com uma cláusulaFACET
para gerar um gráfico de mapa de calor:SELECT histogram(duration)FROM PageView FACET appName SINCE 1 week ago- Ao usar argumentos posicionais (não rotulados),
Usar keyset()
permitirá que você veja todos os atributos de um determinado tipo de dados em um determinado intervalo de tempo. Não são necessários argumentos. Ele retorna uma estrutura JSON contendo grupos de chaves digitadas em string, chaves digitadas numéricas, chaves digitadas booleanas e todas as chaves.
Esta consulta retorna o atributo encontrado para PageView
evento do último dia:
SELECT keyset() FROM PageView SINCE 1 day ago
Use a função latest()
para retornar o valor mais recente de um atributo em um intervalo de tempo especificado.
É preciso um único argumento.
Se usado em conjunto com FACET
, ele retornará o valor mais recente de um atributo para cada um dos aspectos resultantes.
Esta consulta retorna o código de país mais recente para cada agente de usuário do evento PageView
.
SELECT latest(countryCode) FROM PageView FACET userAgentName
Use a função latestrate()
para retornar a taxa de alteração de um valor com base nos dois últimos pontos de dados. Toma o atributo em questão como primeiro argumento e a unidade de tempo da taxa resultante como segundo argumento. A função retorna um resultado em unidades de change in attribute/time interval
.
Esta função pode ser útil para fornecer a taxa de alteração mais recente de um atributo, a fim de ver as tendências mais recentes.
Esta consulta retorna a taxa de alteração da duração com base nos dois últimos pontos de dados. Ele será retornado em unidades de duration/second
devido ao argumento 1 SECOND
.
SELECT latestrate(duration, 1 SECOND) FROM PageView
Use a função max()
para retornar o valor máximo registrado de um atributo numérico no intervalo de tempo especificado. Leva um único nome de atributo como argumento. Se um valor do atributo não for numérico, ele será ignorado na agregação. Se os dados que correspondem às condições da consulta não forem encontrados ou se não houver valores numéricos retornados pela consulta, ela retornará um valor nulo.
Use a função median()
para retornar a mediana ou percentil 50 de um atributo. Para obter mais informações sobre consulta de percentil, consulte percentile()
.
Esta consulta irá gerar um gráfico de linhas para o valor mediano.
SELECT median(duration) FROM PageView TIMESERIES AUTO
Mediana em uma cláusula JOIN
:
Como a mediana é simplesmente um atalho para
percentile(attribute, 50)
, um resultadomedian()
de uma subconsulta unida é um tipo de dados composto, que mapeia o 50º percentil para seu valor calculado.Para fazer referência ao valor mediano real na consulta externa, você pode usar a função
getField()
. Observe que a chave mapeada é uma representação de string de um valor duplo, portanto, paramedian()
é'50.0'
.
Use a função min()
para retornar o valor mínimo registrado de um atributo numérico no intervalo de tempo especificado. Leva um único nome de atributo como argumento. Se um valor do atributo não for numérico, ele será ignorado na agregação. Se os dados que correspondem às condições da consulta não forem encontrados ou se não houver valores numéricos retornados pela consulta, ela retornará um valor nulo.
Use a função percentage()
para retornar a porcentagem de um conjunto de dados de destino que corresponde a alguma condição.
Esta função espera exatamente dois argumentos (argumentos após os dois primeiros são ignorados). O primeiro argumento requer uma função agregadora em relação ao atributo desejado. Se o atributo não for numérico, esta função retornará um valor de 100%. O segundo argumento requer uma cláusula WHERE
.
FROM Transaction SELECT percentage(count(*), WHERE error is true ) AS 'Error Percent' WHERE host LIKE '%west%' EXTRAPOLATE
Use a função percentile()
para retornar o valor aproximado de um atributo em um determinado percentil. Requer um atributo e pode receber qualquer número de argumentos que representem pontos percentuais. A função percentile()
possibilita a exibição do percentual com até três dígitos após a vírgula decimal, proporcionando maior precisão. O limite percentual pode ser especificado como valores decimais, mas esteja ciente de que, para a maioria dos conjuntos de dados, percentis mais próximos que 0,1 um do outro não serão resolvidos.
Exemplos de exibição de percentil
Use TIMESERIES
para gerar um gráfico de linhas com percentil mapeado ao longo do tempo.
Omita
TIMESERIES
para gerar um outdoor e uma folha de atributos mostrando valores agregados para o percentil.Se nenhum percentil estiver listado, o padrão será o 95º percentil. Para retornar apenas o valor do 50º percentil, a mediana, você também pode usar
median()
.Esta consulta irá gerar um gráfico de linhas com linhas para o 5º, 50º e 95º percentil.
SELECT percentile(duration, 5, 50, 95) FROM PageView TIMESERIES AUTOpercentil em uma cláusula
JOIN
:Ao usar o percentil em uma subconsulta unida, observe que os resultados da subconsulta são um tipo de dados composto, que mapeia cada percentil para seu valor calculado.
Para fazer referência a qualquer um dos valores percentuais individuais na consulta externa, você pode usar a função
getField()
. Observe que a chave mapeada é uma representação de string de um valor duplo, então você precisa adicionar.0
aos números inteiros. Por exemplo, a chave para o percentil 95 é'95.0'
.
predictLinear()
é uma extensão da função derivative()
. Ele usa um método semelhante de regressão linear de mínimos quadrados para prever os valores futuros de um conjunto de dados.
- O
time interval
é o quão longe a consulta irá olhar no futuro. Por exemplo,predictLinear(attributeName, 1 hour)
é uma previsão linear 1 hora no futuro da janela de tempo da consulta. - Geralmente,
predictLinear()
é útil para valores de crescimento contínuo, como espaço em disco ou previsões sobre grandes tendências. - Como
predictLinear()
é uma regressão linear, a familiaridade com o conjunto de dados consultado ajuda a garantir previsões precisas de longo prazo. - Qualquer conjunto de dados que cresça exponencialmente, logaritmicamente ou por outros meios não lineares provavelmente só terá sucesso em previsões de muito curto prazo.
- New Relic não recomenda o uso de
predictLinear
emTIMESERIES
consulta. Isso ocorre porque cada bucket fará uma previsão individual com base em seu período relativo dentro da consulta, o que significa que tal consulta não mostrará previsões do final da série temporal em diante.
Use a função rate()
para visualizar a frequência ou taxa de uma determinada consulta por intervalo de tempo. Por exemplo, você pode querer saber o número de visualizações de página por minuto durante um período de uma hora ou a contagem de sessões únicas em seu site por hora durante um período de um dia.
Use
TIMESERIES
para gerar um gráfico de linhas com taxas mapeadas ao longo do tempo.Omita
TIMESERIES
para gerar um outdoor mostrando uma média de valor de taxa única ao longo do tempo.Aqui está uma consulta básica que irá gerar um gráfico de linhas mostrando a taxa de taxas de transferência para transação APM por 10 minutos nas últimas 6 horas:
SELECT rate(count(*), 10 minute) FROM TransactionSINCE 6 hours ago TIMESERIESAqui está um pequeno vídeo (3:21 minutos) que explica como usar
rate
para comparar dados em diferentes janelas de tempo:
Use a função stdvar()
para retornar a variação padrão de um atributo numérico no intervalo de tempo especificado.
É preciso um único argumento. Se o atributo não for numérico, ele retornará um valor zero.
Use a função sum()
para retornar a soma dos valores registrados de um atributo numérico no intervalo de tempo especificado.
É preciso um único argumento. Se o atributo não for numérico, ele retornará um valor zero.
Utilize a função uniqueCount()
para retornar o número de valor exclusivo registrado para um atributo no intervalo de tempo especificado.
Dica
Para otimizar o desempenho da consulta, esta função retorna resultados aproximados para consultas que fiscalizam 256 ou mais valor exclusivo.
Utilize a função uniques()
para retornar uma lista de valores exclusivos registrados para um atributo no intervalo de tempo especificado. Quando usado junto com a cláusula facet
, uma lista de valores de atributo exclusivos será retornada para cada valor de faceta.
O parâmetro limit
é opcional. Quando não fornecido, aplica-se o limite padrão de 1.000 valores de atributo únicos por faceta. Você pode especificar um valor limit
diferente, até um máximo de 10.000. A função uniques()
retornará o primeiro conjunto de valores de atributo únicos descobertos, até que o limite seja atingido. Portanto, se você tiver 5.000 valores de atributo únicos em seu conjunto de dados, e o limite for definido como 1.000, a operadora retornará os primeiros 1.000 valores exclusivos que descobrir, independente de sua frequência.
O número máximo de valores que podem ser retornados em um resultado de consulta é o produto do limite uniques()
vezes o limite facet
. Na consulta a seguir, o número máximo teórico de valores que podem ser retornados é 5 milhões (5.000 x 1.000).
Dependendo do conjunto de dados que está sendo consultado e da complexidade da consulta, limites de proteção de memória podem impedir a execução de uma consulta muito grande.
From Transaction SELECT uniques(host,5000) FACET appName LIMIT 1000
Se quiser saber as combinações únicas de alguns atributos, você pode estruturar uma consulta no formato SELECT uniques(tuple(x, y, ... z)) ...
para obter todas as tuplas únicas de valores, para manter seu relacionamento. Na consulta a seguir, tuple
é usado em index
e cellName
juntos para localizar valores únicos onde esses dois valores ocorrem em combinação.
FROM NodeStatus SELECT uniques(tuple(index, cellName), 5)
Funções não agregadoras
Utilize funções não agregadoras para dados não numéricos na consulta NRQL .
Use a função accountId()
para retornar o ID da conta associado aos dados da consulta. Esta função não aceita argumentos. Aqui estão alguns exemplos de consulta:
Esta consulta retorna o ID da conta associado a cada evento Transaction
retornado:
SELECT accountId() FROM Transaction SINCE 1 day ago
Esta consulta retorna o número de eventos Transaction
no último dia que estão associados a cada ID de conta:
SELECT count(*) FROM Transaction FACET accountId() SINCE 1 day ago
Esta consulta retorna o número de eventos Transaction
no último dia em que o ID da conta é especificamente 1
, 2
ou 3
:
SELECT count(*) FROM Transaction WHERE accountId() IN (1,2,3) SINCE 1 day ago
Use a função de análise de âncora aparse()
para extrair valores específicos de uma string. Esta é uma alternativa para capture()
.
aparse()
leva dois argumentos:
Um atributo de string
Uma sequência de padrões com sequências de âncora e caracteres de extração. Por exemplo, você poderia usar
www.*.com
para extrair o domínio de um URL.Ao usar
aparse()
, a string padrão deve conter âncoras, comowww.
e.com
acima, para identificar a localização da string extraída pretendida, anotada por*
.aparse()
usa os seguintes caracteres em strings de padrão:%
: curinga sem captura, como você veria na cláusulaLIKE
*
: captura de curinga, semelhante ao uso de captura regexNa prática, as strings âncora geralmente ocorrem no meio de um atributo de string, e não no início ou no final.
Nesse caso, use o curinga
%
para ignorar valores indesejados: por exemplo,%www.*.com%
.Assim como
capture()
, todos os resultados deaparse()
são strings. Para usar esses resultados em funções matemáticas eles devem ser convertidos com a funçãonumeric()
.Observação:
aparse()
não diferencia maiúsculas de minúsculas.FROM PageViewSELECT aparse(browserTransactionName, 'website.com/*')Para extrair um valor do meio de uma string, use o curinga sem captura,
%
, no início e no final da string padrão. Por exemplo:FROM LogSELECT count(*)FACET aparse(string, '%"itemId":"*"%')Ao extrair vários valores como variáveis, observe que a ordem é importante. Por exemplo:
FROM LogWITH aparse(string, 'POST: * body: {"itemId":"*","unitPrice":*}\n') AS (url, itemId, unitPrice)SELECT url, itemId, unitPricePara obter mais informações sobre variáveis, consulte Variáveis NRQL.
Use a função blob()
em um atributo de tipo de blob para retornar uma string codificada em base 64 desse atributo.
Esta função tem as seguintes restrições:
Consulta contendo chamadas para
blob()
tem um valor máximo deLIMIT
de 20blob()
não pode ser chamado na cláusulaWHERE
de uma consultablob()
não pode ser usado em consulta facetada ou consulta de série temporalPara obter mais informações sobre como isso é usado no Logging, consulte Localizar dados em logs longos (blobs).
Para decodificar um blob codificado em base 64, consulte a função
decode()
.SELECT message, blob(`newrelic.ext.message`)FROM Log WHERE newrelic.ext.message IS NOT NULL
Use a função buckets()
para agregar dados divididos por uma cláusula FACET
em intervalos com base em intervalos. Você pode agrupar qualquer atributo armazenado como um valor numérico no banco de dados New Relic.
São necessários três argumentos:
Nome do atributo
Valor máximo do intervalo de amostra (qualquer valor discrepante aparecerá no intervalo final)
Número total de intervalos
Para obter mais informações e exemplos, consulte Dividir seus dados em buckets.
Use a função concat()
para retornar a string resultante da concatenação de seus argumentos.
Podem ser fornecidos até 20 argumentos dos tipos numérico, booleano, tupla ou matriz. Argumentos nulos e argumentos de tipos não suportados são ignorados. Se nenhum argumento for fornecido, o resultado será uma string vazia.
O argumento opcional de precisão pode ser fornecido para limitar o número de casas decimais incluídas ao concatenar valores numéricos de ponto flutuante.
A string resultante pode ter um comprimento máximo de 4.096 caracteres.
Esta consulta retorna as durações backend e de rede do evento PageView
, formatadas com duas casas decimais e rótulos, como uma única string.
FROM PageView SELECT concat('Backend Duration: ', backendDuration, ', Network Duration: ', networkDuration, precision: 2)
Isso retornaria respostas em um formato como:
Backend Duration: 0.69, Network Duration: 0
Esta consulta retorna a duração média da configuração da conexão do evento PageView
, facetada por uma string composta pela cidade, região e país do usuário.
FROM PageView SELECT average(connectionSetupDuration) FACET concat(city, ', ', regionCode, ' ', countryCode) WHERE countryCode IN ('US', 'CA')
Use a função convert()
para realizar a conversão de unidades entre as unidades fornecidas no valor de entrada fornecido.
Unidades e abreviações comuns para tempo, comprimento, peso, volume e dados são suportadas usando os padrões UCUM para alinhar com as especificações OpenTelemetry. Por conveniência, as abreviações padronizadas são aumentadas por algumas alternativas de linguagem natural como ft
além de ft_us
, kilobytes
e µs
.
As unidades diferenciam maiúsculas de minúsculas. Todas as unidades estão em minúsculas, a menos que sua especificação exija que estejam em maiúsculas. Por exemplo, as unidades de dados 'bits'
são válidas para bits e 'By'
devem ter B
maiúsculo para bytes.
A maior unidade de tempo é o year
juliano, que é sempre 365,25 dias.
FROM Transaction SELECT convert(duration, 'ms', 'min') AS durationMin
FROM Product SELECT convert(sum(itemWeight), 'grams', 'lbs')
Esta consulta pressupõe que você tenha as informações da unidade armazenadas como um atributo de string no próprio evento e que gostaria de padronizar os valores para segundos.
FROM Metric SELECT average(convert(apm.mobile.external.duration, unit, 's')) WHERE appName = 'my-application'
Use capture()
para extrair valores de um atributo usando uma expressão regular com sintaxe RE2.
São necessários dois argumentos:
Nome do atributo
Expressão regular com sintaxe de captura (expressões regex em NRQL usam sintaxe semelhante a Python,
r'...'
)Ao capturar, use a sintaxe de captura nomeada RE2
...(?P<name> pattern )...
para capturar o padrão contido, dado o nome especificado.Vários valores podem ser capturados especificando grupos de captura adicionais em uma expressão regular. Por exemplo:
...(?P<name1> pattern1)...(?P<name2> pattern2)...
Nota: Ao capturar vários valores, cada instrução de captura pode ter até 16 grupos de captura e cada consulta NRQL pode ter até 5 instruções de captura.
Leia como usar a captura de regex para melhorar os resultados da sua consulta.
Dica
A expressão regular deve corresponder a toda a sua entrada. Se uma expressão de captura não estiver extraindo os resultados esperados, verifique se ela precisa
.*
no início ou no final, que é o padrão para uma regex de correspondência parcial. No entanto, a regex de correspondência parcial pode causar uma execução de consulta lenta.Aqui está um pequeno vídeo (3:05 minutos) que mostra como usar
capture()
para melhorar a legibilidade dashboard :Para mais informações, veja os exemplos abaixo:
A seguir, você selecionará o nome de domínio do site, removendo
https://
e quaisquer caminhos após o.com
SELECT capture(pageUrl, r'https://(?P<baseUrl>.*.com)/.+')FROM PageView SINCE 1 day agoO seguinte irá capturar apenas a primeira palavra da mensagem de erro.
SELECT capture(errorMessage, r'(?P<firstWord>\S+)\s.+')FROM TransactionWHERE errorMessage IS NOT NULLSINCE 1 hour agoO seguinte será facetado pelo método HTTP capturado.
SELECT count(*) FROM LogWHERE message LIKE '%HTTP%'FACET capture(message, r'.* "(?P<httpMethod>[A-Z]+) .*')A seguir, filtraremos os resultados com base no evento de log com
message
atributo que corresponde à expressão regular onde o nome do trabalho capturado éExampleJob
.SELECT message FROM LogWHERE capture(message, r'.*Job Failed: (?P<jobName>[A-Za-z]+),.*') = 'ExampleJob'SINCE 10 minutes agoO seguinte irá capturar a soma do tempo de CPU das linhas de log. Você deve converter explicitamente para numérico para realizar operações matemáticas.
SELECT sum(numeric(capture(message, r'.*CpuTime:\s(?P<cpuTime>\d+)')))FROM LogWHERE message LIKE '%CpuTime:%' SINCE 1 hour agoNeste exemplo Variáveis NRQL são usadas para armazenar múltiplos valores capturados de uma mensagem do log.
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 NULLVeja mais sobre variáveis NRQL aqui.
Use decode()
para realizar conversões de base 64 em strings e blobs. O valor de entrada (o primeiro argumento) será decodificado usando o padrão base 64 especificado pela codificação (o segundo argumento).
Os seguintes valores de string são parâmetros de codificação suportados:
'base64': Usa o padrão RFC4648 base-64
'base64mime': usa o padrão RFC2045 base-64 (MIME)
'base64url': Usa o padrão RFC4648 base-64 com URL e nome de arquivo em alfabeto seguro
Como
blob()
não é permitido em cláusulasWHERE
ouFACET
,decode()
com tipos de blob não é suportado na cláusulaWHERE
ou para consulta facetada.Para codificar strings, consulte a função
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
Use a função dimensions()
para retornar todos os valores dimensionais em um tipo de dados.
Você pode incluir ou excluir explicitamente um atributo específico usando os argumentos opcionais:
include
: se presente, a lista de inclusão limitadimensions()
a esses atributos.exclude
: se presente, o cálculodimensions()
ignora esses atributos.FROM Metric SELECT count(node_filesystem_size)TIMESERIES FACET dimensions()Quando usado com uma cláusula
FACET
,dimensions()
produz uma série temporal exclusiva para todos os aspectos disponíveis no tipo de evento, semelhante ao modo como o Prometheus se comporta com consultas não agregadas.
Use encode()
para realizar conversões de base 64 em strings. O valor de entrada (o primeiro argumento) será codificado usando o padrão base 64 especificado pela codificação (o segundo argumento).
Os seguintes valores de string são parâmetros de codificação suportados:
'base64': Usa o padrão RFC4648 base-64
'base64mime': usa o padrão RFC2045 base-64 (MIME)
'base64url': Usa o padrão RFC4648 base-64 com URL e nome de arquivo em alfabeto seguro
Para decodificar strings ou blobs, consulte a função
decode()
.encode()
não é compatível com blobs.FROM PageView SELECT session, encode(session, 'base64')
Use a função cidrAddress()
para obter o endereço de rede base de um endereço IP CIDR.
cidrAddress()
recebe os seguintes argumentos:
attribute
- Um valor de string que contém um endereço IP sozinho ou com um comprimento de prefixo na notação CIDR.- Pode ser um atributo de string ou um literal de string entre aspas.
- O endereço IP deve ser um endereço IPv4.
number
- Um valor inteiro que representa o comprimento do prefixo.- Pode ser um atributo inteiro ou um valor inteiro.
- Se o parâmetro de atributo estiver em notação CIDR, esse parâmetro será opcional e terá precedência sobre o comprimento do prefixo fornecido na String CIDR.
cidrFormat
- Um valor booleano opcional que é usado para determinar se a saída do endereço de rede deve ser formatada na notação CIDR. O padrão será verdadeiro.A função
cidrAddress()
retornará um valor desde que o parâmetro atributo e number contenha um endereço IP e comprimento de prefixo válidos. Se a entrada do parâmetro for inválida,cidrAddress()
retornaránull
.A consulta a seguir retorna as sub-redes que processam a maioria das solicitações do tipo de evento SyntheticRequest .
FROM SyntheticRequest SELECT count(*) FACET cidrAddress(serverIPAddress, 24)Isso retornaria respostas em um formato como:
Endereço Cidr do endereço IP do servidor
Contar
10.0.0.0/24
6k
10.10.1.0/24
4k
10.0.14.0/24
1k
Esta consulta retorna todos os endereços IP no atributo
serverIPAddress
que existem no intervalo 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 retorna uma contagem de todos os registros, excluindo registros que contêm um valor
serverIPAddress
que se enquadra no intervalo CIDR de 10.0.0.0/24 ou 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()...
Use a função eventType()
em uma cláusula FACET para dividir os resultados pelo tipo de dados selecionado ou em uma cláusula WHERE para filtrar os resultados para um tipo de dados específico. Isso é particularmente útil para direcionar tipos de dados específicos com as funções filter() e percentage() .
Importante
Neste contexto, “tipo de evento” refere-se aos tipos de dados que você pode acessar com uma consulta NRQL.
Esta consulta retorna a porcentagem do total de TransactionError
resultados do total Transaction
resultados. Você pode usar a função eventType()
para destinar tipos específicos de dados com a função 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 exibe uma contagem de quantos registros cada tipo de dados (Transaction
e TransactionError
) retorna.
SELECT count(*) FROM Transaction, TransactionError FACET eventType() TIMESERIES
Use a função getField()
para extrair um campo de tipos de dados compostos, como dados métricos dimensionais.
Leva os seguintes argumentos:
Tipo de métrica | Campos suportados |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Exemplos:
SELECT max(getField(mySummary, count)) FROM Metric
SELECT sum(mySummary) FROM Metric where getField(mySummary, count) > 10
getCdfCount()
é uma implementação da função de distribuição cumulativa, retornando o número de valores em attribute
igual ou inferior a threshold
.
Apenas um limite é permitido. Attribute
pode ser um atributo numérico ou um atributo de métrica de distribuição. Tipos mistos em uma consulta são aceitos.
Para um tipo numérico, retorna 1 se o atributo for menor ou igual ao limite, caso contrário, retorna 0. Para uma distribuição, retorna a contagem no conjunto de dados representado pela distribuição. Para todos os outros tipos, retorna 0.
Esta consulta retorna o número do evento onde firstPaint
é menor ou igual a 1 segundo.
FROM PageView SELECT sum(getCdfCount(firstPaint, 1.0))
Use if()
para executar operações de fluxo de controle if-then-else em uma consulta.
if()
leva 3 argumentos:
condition
- uma expressão que pode ser avaliada comotrue
oufalse
trueValue
- este valor é retornado se a expressão booleana fortrue
falseValue
- este valor opcional é retornado se a expressão booleana forfalse
, ou se não for fornecidoNULL
, é retornadoFROM 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')Use uma função if() aninhada para adicionar lógica condicional adicional.
FROM Transaction SELECT count(*)FACET if(appName LIKE '%java%', 'Java',if(appName LIKE '%kafka%', 'Kafka', 'Other'))
Use a função de análise JSON, jparse()
, para analisar um valor de string e produzir um mapa/lista de valores (ou estruturas aninhadas) que podem ser manipulados como qualquer outro tipo de valor de primeira classe em NRQL.
jparse()
leva dois argumentos:
attribute
- Um valor de string JSON.path
- Um valor de string opcional que é usado para referenciar diretamente uma parte específica do JSON dentro do parâmetroattribute
. Consulte a seção Referência de sintaxe do caminho de análise JSON abaixo.A função
jparse()
segue o formato RFC 8259 para analisar valores JSON. Quando a funçãojparse()
for usada sem o parâmetropath
, ela retornará o valor JSON desserializado.Você pode usar colchetes para extrair valores individuais de um resultado
jparse()
por meio de uma chave/índice e mapear chaves JSON diretamente para atributo usando a cláusulaWITH
.Referencing a key
A consulta a seguir faz referência à chave
userNames
no atributojsonString
e retornará['abc', 'xyz']
.WITH '{"userNames": ["abc", "xyz"]}' AS jsonString SELECT jparse(jsonString)[userNames]Referencing an index
A consulta a seguir faz referência ao índice
0
dentro do atributojsonString
e retornará'abc'
.WITH '["abc", "xyz"]' AS jsonString SELECT jparse(jsonString)[0]A consulta a seguir usa
jparse()
na cláusulaWITH
para mapear as chaves JSONuserName
eid
em variáveis NRQL para que possam ser usadas no restante da consulta.WITH '{"userName": "test", "unused": null, "id": 100}' AS jsonString, jparse(jsonString) AS (userName, id) SELECT userName, idPara analisar valores específicos da string JSON, você pode usar o parâmetro
path
.É comum que os dados JSON sejam aninhados em várias camadas em formas não triviais. A sintaxe do caminho permite fazer referência direta a uma parte específica dos dados JSON.
Dados de exemplo:
{"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 }]}Exemplos de sintaxe de caminho usando os dados acima:
Path Syntax Example
Result Description
Result
valueA
Retorna o valor na chave
"test"
["valueA"]
Retorna o valor na chave
"test"
[valueA, valueC]
Retorna lista de valor principal
["test", [{"id": 1…}, {"id": 2…}], {"id": 3…}]]
valueB.nestedValue2
Retorna o valor na chave
100
valueC[0]
Retorna o valor da lista no índice
0
{"id": 1…}
valueC[0,2]
Retorna os valores da lista no índice
0
e2
[{"id": 1…}, {"id": 3…}]
valueC[0:2]
Retorna o intervalo de valores da lista do primeiro índice ao segundo, excluindo o valor no segundo índice. Nesse caso, os valores da lista no índice
0
e1
são retornados.[{"id": 1…}, {"id": 2…}]
valueC[:2]
Retorna o intervalo de valores da lista do início ao segundo índice, excluindo o valor no segundo índice. Nesse caso, os valores da lista no índice
0
e1
são retornados.[{"id": 1…}, {"id": 2…}]
valueC[:-2]
Retorna todos os valores da lista, exceto o último n, onde n é um número negativo após os dois pontos (ou seja,
[:-n]
). Neste caso, o valor da lista no índice0
será retornado.[{"id": 1…}]
valueC[1:]
Retorna o intervalo de valores da lista do índice especificado até o final da lista. Nesse caso, os valores da lista no índice
1
e2
são retornados.[{"id": 2…}, {"id": 3…}]
valueC[-1:]
Retorna os últimos n valores da lista, onde n é um número negativo antes dos dois pontos (por exemplo,
[-n:]
). Neste caso, o valor da lista no índice2
será retornado.[{"id": 3…}]
valueC[*]
Retorna todos os valores da lista
[{"id": 1…}, {"id": 2…}, {"id": 3…}]
valueC[*].id
Retorna o valor principal especificado de todos os membros da lista. Neste caso, o valor principal
id
.[1, 2, 3]
valueC[*]["label", "other"]
Retorna as chaves especificadas de todos os membros da lista. Neste caso, o valor principal
label
eother
.[["A", 7],…]
Exemplos:
A consulta a seguir analisa a string JSON no atributo
jsonString
.WITH '{"user": {"name": "John", "id": 5}}' AS jsonString SELECT jparse(jsonString)Esta consulta retornará a string JSON desserializada:
{ "user": { "name": "John", "id": 5 } }Um problema comum é ter dados ricos e estruturados escondidos em uma mensagem do log. Você pode aproveitar
aparse()
ejparse()
para eliminar ruídos e encontrar valores específicos.A seguinte consulta:
Chama
aparse()
para extrair dados JSON do atributologMessage
Analisa o campo
user.name
dos dados JSON extraídos usandojparse()
e o parâmetro de caminhouser.name
.WITH '1693242121842: value=\'{"user": {"name": "John", "id": 5}}\', useless=stuff' AS logMessage, aparse(logMessage, '%: value=\'*\'%') AS jsonString SELECT jparse(jsonString, 'user.name')
A consulta a seguir analisa cada campo
id
da lista de objetos no atributojsonString
e gera esses valores como uma matriz.WITH '{"users": [{"name": "A", "id": 5}, {"name": "B", "id": 10}]}' AS jsonString, jparse(jsonString, 'users[*].id') AS ids SELECT idsA consulta acima retornará
[5, 10]
.Funções relacionadas:
mapKeys()
,mapValues()
Use a função length()
para retornar o comprimento de um valor de string ou o número de elementos em um valor de matriz.
É preciso um único argumento.
Esta consulta retorna o comprimento de cada string de URL do evento PageView
.
SELECT length(pageUrl) FROM PageView
Se você carregou uma tabela de consulta, você pode usar esta função com um nome de tabela para acessar os dados dessa tabela em uma consulta. Aqui está um exemplo de consulta:
FROM LogSELECT count(*)WHERE hostname IN (FROM lookup(myHosts) SELECT uniques(myHost))
Para mais informações, veja Como consultar tabela de consulta de dados.
Use a função lower()
para alterar todos os caracteres alfabéticos de um valor de string para minúsculas.
Argumentos:
str
- O valor da string deve ser em minúsculas- Pode ser qualquer coisa avaliada como uma string, incluindo uma string literal entre aspas, uma string de consulta atributo, uma função que retorna uma string ou até mesmo uma subconsulta que retorna um único valor de string.
- Se esse argumento for avaliado como nulo, a função
lower()
retornará nulo.
Função relacionada:
upper()
Use a função mapKeys()
para retornar uma lista de chaves quando um mapa for fornecido como entrada no parâmetro attribute
.
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys
A consulta acima:
- Desserializa a string JSON no atributo
jsonString
em um mapa usando a funçãojparse()
- Chama a função
mapKeys()
para extrair uma lista de todas as chaves deste mapa - Vincula esta lista de chaves ao atributo
keys
Após executar a consulta acima, keys
conterá a lista ['userResult1', 'userResult2', 'userResult3']
.
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys
A consulta acima extrairá apenas as chaves mais externas da string JSON no atributo jsonString
. Após executar a consulta, keys
conterá a lista ['value1', 'value2']
.
Use a função mapValues()
para retornar uma lista de valores quando um mapa for fornecido como entrada no parâmetro attribute
.
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values
A consulta acima:
- Desserializa a string JSON no atributo
jsonString
em um mapa usando a funçãojparse()
- Chama a função
mapValues()
para extrair uma lista de todos os valores neste mapa - Vincula esta lista de valores ao atributo
values
Após executar a consulta acima, values
conterá a lista [100, 200, 4]
.
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values
A consulta acima extrai os valores mais externos da string JSON no atributo jsonString
. Depois de executar a consulta, values
conterá uma lista da string "test"
e do objeto aninhado.
Isso pode ser visto na visualização JSON:
"contents": [ { "function": "alias", "alias": "values", "contents": { "constant": [ "test", { "nestedValue1": [ 1, 2, 3 ], "nestedValue2": 100 } ] } }],
Use a função minuteOf()
para extrair apenas a parte dos minutos (ou seja, minutos de 0 a 59) de um atributo que contém um valor timestamp válido. Isso também funciona para funções como hourOf()
, weekOf()
e assim por diante. Para obter uma lista completa de funções baseadas em tempo, consulte a tabela em nosso documento de resultados de grupo ao longo do tempo
Use a função mod()
para retornar o módulo de piso após dividir o valor do atributo numérico fornecido (o primeiro argumento ou dividendo) por um valor numérico (o segundo argumento ou divisor). Esta operação de módulo pode ser usada dentro de uma condição de cláusula WHERE
para filtrar para um subconjunto arbitrário de resultados ou dentro de uma cláusula FACET
como uma maneira de subdividir o 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)
Use a função position()
para encontrar a localização de uma substring dentro de uma string. A correspondência diferencia maiúsculas de minúsculas.
Argumentos:
str
- a string na qual a substring será encontrada.- Pode ser qualquer coisa avaliada como uma string, incluindo uma string literal entre aspas, uma string de consulta atributo, uma função que retorna uma string ou até mesmo uma subconsulta que retorna um único valor de string.
substr
- a string a ser pesquisada dentro de str.occurrence
- indica qual ocorrência de substr da qual retornar a posição.Padrão:
0
Se positivo, encontre a enésima ocorrência do substr desde o início de str, com base em zero
Se for negativo, encontre a enésima ocorrência do substr no final de str. A última ocorrência de substr seria a ocorrência -1.
Alias:
indexOf(str, substr [, occurrence])
-indexOf()
é um nome alternativo para a funçãoposition()
Retorna:
O índice baseado em 0 do caractere inicial do substr dentro de str
Nulo será retornado se str for nulo, substr for nulo ou a ocorrência referenciada de substr não for encontrada
Esta consulta demonstra o uso da função
position()
para localizar o índice posicional de várias substrings em uma string. O uso da funçãoposition()
nos argumentos da funçãosubstring()
também é demonstrado aqui.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])
exemplo
Use a função round()
para retornar o valor arredondado de um atributo.
Opcionalmente, round()
pode receber um segundo argumento, to_nearest
, para arredondar o primeiro argumento para o múltiplo mais próximo do segundo. to_nearest
pode ser fracionário.
SELECT round(n [, to_nearest])
Use a função stddev()
para retornar um Desvio padrão para um atributo numérico durante o intervalo de tempo especificado. É preciso um único argumento. Se o atributo não for numérico, ele retornará um valor zero.
Use a função string()
para converter um valor numérico, booleano, de tupla ou de matriz em um valor de string.
São necessários dois argumentos, um opcional:
Nome do atributo
Precisão: se presente, impõe um limite no número de casas decimais incluídas na conversão de valores numéricos de ponto flutuante.
Esta consulta retorna a duração do PageView como uma string, com duas casas decimais.
FROM PageView SELECT string(duration, precision: 2)Esta consulta retorna a média da duração do PageView como uma string, com duas casas decimais.
FROM PageView SELECT string(average(duration), precision: 2)Use
string()
para facetar um valor de ponto flutuante sem perder casas decimais.FROM PageView SELECT count(*)FACET string(tuple(asnLatitude, asnLongitude), precision: 2)
Use a função substring()
para extrair uma parte de uma string.
Argumentos:
str
- a string da qual extrair uma substring.- Pode ser qualquer coisa avaliada como uma string, incluindo uma string literal entre aspas, uma string de consulta atributo, uma função que retorna uma string ou até mesmo uma subconsulta que retorna um único valor de string.
- Se esse argumento for avaliado como nulo, a função
substring()
retornará nulo.
start
- a posição dentro de str a partir da qual a extração deve ser iniciada.- O primeiro caractere em str é a posição 0.
- Um valor negativo encontrará a posição relativa ao final de str, sendo o último caractere da string a posição -1.
- Se start for maior ou igual ao comprimento de str, a função
substring()
retornará uma string vazia. - Se start for negativo e seu valor absoluto for maior que o comprimento de str, a substring extraída começará na posição 0.
length
- o comprimento, ou número de caracteres, da substring a ser extraída de str.- Opcional - se o comprimento não for fornecido, todos os caracteres em str após a posição inicial resolvida serão incluídos.
Consulte a função
position()
para obter exemplos de uso desubstring()
eposition()
juntos.
Use a função toDatetime()
para converter um timestamp em uma string de data e hora formatada.
toDatetime()
recebe os seguintes argumentos:
timestamp
- Um timestamp numérico a ser traduzido em uma sequência de data e hora. Este pode ser um valor numérico ou um atributo e será convertido internamente emlong
.pattern
- Um padrão de data e hora opcional usado para formatar o resultado. Consulte a seção Padrões de formatação e análise na documentação do DatetimeFormatter para saber como construir uma sequência de padrões.- Este deve ser um valor de string constante e terá como padrão
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
se um padrão não for fornecido.
- Este deve ser um valor de string constante e terá como padrão
timezone
- Um valor de fuso horário opcional que é usado para interpretar a string de data e hora (ex. (UTC).- Deve ser um valor de string constante e o padrão será UTC ou o valor fornecido em
WITH TIMEZONE
, se disponível.
Contanto que a entrada seja um valor numérico válido, a função
toDatetime()
sempre retornará um valor.Alias:
fromTimestamp()
é um nome alternativo para a funçãotoDatetime()
.Exemplos:
A consulta a seguir traduz o atributo
timestampValue
usando o padrão padrão deyyyy-MM-dd'T'HH:mm:ss.SSSXXX
. Isso retornará a string de data e hora1970-01-01T00:20:34.567Z
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue)A consulta a seguir traduz o atributo
timestampValue
usando a string padrãoyyyy-MM-dd
com o fuso horário definido como 'América/Los_Angeles'. Isso retornará a string de data e hora1969-12-31
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd', timezone:'America/Los_Angeles')A consulta a seguir traduz o atributo
timestampValue
usando o fuso horário fornecido na cláusulaWITH TIMEZONE
. Isso retornará a string de data e hora1969-12-31
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd') FROM Event WITH TIMEZONE 'America/Los_Angeles'- Deve ser um valor de string constante e o padrão será UTC ou o valor fornecido em
Use a função toTimestamp()
para analisar um timestamp em milissegundos de época a partir de uma string de data e hora.
toTimestamp()
recebe os seguintes argumentos:
datestring
- Uma sequência de data e hora a ser traduzida em um timestamp (milissegundos de época). Pode ser um atributo de string ou uma string literal entre aspas.pattern
- Um padrão de data e hora opcional usado para analisar o parâmetro datestring. Consulte a seção Padrões de formatação e análise na documentação do DatetimeFormatter para saber como construir uma sequência de padrões.- Este deve ser um valor de string constante e terá como padrão
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
se um padrão não for fornecido.
- Este deve ser um valor de string constante e terá como padrão
timezone
- Um valor de fuso horário opcional que é usado para interpretar o parâmetro datestring (ex. PST).- Deve ser um valor de string constante e o padrão será UTC ou o valor fornecido em
WITH TIMEZONE
, se disponível.
Alias:
fromDatetime()
é um nome alternativo para a funçãotoTimestamp()
.Dica
Se a string encontrada não corresponder ao padrão fornecido, ela retornará
null
. Se você tiver strings de data e hora em vários padrões, poderá unir os resultados usandoOR
para cascata até que um dos valores não seja nulo. Você também pode usar segmentos de padrão opcionais. O padrão padrão usa colchetes para tornar opcionais os milissegundos e as partes de deslocamento de zona.Cenário
Detalhe
Padrão de amostra
Exemplo de data e hora
Resolve
Fuso horário ausente
Usará o argumento de fuso horário ou o valor
WITH TIMEZONE
. O padrão éUTC
.aaaa-MM-dd HH:mm:ss.SSS
18/10/2023 15:27:03.123
2023-10-18T15:27:03.123Z
Campo de data e hora ausente
Qualquer campo de hora ausente será substituído por 0. Qualquer campo de data ausente será substituído por 1. Se um campo estiver presente, todos os campos de precedência mais alta também deverão estar presentes.
Nota: Os padrões de dia do ano e trimestre do ano são suportados.aaaa-MM-dd HH:mm:ss
18/10/2023 15:27:03
2023-10-18T15:27:03.000Z
aaaa-MM-dd HH:mm
18/10/2023 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
18/10/2023
2023-10-18T00:00:00.000Z
aaaa 'dia' D
2023 dia 291
2023-10-18T00:00:00.000Z
aaaa-MM
2023-10
2023-10-01T00:00:00.000Z
aaaa qqq
4º trimestre de 2023
2023-10-01T00:00:00.000Z
aaaa
2023
2023-01-01T00:00:00.000Z
Apenas tempo
Se um padrão de tempo for usado sem data, o timestamp Unix em milissegundos será calculado.
Nota: O ajuste de fuso horário ainda é respeitado.HH:mm
00:30
1971-01-01T00:30:00.000Z
HH: mm O
00:30 GMT-1
1971-01-01T01:30:00.000Z
HH: mm O
00:30 GMT+1
31-12-1969T23:30:00.000Z
horário de 12 horas
Se um padrão de 12 horas (h minúsculo) for usado, então o padrão am-pm-of-day (a) também deverá ser usado.
Nota: Dentro da string de data e hora, AM/PM deve estar em letras maiúsculas.aaaa-MM-dd h:mm a
18/10/2023 15:27
2023-10-18T15:27:00.000Z
aaaa-MM-dd h:mm
18/10/2023 3:27
Padrão não suportado
aaaa-MM-dd h:mm a
18/10/2023 15h27
nulo (devido ao pm minúsculo)
Precedência de campo
Se um campo estiver presente, todos os campos de precedência mais alta também deverão estar presentes.
aaaa dd
2023 18
Padrão não suportado (dd é o dia do mês e o mês está faltando)
Exemplos:
A consulta a seguir analisa a string de data e hora '2023-10-18T15:27:03.123Z' usando o padrão padrão de
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
. Isso retorna o valor do timestamp1697642823123
.SELECT toTimestamp('2023-10-18T15:27:03.123Z')FROM EventA consulta a seguir analisa a string de data e hora '2023-11-03 11:00:32' com o fuso horário definido como 'América/Los_Angeles'. Isso retorna o valor do timestamp
1699034432000
.SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss', timezone:'America/Los_Angeles')FROM EventA consulta a seguir analisa a string de data e hora '2023-11-03 11:00:32' com o fuso horário fornecido na cláusula
WITH TIMEZONE
. Isso retorna o valor do timestamp1699034432000
.SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss')FROM Event WITH TIMEZONE 'America/Los_Angeles'Importante
A interface detectará automaticamente o valor
toTimestamp()
como um timestamp e o formatará como um valor de data e hora. Para exibir o timestamp numérico real, envolva a funçãotoTimestamp()
em uma funçãostring()
.- Deve ser um valor de string constante e o padrão será UTC ou o valor fornecido em
Use a função upper()
para alterar todos os caracteres alfabéticos de um valor de string para letras maiúsculas.
Argumentos:
str
- O valor da string deve ser maiúsculoPode ser qualquer coisa avaliada como uma string, incluindo uma string literal entre aspas, uma string de consulta atributo, uma função que retorna uma string ou até mesmo uma subconsulta que retorna um único valor de string.
Se esse argumento for avaliado como nulo, a função
upper()
retornará nulo.Função relacionada:
lower()
Conversão de tipo
NRQL não suporta “coerção”. Isso significa que um float armazenado como uma string é tratado como uma string e não pode ser operado por funções que esperam valores float .
Você pode converter uma string com um valor numérico ou um booleano com um valor de string em seus equivalentes numéricos e booleanos, ou converter um valor que não seja de string em um valor de string, com estas funções:
- Use a função
numeric()
para converter um número com formato de string em um valor numérico. A função pode ser incorporada em uma consulta que usa funções matemáticas em resultados de consulta ou funções agregadoras NRQL , comoaverage()
. Observe que se o valor NRQL estiver no formato de medidor, entãonumeric()
não funcionará nele. Em vez disso, você deve usar uma destas funções de consulta compatíveis: latest()
min()
max()
sum()
count()
average()
- Use a função
boolean()
para converter um valor de string"true"
ou"false"
no valor booleano correspondente. - Use a função
string()
para converter um valor numérico, booleano, de tupla ou de matriz em um valor de string. Consultestring()
acima para obter mais informações.
Comentários
Ao escrever uma consulta NRQL, você pode adicionar comentários, o que pode ajudar os membros da sua equipe a entender e usar melhor a consulta.
Aqui estão os detalhes da sintaxe:
--
Dois traços comentarão todo o texto à direita deste indicador na mesma linha.//
Duas barras comentarão todo o texto à direita deste indicador na mesma linha./* */
Qualquer texto entre esses conjuntos de caracteres será comentado. Este indicador pode ser aplicado a várias linhas.
Observe que os comentários não são exibidos em todos os lugares. Algumas visualizações, como “consulta recente” e “visualizar consulta”, não mostrarão comentários.
Alguns exemplos de consultas que incluem comentários:
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
Outros recursos populares para compreender a sintaxe e as regras do NRQL incluem: