Pour écrire une bonne requête NRQL , il est utile de comprendre comment fonctionnent nos différentes clauses et fonctions NRQL . Ce document contient des définitions de clauses et de fonctions NRQL et donne des exemples de leur utilisation.
Vous recherchez des règles de syntaxe NRQL de base ? Voir Comment utiliser NRQL. Pour un didacticiel, voir le didacticiel d'introduction à NRQL.
Composants de la requête
Comme indiqué dans notre document de syntaxe NRQL de base, chaque requête NRQL contiendra une clause SELECT
et une clause FROM
, toutes les autres clauses étant facultatives. Les définitions de clauses ci-dessous contiennent également des exemples de requête NRQL .
mot-clé DELETE
Le mot-clé DELETE dans le langage de requête New Relic (NRQL) est utilisé pour supprimer des données et des attributs spécifiques dans le contrôle de pipeline. Cela permet de gérer les données ingérées dans la base de données New Relic (NRDB).
Le mot-clé DELETE est appliqué dans la requête NRQL pour spécifier quelles données ou quels attributs doivent être supprimés. Voici quelques exemples :
Voici quelques exemples :
Suppression de métriques spécifiques :
DELETE FROM Metric WHERE metricName = 'newrelic.goldenmetrics.infra.kubernetes_pod.podScheduled'- Supprime les métriques portant le nom spécifié.
Suppression de plages spécifiques :
DELETE FROM Span WHERE appName = 'external-usage-consumer (test-odd-wire)'- Supprime les étendues associées à l'application spécifiée.
Suppression de mises à jour d'agents spécifiques :
DELETE FROM AgentUpdate WHERE a = 'b'- Supprime les mises à jour de l'agent lorsque l'attribut
a
est égal àb
.
- Supprime les mises à jour de l'agent lorsque l'attribut
Clauses obligatoires
SELECT attribute ...
SELECT function(attribute) ...
Le SELECT
spécifie quelle partie d'un type de données vous souhaitez interroger en spécifiant un attribut ou une fonction. Il est suivi d'un ou plusieurs arguments séparés par des virgules. Dans chaque argument vous pouvez :
- Obtenez les valeurs de tous les attributs disponibles en utilisant
*
comme caractère générique. Par exemple :SELECT * from Transaction
. - Obtenir les valeurs associées à un attribut spécifié ou à plusieurs attributs spécifiés dans une liste séparée par des virgules.
- Obtenez des valeurs agrégées à partir d'un attribut spécifié en sélectionnant une fonction d'agrégateur.
- Étiquetez les résultats renvoyés dans chaque argument avec la clause
AS
.
Vous pouvez également utiliser SELECT
avec des fonctions mathématiques de base.
Cette requête renvoie le temps de réponse moyen depuis la semaine dernière.
SELECT average(duration) FROM PageView SINCE 1 week ago
Vous pouvez inclure à la fois le caractère générique *
et l'attribut individuel, les fonctions, les expressions mathématiques et les variables NRQL dans la même instruction SELECT
. *
peut apparaître au début ou à la fin de la liste SELECT
, et les colonnes supplémentaires sélectionnées apparaîtront respectivement au début ou à la fin du tableau des résultats :
SELECT *, attribute, function(attribute), attribute1 + attribute2 FROM ...
WITH attribute1 + attribute2 AS attrSum SELECT attrSum, attribute, function(attribute), * FROM ...
Cette requête renvoie tous les attributs PageView disponibles avec des colonnes supplémentaires au début.
WITH concat('(', asnLatitude, ', ', asnLongitude, ')') AS coordinatesSELECT coordinates, city, connectionSetupDuration + pageRenderingDuration AS partialDuration, *FROM PageView

SELECT *
avec exemple de colonnes supplémentaires
Conseil
Seules les fonctions non agrégatrices sont prises en charge dans la liste SELECT
avec *
.
SELECT ...FROM data type...
Utilisez la clause FROM
pour spécifier le type de données que vous souhaitez interroger. Vous pouvez commencer votre requête avec FROM
ou avec SELECT
. Vous pouvez fusionner des valeurs pour le même attribut sur plusieurs types de données dans une liste séparée par des virgules.
Cette requête renvoie le nombre de toutes les transactions APM au cours des sept derniers jours :
SELECT count(*) FROM Transaction SINCE 7 days ago
Cette requête renvoie le nombre de toutes les transactions APM et des événements du navigateur au cours des trois derniers jours :
SELECT count(*) FROM Transaction, PageView SINCE 3 days ago
Voir lookup()
.
Clauses facultatives
SELECT ...AS 'label'...
Utilisez la clause AS
pour étiqueter un attribut, un agrégateur, une étape dans un entonnoir ou le résultat d'une fonction mathématique avec une chaîne délimitée par des guillemets simples. L'étiquette est utilisée dans le graphique résultant. Notez que les étiquettes de clause AS
dans les graphiques de séries chronologiques ne seront pas affichées si une clause FACET
est utilisée.
Cette requête renvoie le nombre de pages vues par session :
SELECT count(*)/uniqueCount(session) AS 'Pageviews per Session'FROM PageView
Cette requête renvoie le nombre de personnes qui ont visité à la fois la page principale et la page carrières d'un site au cours de la semaine écoulée :
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...
Utilisez la clause COMPARE WITH
pour comparer les valeurs de deux plages horaires différentes.
COMPARE WITH
nécessite une instruction SINCE
ou UNTIL
. Le temps spécifié par COMPARE WITH
est relatif au temps spécifié par SINCE
ou UNTIL
. Par exemple, SINCE 1 day ago COMPARE WITH 1 day ago
compare hier avec la veille.
La plage horaire pour la valeurCOMPARE WITH
est toujours la même que celle spécifiée par SINCE
ou UNTIL
. Par exemple, SINCE 2 hours ago COMPARE WITH 4 hours ago
peut comparer la période de 15h00 à 17h00 avec la période de 11h00 à 13h00.
COMPARE WITH
peut être formaté soit sous forme de graphique linéaire, soit sous forme de panneau d'affichage :
- Avec
TIMESERIES
,COMPARE WITH
crée un graphique linéaire avec la comparaison mappée au fil du temps. - Sans
TIMESERIES
,COMPARE WITH
génère un panneau d'affichage avec la valeur actuelle et le pourcentage de changement par rapport à la valeurCOMPARE WITH
.
Example:Cette requête renvoie des données sous forme de graphique linéaire affichant le 95e percentile de la semaine dernière par rapport à la même plage il y a une semaine. D'abord sous forme de valeur unique, puis sous forme de graphique linéaire.
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
Important
Pour la requête FACET
utilisant COMPARE WITH
, les facettes du résultat sont sélectionnées en fonction de la plage horaire spécifiée à l'aide SINCE
et UNTIL
et non de la plage horaire précédente comparée. Les résultats d’une requête FACET
portant uniquement sur la plage de temps précédente peuvent inclure un ensemble différent de facettes.
Vous pouvez utiliser cette clause avec ces types de données :
Transaction
TransactionError
événement personnalisé signalé via API d'agent
L'objectif de
EXTRAPOLATE
est de compenser mathématiquement les effets de l'échantillonnage des données d'événement par l'agent APM afin que les résultats de la requête représentent plus fidèlement l'activité totale de votre système.Cette clause sera utile lorsqu'un agent APM signale tellement d'événements qu'il dépasse souvent ses limites de rapport de cycle de collecte . Lorsque cela se produit, l’agent commence à échantillonner l’événement.
Lorsque
EXTRAPOLATE
est utilisé dans une requête NRQL qui prend en charge son utilisation, le rapport entre reported events et total events est utilisé pour extrapoler une approximation proche des données totales non échantillonnées. Lorsqu'il est utilisé dans une requête NRQL qui ne prend pas en charge son utilisation ou qui n'a pas utilisé de données échantillonnées, il n'a aucun effet.Important
Notez que
EXTRAPOLATE
est particulièrement utile pour les données homogènes (comme le débit ou le taux d'erreur). Ce n'est pas efficace lorsqu'on tente d'extrapoler un nombre de choses distinctes (commeuniqueCount()
ouuniques()
).Cette clause fonctionne uniquement avec les requêtes NRQL qui utilisent l'une des fonctions d'agrégation suivantes :
apdex
average
count
histogram
sum
percentage
(si la fonction qu'elle prend comme argument supporteEXTRAPOLATE
)rate
(si la fonction qu'elle prend comme argument supporteEXTRAPOLATE
)stddev
Une requête qui affichera le débit extrapolé d'un service nommé
interestingApplication
.SELECT count(*) FROM Transaction WHERE appName='interestingApplication' SINCE 60 minutes ago EXTRAPOLATEUne requête qui affichera le débit extrapolé d'un service nommé
interestingApplication
par nom de transaction, affiché sous forme de série chronologique.SELECT count(*) FROM Transaction WHERE appName='interestingApplication'SINCE 60 minutes ago FACET name TIMESERIES 1 minute EXTRAPOLATE
SELECT ...FACET attribute...
Utilisez FACET
pour séparer et regrouper vos résultats par valeurs d’attribut. Par exemple, vous pouvez FACET
vos données PageView
à deviceType
pour déterminer quel pourcentage de votre trafic provient des appareils mobiles, des tablettes et des ordinateurs de bureau.
Utilisez la clause LIMIT
pour spécifier le nombre de facettes qui apparaissent (la valeur par défaut est 10). Pour un regroupement plus complexe, utilisez FACET CASES
. Les clauses FACET
prennent en charge jusqu'à cinq attributs, séparés par des virgules.
Les facettes sont triées par ordre décroissant en fonction du premier champ que vous fournissez dans la clause SELECT
. Si vous effectuez un facettage sur un attribut avec plus de 5 000 valeurs uniques, un sous-ensemble de valeurs de facette est sélectionné et trié en fonction du type de requête. Notez que si un graphique de séries chronologiques ne renvoie aucune donnée (correspondance NRQL sans données correspondantes, NRQL non valide, etc.), il affichera uniquement une ligne plate avec l'étiquette correspondant à la première table de la clause FROM
.
Lors de la sélection de min()
, max()
, percentile()
, average()
ou count()
, FACET
utilise ces fonctions pour déterminer comment les facettes sont sélectionnées et triées. Lorsque vous sélectionnez une autre fonction, FACET
utilise la fréquence de l'attribut sur lequel vous effectuez le facettage pour déterminer comment les facettes sont sélectionnées et triées.
Cette requête affiche les villes avec le nombre de pages vues le plus élevé. Cette requête utilise le nombre total de pages vues par ville pour déterminer comment les facettes sont sélectionnées et classées.
SELECT count(*) FROM PageView FACET city
Cette requête affiche les villes qui accèdent au plus grand nombre d'URL uniques. Cette requête utilise le nombre total de fois qu'une ville particulière apparaît dans les résultats pour déterminer comment les facettes sont sélectionnées et classées.
SELECT uniqueCount(pageUrl) FROM PageView FACET city
La segmentation avancée et l'analyse de cohorte vous permettent d'effectuer des facettes sur des fonctions de compartiment pour répartir plus efficacement vos données.
L’analyse de cohorte est un moyen de regrouper les résultats en fonction d’un horodatage. Vous pouvez les séparer en groupes couvrant une plage spécifiée de dates et d'heures.
Important
Lorsque vous utilisez des fonctions pour agréger des valeurs d'attribut, il est important que l'attribut agrégé dans la première fonction de votre requête contienne des valeurs non nulles. Les facettes ne seront choisies que pour les lignes contenant une valeur non nulle pour l'attribut dans la première fonction.
Exemple:
FROM Event SELECT average(attribute) FACET name
Les noms ne seront choisis qu'à partir des lignes où l'attribut n'est pas nul.
Pour vérifier si l'attribut que vous utilisez dans votre fonction contient des valeurs non nulles, exécutez la requête suivante :
FROM Event SELECT attribute, name WHERE attribute IS NOT NULL
Utilisez FACET ... AS
pour nommer les facettes en utilisant le mot-clé AS
dans la requête. Cette clause est utile pour ajouter des noms plus clairs ou simplifiés pour les facettes dans vos résultats. Il peut également être utilisé pour renommer des facettes dans une requête d'agrégation imbriquée .
FACET ... AS
la requête modifiera les noms des facettes dans les résultats (lorsqu'ils apparaissent comme en-têtes dans les tableaux, par exemple), mais pas les noms des facettes eux-mêmes.
FROM Transaction SELECT count(*) FACET response.headers.contentType AS 'content type'
SELECT ...FACET CASES ( WHERE attribute operator value, WHERE attribute operator value, ...)...
Utilisez FACET CASES
pour décomposer vos données selon des conditions plus complexes que possible avec FACET
. Séparez les conditions multiples par une virgule ,
. Par exemple, vous pouvez interroger vos données PageView
et FACET CASES
dans des catégories telles que moins d'une seconde, de 1 à 10 secondes et plus de 10 secondes. Vous pouvez combiner plusieurs attributs dans vos cas et étiqueter les cas avec le sélecteur AS
. Les points de données seront ajoutés à un seul cas de facette au plus, le premier cas de facette auquel ils correspondent.
Vous pouvez également utiliser une fonction temporelle avec votre attribut et utiliser l'opérateur OR
pour facetter les résultats qui ne correspondent à aucun de vos cas spécifiés.
SELECT count(*) FROM PageView FACET CASES ( WHERE duration < 1, WHERE duration > 1 AND duration < 10, WHERE duration > 10)
Cet exemple regroupe les résultats dans un compartiment où le nom de la transaction contient login
et un autre où l'URL contient login
et un attribut personnalisé indique que l'utilisateur était un utilisateur payant :
SELECT count(*) FROM Transaction FACET CASES ( WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type = 'Paid')
Cet exemple utilise le sélecteur AS
pour donner à vos résultats un nom lisible par l'homme :
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')
Cet exemple utilise l'opérateur OR
pour facetter les résultats qui ne correspondent à aucun de vos cas :
SELECT count(*) FROM Transaction FACET CASES ( WHERE name LIKE '%login%', WHERE name LIKE '%feature%' AND customer_type='Paid') OR name
Dans NRQL, la valeur par défaut est que la première agrégation dans la clause SELECT
guide la sélection des facettes dans une requête. FACET ... ORDER BY
vous permet de remplacer ce comportement par défaut en ajoutant une fonction d'agrégation avec le modificateur ORDER BY
pour spécifier comment les facettes sont sélectionnées. Plus précisément, la clause remplacera la priorité selon laquelle les facettes sont choisies pour figurer dans le résultat final avant d'être limitées par la clause LIMIT
. Cette clause peut être utilisée dans les requêtes mais pas pour les alertes ou le streaming.
Cet exemple montre comment utiliser FACET ... ORDER BY
pour trouver les durées moyennes des transactions d'application, en affichant les 10 durées les plus élevées (limite par défaut) par application ayant la taille de réponse la plus élevée. Dans ce cas, si FACET ... ORDER BY
n'est pas utilisé, les résultats de la requête afficheront à la place les 10 premiers par durée la plus élevée, la taille de la réponse n'étant pas pertinente pour la sélection de l'application.
FROM Transaction SELECT average(duration) TIMESERIES FACET appName ORDER BY max(responseSize)
Gardez à l’esprit que si vous utilisez la clause FACET ... ORDER BY
, vous ne pouvez pas modifier l’ordre de tri en ajoutant les modificateurs ASC
et DESC
. Par défaut, cette clause utilise DESC
.
Conseil
Étant donné que les opérations sont effectuées avant l'application de la clause LIMIT
, FACET ... ORDER BY
n'a pas d'impact sur le type de résultats de la requête finale, ce qui sera particulièrement visible dans les résultats des requêtes sans séries temporelles.
Important
Le modificateur ORDER BY
dans ce cas fonctionne différemment de la clause ORDER BY
. Lors de l'analyse des requêtes qui suivent le format FACET attribute1 ORDER BY attribute2
, New Relic les lira comme des requêtes FACET ... ORDER BY
, mais seulement si ORDER BY
apparaît immédiatement après FACET
. Sinon, ORDER BY
sera interprété par New Relic comme une clause.
Utilisez la clause JOIN
pour combiner les données d’un type d’événement avec les résultats d’une sous-requête basée sur un attribut ou une clé commune.
FROM Event [INNER|LEFT] JOIN (SELECT... FROM...) ON [key =] key SELECT ...
Il existe quelques règles simples pour les jointures de sous-requêtes :
- La clause
JOIN
doit toujours suivre immédiatement la clauseFROM
. - La préfixation d'un type de jointure (
INNER
ouLEFT
) est facultative. Lorsqu'il est omis, le type de jointure par défaut estINNER
. - Les parenthèses contenant une sous-requête doivent immédiatement suivre
JOIN
. - La clause
ON
doit immédiatement suivre la sous-requête.
Join types | |
---|---|
| Le résultat inclura uniquement les valeurs de la requête externe qui ont une valeur correspondante dans les résultats de la sous-requête jointe. Il s'agit du type de jointure par défaut. |
| Le résultat inclura les événements de la requête externe qui n'ont pas de correspondance avec la sous-requête jointe. |
Join | |
---|---|
| Définit la valeur clé à comparer dans la sous-requête et la requête externe. Le seul opérateur de comparaison autorisé est l'égalité.
|
| Il s'agit d'une syntaxe abrégée lorsque l'identifiant de clé est le même dans les deux contextes. Cela équivaut à |
Restrictions et limitations à prendre en compte :
- La sous-requête jointe continuera d'avoir une valeur par défaut
LIMIT
de 10, avec un maximumLIMIT
de 5 000. Notez que leLIMIT
de la requête externe n'affecte pas la requête interne. - L'utilisation de
TIMESERIES
dans la sous-requête jointe n'est pas prise en charge. Si votre requête externe utiliseTIMESERIES
, gardez à l'esprit que la sous-requête jointe fournira un seul résultat pour toute la durée de la requête. - Comme toutes les sous-requêtes, les sous-requêtes jointes ne peuvent pas être utilisées en condition d'alerte.
- Bien que
SELECT *
soit pris en charge dans la requête parent, il n'est pas pris en charge dans la sous-requête jointe. - La cardinalité de la jointure est limitée à 1 : 100, ce qui signifie qu'une seule clé de jointure ne peut pas correspondre à plus de cent lignes dans le résultat de la sous-requête.
Pour un examen approfondi de la clause JOIN
, veuillez consulter le didacticiel sur les jointures de sous-requêtes NRQL .
Cette requête trouve le nombre d'événements à facettes par browserTransactionName
à partir du type d'événement PageView
, puis par currentUrl
à partir du type d'événement PageAction
. Cela joint les deux types d'événements en fonction des valeurs d'attribut session
communes.
FROM PageViewJOIN ( FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl

Exemple de
INNER JOIN
à facettes
Cet exemple interroge les mêmes données que l'exemple à facettes INNER JOIN
, mais en tant que requête LEFT JOIN
, les résultats incluent des éléments de la table PageView
qui n'ont pas de valeurs session
correspondantes dans les résultats de la sous-requête PageAction
.
FROM PageViewLEFT JOIN ( FROM PageAction SELECT count(*) FACET session, currentUrl) ON sessionSELECT count(*) FACET browserTransactionName, currentUrl

Exemple de
LEFT JOIN
à facettes
Ici, nous effectuons une sous-requête non agrégée, ligne par ligne, avec la requête externe trouvant le nombre d'événements à facettes par currentUrl
à partir du type d'événement PageAction
, puis par browserTransactionNamed
à partir du type d'événement PageView
. Cela joint les deux types d'événements en fonction des valeurs d'attribut session
communes.
Notez que la valeur session
34d5ce6acf4c60be
a deux valeurs browserTransactionName
du type d'événement PageView
de la sous-requête, ajoutant des lignes supplémentaires au résultat.
FROM PageActionLEFT JOIN ( FROM PageView SELECT session, browserTransactionName LIMIT MAX) ON sessionSELECT count(*) FACET session, currentUrl, browserTransactionName LIMIT MAX

Exemple non agrégé
INNER JOIN
SELECT ...LIMIT count...
Utilisez la clause LIMIT
pour contrôler le nombre maximal de valeurs de facette renvoyées par la requête FACET
ou le nombre maximal d'éléments renvoyés par la requête SELECT *
. Cette clause prend une seule valeur entière comme argument. Si la clause LIMIT
n'est pas spécifiée ou si aucune valeur n'est fournie, la limite par défaut est de 10 pour la requête FACET
et de 100 dans le cas de la requête SELECT *
.
La valeur maximale autorisée pour la clause LIMIT
est 5 000. la requête peut utiliser la clause LIMIT MAX
au lieu d'une valeur spécifique, qui correspond automatiquement par défaut à la valeur maximale actuelle. Vous pouvez l'utiliser si vous souhaitez toujours publier le nombre maximum de résultats, même s'il change à l'avenir. Si vous souhaitez que le comportement de votre requête reste inchangé, spécifiez une valeur explicite au lieu d'utiliser LIMIT MAX
.
Cette requête affiche les 20 premiers pays par nombre de sessions et fournit le 95e percentile des temps de réponse pour chaque pays pour les utilisateurs Windows uniquement.
SELECT uniqueCount(session), percentile(duration, 95)FROM PageView WHERE userAgentOS = 'Windows'FACET countryCode LIMIT 20 SINCE YESTERDAY
SELECT ...LIMIT count OFFSET count...
Utilisez la clause OFFSET
avec LIMIT
pour contrôler la partie des lignes renvoyées par la requête SELECT *
ou SELECT column
. Comme la clause LIMIT
, OFFSET
prend une seule valeur entière comme argument. OFFSET
définit le nombre de lignes à ignorer avant que les lignes sélectionnées de votre requête ne soient renvoyées. Ceci est limité par LIMIT
.
OFFSET
les lignes sont ignorées à partir de l'enregistrement le plus récent.
Par exemple, la requête SELECT interestingValue FROM Minute_Report LIMIT 5 OFFSET 1
renvoie les 5 dernières valeurs de Minute_Report
à l’exception de la plus récente.
La clause ORDER BY
vous permet de spécifier comment vous souhaitez trier les résultats de votre requête dans une requête qui sélectionne l'attribut événement par ligne.
Cette requête ordonne deux attributs de transaction spécifiques par durée.
FROM Transaction SELECT appName, duration ORDER BY duration
L'ordre de tri par défaut est croissant, mais cela peut être modifié en ajoutant les modificateurs ASC
ou DESC
.
Cette requête classe tous les attributs de transaction par durée dans l'ordre décroissant.
FROM Transaction SELECT * ORDER BY duration DESC
Important
La clause ORDER BY
ne s'applique pas à la requête FACET
. Il ne faut pas la confondre avec la clause FACET ... ORDER BY
, qui guide la sélection des facettes. Pour plus d'informations, voir FACET ... ORDER BY
.
Aperçu
Nous travaillons toujours sur cette fonctionnalité, mais nous aimerions que vous l'essayiez !
Cette fonctionnalité est actuellement fournie dans le cadre d'un programme d'aperçu conformément à nos politiques de pré-sortie.
FROM Transaction SELECT count(*) WHERE error IS TRUE TIMESERIES PREDICT...
Avec la clause PREDICT
, vous pouvez ajouter des prédictions de tendances de données futures dans des graphiques linéaires basés sur des données historiques. Tenez compte des points suivants lorsque vous utilisez cette clause :
- S'applique uniquement aux requêtes avec une clause
TIMESERIES
. - Utilise
TIMESERIES <time period>
comme intervalle pour les points de données prédits. - Ne prend pas en charge les données d'intervalle de temps métrique en mode Aperçu public.
Important
La clause PREDICT
ne peut pas être utilisée avec la clause COMPARE WITH
ou des agrégations imbriquées dans des sous-requêtes.
Personnalisation
Vous pouvez personnaliser les prédictions en définissant manuellement les hyperparamètres du modèle d'entraînement et en ajoutant les mots-clés USING
et BY
. Pour en savoir plus sur NRQL et sa syntaxe, reportez-vous à la documentation NRQL.
La clause PREDICT dans une requête est livrée avec les comportements par défaut suivants :
Saisonnalité : détecte automatiquement si la saisonnalité est présente dans les données historiques. Si une saisonnalité est détectée, la durée de la saison identifiée est utilisée dans l'algorithme saisonnier Holt-Winters. Si aucune saisonnalité n’est trouvée, il construit un modèle non saisonnier.
Hyperparamètres : définit les hyperparamètres de l’algorithme Holt-Winters en fonction de la saisonnalité et des données historiques.
Fenêtre de prédiction : prédit une plage égale à 20 % de la durée totale spécifiée dans votre fenêtre de requête.
Données historiques pour la formation : utilise les données historiques de la fenêtre de requête actuelle et des deux précédentes pour générer des prédictions.
Intervalle de temps : s'aligne sur l'intervalle de points de données de la série chronologique dans la fenêtre de requête pour garantir la cohérence de la projection des données.
Actuellement, NRQL predictions prend uniquement en charge l'algorithme Holt-Winters, également connu sous le nom de lissage exponentiel, pour les séries chronologiques saisonnières et non saisonnières. Il s’agit d’un algorithme couramment utilisé et standard pour les tâches de prévision et de prédiction. Nous prenons en charge les durées saisonnières horaires, quotidiennes et hebdomadaires pour le modèle Holt-Winters. Les autres hyperparamètres de l’algorithme Holt-Winters sont accessibles et modifiables, mais les valeurs par défaut sont déterminées en fonction des données historiques de votre métrique. Les hyperparamètres peuvent être modifiés en ajoutant holtwinters(<hyperparameter>: <value>)
après la clause PREDICT
dans votre requête. N'importe quelle combinaison des paramètres suivants peut être ajoutée pour modifier le résultat des prédictions :
seasonality
Spécifie si vous souhaitez utiliser une durée de saison connue, une détection automatique de saisonnalité ou aucune saisonnalité (<season length>
,AUTO
,NONE
).<season length>
doit être uninteger unit
de temps (c'est-à-dire,1 day
ou3 hours
)
alpha
Le facteur de lissage de niveau ([0, 1.0]
) où une valeur plus grande donne plus de poids aux valeurs récentesbeta
Le facteur de lissage de tendance ([0, 1.0]
) où une valeur plus grande donne plus de poids aux valeurs récentesgamma
Le facteur de lissage saisonnier ([0, 1.0]
) où une valeur plus grande donne plus de poids aux valeurs récentes- Non compatible avec l'option
seasonality: NONE
car un modèle non saisonnier n'utilise pas l'hyperparamètregamma
. La requête renverra une erreur si vous essayez de spécifierholtwinters(seasonality: NONE, gamma: <value>)
- Non compatible avec l'option
phi
Le paramètre d'amortissement de la tendance ([0.98, 1.0]
) où une valeur plus petite indique un amortissement plus important de la tendance et une prédiction qui s'aplatiraExemple de requête avec modifications d'hyperparamètres :
FROM Transaction SELECT count(*) WHERE error IS TRUE TIMESERIES PREDICT holtwinters(seasonality: 1 hour, alpha: 0.2, beta: 0.5, gamma: 1.5, phi: 0.99)
Utilisez le mot-clé BY
pour définir la période à laquelle vous souhaitez que le modèle prédise. Par exemple, PREDICT BY 3 hours
génère une prédiction de trois heures dans le futur à partir du dernier point de la série chronologique. Assurez-vous que la durée est de integer unit
. Le montant maximum que vous pouvez prédire est de 360 fenêtres temporelles (c'est-à-dire la taille de votre fenêtre de série temporelle multipliée par 360).
Exemple de requête avec le mot-clé BY
qui générera des prédictions pour les 30 prochaines minutes :
FROM Transaction SELECT count(*) WHERE error IS TRUE TIMESERIES PREDICT BY 30 minutes
Utilisez le mot-clé USING
pour spécifier la quantité de données historiques que vous souhaitez utiliser pour entraîner le modèle. Par exemple, PREDICT USING 1 day
utilise la fenêtre de requête avec les données du jour précédent pour former le modèle. Assurez-vous que la durée est un nombre entier (integer unit
). Il existe une limite à la quantité de données pouvant être utilisée pour entraîner un modèle et si vous spécifiez une quantité qui dépasse la limite, vous recevrez un message d'erreur. Cette limite est de 3 660 points de données et vous pouvez déterminer combien de temps cela représente en utilisant la fenêtre de séries chronologiques. Ainsi, par exemple, si vous interrogez une série chronologique avec une fenêtre temporelle d'une minute, vous ne pourrez spécifier qu'une quantité de données d'entraînement allant jusqu'à 3 660 minutes, soit 61 heures ou environ 2,5 jours.
Exemple de requête avec le mot-clé USING
qui utilisera 2 jours de données historiques :
FROM Transaction SELECT count(*) WHERE error IS TRUE TIMESERIES PREDICT USING 2 days
Exemple de requête avec la clause PREDICT
spécifiant des hyperparamètres personnalisés et ajoutant les mots-clés BY
et USING
:
FROM Transaction SELECT count(*) WHERE error IS TRUE TIMESERIES PREDICT holtwinters(seasonality: AUTO, alpha: 0.2) BY 1 hour USING 2 hours
Cette requête définit la saisonnalité sur la détection automatique et met l'accent sur les données historiques en ajustant le facteur de lissage de niveau. Il prédit une heure dans le futur et entraîne le modèle en utilisant la longueur de la fenêtre de requête ainsi que les deux heures précédentes de données historiques.
Pour en savoir plus sur comment et quand vous pouvez utiliser PREDICT
, reportez-vous à Prédictions NRQL.
SHOW EVENT TYPES...
SHOW EVENT TYPES
renverra une liste de tous les types de données présents dans votre compte pour une plage horaire spécifique. Il est utilisé comme première clause dans une requête au lieu de SELECT
.
Important
Dans ce contexte, « types d'événements » fait référence aux types de données auxquels vous pouvez accéder avec une requête NRQL .
Cette requête renverra tous les types de données présents au cours de la dernière journée :
SHOW EVENT TYPES SINCE 1 day ago
SELECT ...SINCE [numerical units AGO | phrase]...
La valeur default est 1 hour ago.
Utilisez la clause SINCE
pour définir le début inclusif d’une plage horaire pour les données renvoyées. Vous pouvez spécifier un fuseau horaire pour la requête mais pas pour les résultats. Les résultats NRQL sont basés sur l'heure de votre système.
Lorsque vous utilisez NRQL, vous pouvez définir un horodatage UTC, une heure relative ou une chaîne DateTime
. Voir Spécification d'une heure.
Voir aussi :
La clause SLIDE BY
prend en charge une fonctionnalité connue sous le nom de fenêtres coulissantes. Avec les fenêtres coulissantes, les données SLIDE BY
sont collectées dans des « fenêtres » de temps qui se chevauchent les unes avec les autres. Ces fenêtres peuvent aider à lisser les graphiques linéaires avec beaucoup de variations dans les cas où l'agrégat mobile (comme une moyenne mobile) est plus important que les agrégats provenant de fenêtres temporelles étroites.
Pour utiliser SLIDE BY
, placez-le dans une requête après la clause TIMESERIES
. Par exemple, cette requête extrait des données dans des fenêtres de 5 minutes avec un intervalle SLIDE BY
de 1 minute, ce qui signifie que chaque fenêtre dure 5 minutes, mais la fenêtre 1 commence à 0 minute, la fenêtre 2 commence à 1 minute, la fenêtre 3 commence à 2 minutes, et ainsi de suite.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY 1 minute
Pour en savoir plus sur comment et quand vous pouvez utiliser SLIDE BY
, voir Créer des graphiques plus fluides avec des fenêtres coulissantes. Ou regardez cette courte vidéo (environ (3:20 minutes).
Vous pouvez utiliser des fenêtres coulissantes en combinaison avec MAX
ou AUTO
. Cependant, MAX
ou AUTO
ne peuvent pas être placés entre TIMESERIES
et SLIDE BY
.
Cette requête décidera automatiquement d'un intervalle de fenêtre SLIDE BY
.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY AUTO
Cette requête définira la fenêtre SLIDE BY
sur la granularité d'intervalle maximale.
SELECT average(duration) FROM Transaction TIMESERIES 5 minutes SLIDE BY MAX
Important
La valeur SLIDE BY
déterminée par AUTO
ou MAX
peut produire un intervalle d'étape supérieur à la taille de la fenêtre, ce qui peut entraîner des écarts et des résultats inattendus.
SELECT ...TIMESERIES integer units...
Utilisez la clause TIMESERIES
pour renvoyer des données sous forme de série chronologique répartie sur une période donnée. Étant donné que TIMESERIES
est utilisé pour déclencher certains graphiques, il n’y a pas de valeur par défaut.
Pour indiquer la plage horaire, utilisez integer units
. Par exemple:
TIMESERIES 1 minute
TIMESERIES 30 minutes
TIMESERIES 1 hour
TIMESERIES 30 seconds
TIMESERIES
peut être combiné avec des arguments tels que MAX
, AUTO
et SLIDE BY
pour personnaliser davantage les résultats de la requête, comme indiqué dans les exemples ci-dessous.
Important
Pour des fonctions telles que average()
ou percentile()
, une grande fenêtre d'agrégation peut avoir un effet de lissage significatif sur la valeur hors norme. Ceci est vrai que la requête utilise ou non des fenêtres glissantes.
La valeur fournie indique les unités utilisées pour décomposer le graphique. Par exemple, pour présenter un graphique d'une journée montrant des incréments de 30 minutes :
SELECT ... SINCE 1 day AGO TIMESERIES 30 minutes
TIMESERIES
peut également être défini sur AUTO
, ce qui divisera votre graphique en un nombre raisonnable de divisions. Par exemple, un graphique journalier sera divisé en intervalles de 30 minutes et un graphique hebdomadaire sera divisé en intervalles de 6 heures.
Cette requête renvoie des données sous forme de graphique linéaire affichant le 50e et le 90e percentile du temps de transaction côté client pendant une semaine avec un point de données toutes les 6 heures.
SELECT average(duration), percentile(duration, 50, 90)FROM PageView SINCE 1 week AGO TIMESERIES AUTO
Vous pouvez définir TIMESERIES
sur MAX
, ce qui ajustera automatiquement votre fenêtre temporelle au nombre maximal d'intervalles autorisés pour une période donnée. Cela vous permet de mettre à jour vos fenêtres temporelles sans avoir à mettre à jour manuellement vos compartiments TIMESERIES
et garantit que votre fenêtre temporelle est divisée en un nombre maximal d'intervalles autorisés. Le nombre maximum de TIMESERIES
buckets qui seront renvoyés est 366.
Par exemple, la requête suivante crée des intervalles de 4 minutes, ce qui correspond au plafond d’un graphique journalier.
SELECT average(duration) FROM Transaction SINCE 1 day ago TIMESERIES MAX
SELECT ...UNTIL integer units AGO...
Utilisez la clause UNTIL
pour définir la fin de la plage horaire à laquelle s'adresser. La valeur est exclusive, ce qui signifie que la plage horaire ira jusqu'à l'instant spécifié dans le temps, mais ne l'inclura pas.
La valeur default est NOW. Utilisez uniquement UNTIL
pour spécifier un point de terminaison autre que celui par défaut.
Voir aussi :
Utilisez la clause WHERE
pour filtrer les résultats. NRQL renvoie les résultats qui remplissent les conditions que vous spécifiez dans la clause.
SELECT function(attribute) ...WHERE attribute [operator 'value' | IN ('value' [, 'value']) | IS [NOT] NULL ][AND|OR ...]...
- Si vous spécifiez plusieurs conditions, séparez les conditions par les opérateurs
AND
ouOR
.
Operators that the | Description |
---|---|
| NRQL accepte les opérateurs de comparaison standard. Exemple: Pour les attributs avec des valeurs booléennes, utilisez |
| Utilisé pour définir une intersection de deux conditions. |
| Utilisé pour définir une union de deux conditions. |
| Détermine si un attribut a une valeur nulle. |
| Détermine si un attribut n'a pas de valeur nulle. |
| Détermine si un attribut a une valeur booléenne de |
| Détermine si un attribut a une valeur booléenne de |
| Détermine si la valeur de chaîne d'un attribut est dans un ensemble spécifié. L’utilisation de cette méthode produit de meilleures performances que l’enchaînement de plusieurs clauses Exemple:
|
| Détermine si la valeur de chaîne d'un attribut n'est pas dans un ensemble spécifié. L’utilisation de cette méthode produit de meilleures performances que l’enchaînement de plusieurs clauses Les valeurs doivent être entre parenthèses, séparées par des virgules. Par exemple:
|
| Détermine si un attribut contient une sous-chaîne spécifiée. L'argument de chaîne pour l'opérateur Gardez à l’esprit les points suivants :
|
| Détermine si un attribut ne contient pas une sous-chaîne spécifiée. |
| Détermine si un attribut contient une sous-chaîne Regex spécifiée. Utilise la syntaxe RE2. Examples:
|
| Détermine si un attribut ne contient pas de sous-chaîne Regex spécifiée. Utilise la syntaxe RE2. |
Cette requête renvoie les temps de réponse du navigateur pour les pages avec checkout
dans l'URL de l'utilisateur Safari aux États-Unis et au Canada au cours des dernières 24 heures.
SELECT histogram(duration, 50, 20) FROM PageViewWHERE countryCode IN ('CA', 'US') AND userAgentName='Safari' AND pageUrl LIKE '%checkout%'SINCE 1 day ago
Pour plus d'informations sur l'interrogation des données métriques, voir requête métriques.
FROM ...WITH function(attribute) AS varSELECT var...
Utilisez la clause WITH ... AS
pour définir des variables NRQL afin de stocker des valeurs sous forme de variables pouvant être référencées n'importe où dans la requête. Quelques règles et conseils :
- La clause
WITH ... AS
peut être placée avant, entre ou directement après la clauseFROM
ouSELECT
- Seules les fonctions par ligne (par exemple,
capture()
) peuvent être définies comme variable. les fonctions d'agrégation, telles queaverage()
, ne sont pas prises en charge. - Un seul
WITH
peut être utilisé, mais vous pouvez utiliser plusieurs variables NRQL à condition qu'elles soient séparées par une virgule. - Si une variable NRQL définie utilise le même nom qu'un attribut existant, la variable aura la priorité.
- Les noms de variables ne peuvent pas inclure le symbole
%
.
Important
Les règles d'événement à métriques ne prennent pas en charge la clause WITH ... AS
dans la requête NRQL .
Voici quelques exemples de requêtes :
FROM TransactionWITH duration * 1000 AS millisecSELECT millisec
FROM LogWITH aparse(message, '%itemId":"*","unitPrice":*}%') AS (itemId, unitPrice)SELECT itemId, unitPrice
En savoir plus sur l’analyse d’ancrage (aparse()
).
Dans cet exemple, une variable NRQL, unitPrice
, est utilisée pour créer une autre variable, unitPriceNum
, convertissant la chaîne extraite en nombre. Les variables sont ensuite utilisées dans les clauses SELECT
, WHERE
et 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)...
Utilisez la clause WITH TIMEZONE
pour sélectionner un fuseau horaire pour une date ou une heure dans la requête pour laquelle aucun fuseau horaire n'a déjà été spécifié.
Si vous incluez la clause WITH TIMEZONE
sans spécifier de fuseau horaire dans une date et une heure, les clauses since
et until
restent dans le fuseau horaire fourni.
Si vous n'incluez pas la clause WITH TIMEZONE
, mais que vous incluez un fuseau horaire dans une chaîne de date et d'heure, votre fuseau horaire de chaîne de date et d'heure est conservé.
Important
Le fuseau horaire par défaut est toujours UTC s'il n'est pas spécifié. Les valeurs d'horodatage brutes (telles que vues dans la vue JSON) dans les résultats sont toujours UTC. L'UI affiche les résultats dans le fuseau horaire que vous avez spécifié dans les paramètres de votre compte. Un fuseau horaire dans une chaîne d'horodatage fonctionne toujours. Elle remplace la zone WITH TIMEZONE
.
Par exemple, la clause de requête SINCE Monday UNTIL Tuesday WITH TIMEZONE 'America/New_York'
renvoie les données enregistrées du lundi à minuit, heure américaine/New York, jusqu'au mardi à minuit, heure américaine/New York.
Voici quelques exemples de clauses de durée de requête :
Aucun fuseau horaire dans la chaîne de date et d'heure à l'aide de la clause
WITH TIMEZONE
:SINCE today UNTIL '2022-05-19T12:00' WITH TIMEZONE 'America/Los_Angeles'Cela se résout comme
"beginTime": "2022-05-19T07:00:00Z"
et"endTime": "2022-05-19T19:00:00Z"
.Fuseau horaire dans la chaîne de date et d'heure, sans utiliser la clause
WITH TIMEZONE
:SINCE today UNTIL '2022-05-19T12:00-0500'Cela se résout comme
"beginTime": "2022-05-19T00:00:00Z"
et"endTime": "2022-05-19T17:00:00Z"
.Fuseau horaire dans la chaîne de date et d'heure, en utilisant la clause
WITH TIMEZONE
America/Los Angeles, qui est -0700 pendant l'heure d'été :SINCE today UNTIL '2022-05-19T12:00-0500' WITH TIMEZONE 'America/Los_Angeles'Cela se résout comme
"beginTime": "2022-05-19T07:00:00Z"
et"endTime": "2022-05-19T19:00:00Z"
.
Consultez la liste des identifiants de zone disponibles.
Voir Définir la plage horaire sur le dashboard et les graphiques pour obtenir des informations détaillées et des exemples.
requête métrique de données
Les données métriques sont plus complexes que les autres types de données. Il existe des astuces spécifiques pour bien l'interroger. Nous avons deux types de données métriques, chacune avec ses propres directives de requête :
- requêtes dimensionnelles métriques, qui sont rapportées par notre API métrique et par certaines de nos solutions qui utilisent cette API (par exemple, notre intégration Dropwizard ou Micrometer).
- requête intervalle de temps métrique data, qui est notre type de données métriques d'origine signalé par notre APM, monitoring des applications mobiles, et .
Pour plus de détails sur la façon dont nous rapportons les données métriques, consultez Types de données métriques.
Fonctions
Dans cette section, nous expliquons les fonctions NRQL , à la fois les fonctions agrégatrices et les fonctions non agrégatrices.
fonctions d'agrégateur
Vous pouvez utiliser les fonctions d'agrégation pour filtrer et agréger des données. Quelques conseils pour les utiliser :
- Consultez les didacticiels New Relic University pour la requête de filtre, la requête Apdex et la requête centile. Ou, accédez au cours en ligne complet Écriture de requêtes NRQL .
- Si vous utilisez une fonction d'agrégation plusieurs fois dans la même requête (par exemple,
SELECT median(one_metric), median(another_metric)
), cela peut entraîner des problèmes d'affichage des résultats. Pour résoudre ce problème, utilisez la fonctionAS
. Par exemple:SELECT median(one_metric) AS 'med-a', median(another_metric) AS 'med-b' - Le type de données « coercition » n'est pas pris en charge. En savoir plus sur les fonctions de conversion de type disponibles.
- Pour savoir comment afficher les résultats au fil du temps, voir Grouper les résultats au fil du temps.
Exemples :
SELECT histogram(duration, 10, 20) FROM PageView SINCE 1 week ago
Utilisez la fonction aggregationendtime()
pour renvoyer l’heure de l’agrégation concernée. Plus précisément, pour un agrégat donné, la fonction aggregationendtime()
fournit l’horodatage de la fin de la période de cet agrégat. Par exemple, dans une requête de série chronologique, pour un point de données qui englobe une heure de données, la fonction renverrait l'horodatage de la fin de cette période horaire.
Utilisez la fonction apdex
pour renvoyer un score Apdex pour une seule transaction ou pour toutes vos transactions. Le score par défaut Apdex est de 0,5 seconde. L'attribut peut être n'importe quel attribut basé sur le temps de réponse, tel que duration
ou backendDuration
. L'argument t:
définit un seuil Apdex T
dans la même unité de temps que l'attribut choisi. Par instance, si l'attribut est mesuré en secondes, t
sera un seuil en secondes.
Le score Apdex renvoyé par la fonction apdex()
est basé uniquement sur le temps d'exécution. Il ne tient pas compte des erreurs APM. Si une transaction contient une erreur mais se termine dans Apdex T ou moins, cette transaction sera considérée comme satisfaisante par la fonction apdex ()
.
Si vous avez défini des attributs personnalisés, vous pouvez filtrer en fonction de ces attributs. Par exemple, vous pouvez monitorer l'Apdex pour un client particulièrement important :
SELECT apdex(duration, t: 0.4) FROM TransactionWHERE customerName='ReallyImportantCustomer' SINCE 1 day ago
Utilisez l'attribut name
pour renvoyer un score pour une transaction spécifique ou renvoyez un Apdex global en omettant name
. Cette requête renvoie un score Apdex pour la transaction Controller/notes/index au cours de la dernière heure :

La fonction apdex
renvoie un score Apdex qui mesure la satisfaction des utilisateurs avec votre site. Les arguments sont un attribut de temps de réponse et un seuil Apdex T en secondes.
SELECT apdex(duration, t: 0.5) from TransactionWHERE name='Controller/notes/index' SINCE 1 hour ago
Cet exemple de requête renvoie un Apdex global pour l'application au cours des trois dernières semaines :
SELECT apdex(duration, t: 0.08) FROM Transaction SINCE 3 week ago
Utilisez la fonction average()
pour renvoyer la valeur moyenne d'un attribut. Il prend un seul nom d'attribut comme argument. Si une valeur de l'attribut n'est pas numérique, elle sera ignorée lors de l'agrégation. Si les données correspondant aux conditions de la requête ne sont pas trouvées ou si aucune valeur numérique n'est renvoyée par la requête, elle renverra une valeur nulle.
La fonction bucketPercentile()
est l'équivalent NRQL de la fonction histogram_quantile
dans Prometheus. Il est destiné à être utilisé avec des données métriques dimensionnelles. Au lieu du quantile, New Relic renvoie le percentile, qui est le quantile * 100.
Utilisez la fonction bucketPercentile()
pour calculer le quantile à partir des données d'histogramme au format Prometheus.
Il prend le nom du bucket comme argument et indique le centile le long des limites du bucket :
SELECT bucketPercentile(duration_bucket) FROM Metric SINCE 1 day ago
En option, vous pouvez ajouter des spécifications percentile comme argument :
SELECT bucketPercentile(duration_bucket, 50, 75, 90) FROM Metric SINCE 1 day ago
Étant donné que plusieurs métriques sont utilisées pour constituer les données de l'histogramme Prometheus , vous devez interroger des métriques Prometheus spécifiques en termes de <basename>
associé.
Par exemple, pour calculer le centile à partir d'un histogramme Prometheus , avec <basename>
prometheus_http_request_duration_seconds
en utilisant NRQL, utilisez bucketPercentile(prometheus_http_request_duration_seconds_bucket, 50)
. Notez comment _bucket
est ajouté à la fin de <basename>
comme suffixe.
Consultez la documentation Prometheus.io pour plus d'informations.
Utilisez la fonction cardinality()
pour obtenir le nombre de combinaisons de toutes les dimensions (attribut) sur une métrique.
Il faut trois arguments, tous facultatifs :
- nom de la métrique : si présent,
cardinality()
calcule uniquement la métrique spécifiée. - Inclure : si elle est présente, la liste d'inclusion restreint le calcul de cardinalité à ces attributs.
- Exclure : si elle est présente, la liste d'exclusion entraîne l'ignorance de ces attributs dans le calcul de cardinalité.
cdfPercentage()
est une implémentation de la fonction de distribution cumulative, renvoyant des pourcentages de valeurs attribute
dont la valeur est inférieure ou égale à un ou plusieurs thresholds
.
cdfPercentage()
agrégats sur son argument attribute
, qui peut être soit un attribut numérique, soit un attribut de métrique de distribution. Les types mixtes dans une requête sont acceptés. Les autres types (tels que les chaînes) sont ignorés. Jusqu'à 10 seuils peuvent être spécifiés.
Cette requête renvoie le pourcentage d'événement où firstPaint
est inférieur ou égal à 0,5 seconde, et le pourcentage d'événement où firstPaint
est inférieur ou égal à 1 seconde.
FROM PageView SELECT cdfPercentage(firstPaint, 0.5, 1.0)
Utilisez la fonction count()
pour renvoyer le nombre d’enregistrements disponibles. Il prend un seul argument ; soit *
, un attribut ou une valeur constante. Actuellement, il suit le comportement SQL typique et compte tous les enregistrements qui ont des valeurs pour son argument.
Étant donné que count(*)
ne nomme pas d'attribut spécifique, les résultats seront formatés dans le format « humaniser » par défaut.
derivative()
trouve le taux de changement pour un ensemble de données donné. Le taux de variation est calculé à l’aide d’une régression linéaire des moindres carrés pour approximer la dérivée. Étant donné que ce calcul nécessite la comparaison de plusieurs points de données, si un seul point de données est inclus dans la plage d'évaluation, le calcul est indéterminé et ne fonctionnera pas, ce qui donnera une valeur null
.
Le time interval
est la période pour laquelle le taux de variation est calculé. Par exemple, derivative(attributeName, 1 minute)
renverra le taux de variation par minute.
Utilisez la fonction earliest()
pour renvoyer la valeur la plus ancienne d’un attribut sur la plage de temps spécifiée.
Il faut un seul argument.
S'il est utilisé conjointement avec un FACET
, il renverra la valeur la plus ancienne d'un attribut pour chacune des facettes résultantes.
Cette requête renvoie le code de pays le plus ancien pour chaque agent utilisateur à partir de l'événement PageView
.
SELECT earliest(countryCode) FROM PageView FACET userAgentName
Utilisez la fonction filter()
pour limiter les résultats de l'une des fonctions d'agrégation dans votre instruction SELECT
. Vous pouvez utiliser filter()
en conjonction avec FACET
ou TIMESERIES
. Le filtre n'est utile que lors de la sélection de plusieurs agrégations différentes telles que :
SELECT filter(sum(x), WHERE attribute='a') AS 'A', filter(sum(x), WHERE attribute='b') AS 'B' ...
Sinon, il est préférable d’utiliser simplement la clause standard WHERE
.
Vous pouvez utiliser filter()
pour comparer les articles achetés dans un ensemble de transactions pour ceux qui utilisent un code d'offre par rapport à ceux qui ne l'utilisent pas :

Utilisez la fonction filter()
pour limiter les résultats de l'une des fonctions d'agrégation dans votre instruction SELECT
.
Utilisez la fonction funnel()
pour générer un graphique entonnoirs. Il prend un attribut comme premier argument. Vous spécifiez ensuite les étapes sous forme de clauses WHERE
(avec des clauses AS
facultatives pour les étiquettes) séparées par des virgules.
Pour plus de détails et d'exemples, consultez la documentation des entonnoirs.
Utilisez la fonction histogram()
pour générer un histogramme, utile pour visualiser la distribution d'un ensemble de données. Il divise l'ensemble de données en un nombre spécifié de compartiments et compte le nombre de points de données qui tombent dans chaque compartiment.
Arguments:
attribute
Le premier argument est obligatoire et spécifie l’attribut pour lequel compter les valeurs qui se situent dans chaque plage de compartiments d’histogramme.width:
Indique la largeur de la plage d'échantillons. La valeur maximale de la plage est la valeur de l'argumentstart
plus cette valeurwidth
.- Lors de l'utilisation d'arguments positionnels (non étiquetés),
width
est le deuxième argument. - Défaut:
10
- Lors de l'utilisation d'arguments positionnels (non étiquetés),
buckets:
Nombre total de buckets (entre1
et500
, inclus).- Lors de l'utilisation d'arguments positionnels (non étiquetés),
buckets
est le troisième argument. - Défaut:
40
- Lors de l'utilisation d'arguments positionnels (non étiquetés),
start:
Le début de la plage de l'histogramme.- Lors de l'utilisation d'arguments positionnels (non étiquetés),
start
est le quatrième argument. - Défaut:
0
Note
Les valeurs qui se situent en dehors de la plage d’histogramme définie sont incluses dans le premier ou le dernier compartiment. Le premier décompte comprendra les éléments qui sont plus petits que la plage de l'histogramme, et le dernier décompte comprendra les éléments qui sont plus grands que la plage de l'histogramme. Pour exclure ces valeurs des résultats de l'histogramme, incluez un filtre dans la clause where de la requête. (Exemple :
WHERE attribute >= [start] AND attribute <= [start + width]
)Cette requête génère un histogramme de temps de réponse allant jusqu'à 10 secondes sur 40 buckets. Cela signifie que chaque bucket couvre une plage de valeurs de 0,25 seconde. (10 / 40 = 0,25). Toutes les valeurs de durée supérieures à 10 secondes sont incluses dans le dernier compartiment. Si la durée pouvait être inférieure à zéro, ces valeurs seraient incluses dans le premier compartiment.
SELECT histogram(duration) FROM PageView SINCE 1 week agoCes requêtes équivalentes aboutissent à un histogramme de temps de réponse allant jusqu'à 5 secondes sur 10 buckets.
SELECT histogram(duration, 5, 10) FROM PageView SINCE 1 week agoSELECT histogram(duration, width: 5, buckets: 10) FROM PageView SINCE 1 week agoCes requêtes équivalentes aboutissent à un histogramme de temps de réponse allant de 1 à 4 secondes sur 3 buckets.
Voici une répartition des buckets :
Seau 1
Seau 2
Seau 3
Gamme de godets
1 à 2
2 à 3
3 à 4
Valeurs comptées
< 2
≥ 2 et < 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()
accepte les compartiments d'histogramme Prometheus :SELECT histogram(duration_bucket, 10, 20)FROM Metric SINCE 1 week agohistogram()
accepte la métrique de distribution comme entrée :SELECT histogram(myDistributionMetric, 10, 20)FROM Metric SINCE 1 week agoUtilisez
histogram()
avec une clauseFACET
pour générer un graphique de carte thermique :SELECT histogram(duration)FROM PageView FACET appName SINCE 1 week ago- Lors de l'utilisation d'arguments positionnels (non étiquetés),
L'utilisation de keyset()
vous permettra de voir tous les attributs d'un type de données donné sur une plage de temps donnée. Il n'y a pas d'arguments à cela. Il renvoie une structure JSON contenant des groupes de clés de type chaîne, de clés de type numérique, de clés de type booléen et toutes les clés.
Cette requête renvoie l'attribut trouvé pour PageView
événement du dernier jour :
SELECT keyset() FROM PageView SINCE 1 day ago
Utilisez la fonction latest()
pour renvoyer la valeur la plus récente d’un attribut sur une plage de temps spécifiée.
Il faut un seul argument.
Si utilisé conjointement avec un FACET
, il renverra la valeur la plus récente d'un attribut pour chacune des facettes résultantes.
Cette requête renvoie le code de pays le plus récent pour chaque agent utilisateur de l'événement PageView
.
SELECT latest(countryCode) FROM PageView FACET userAgentName
Utilisez la fonction latestrate()
pour renvoyer le taux de variation d’une valeur en fonction des 2 derniers points de données. Il prend l'attribut en question comme premier argument et l'unité de temps pour le taux résultant comme deuxième argument. La fonction renvoie un résultat en unités de change in attribute/time interval
.
Cette fonction peut être utile pour fournir le taux de changement le plus récent d'un attribut afin de voir les tendances de pointe.
Cette requête renvoie le taux de changement de durée en fonction des 2 derniers points de données. Il sera renvoyé en unités de duration/second
en raison de l'argument 1 SECOND
.
SELECT latestrate(duration, 1 SECOND) FROM PageView
Utilisez la fonction max()
pour renvoyer la valeur maximale enregistrée d’un attribut numérique sur la plage de temps spécifiée. Il prend un seul nom d'attribut comme argument. Si une valeur de l'attribut n'est pas numérique, elle sera ignorée lors de l'agrégation. Si les données correspondant aux conditions de la requête ne sont pas trouvées ou si aucune valeur numérique n'est renvoyée par la requête, elle renverra une valeur nulle.
Utilisez la fonction median()
pour renvoyer la médiane ou le 50e percentile d'un attribut. Pour plus d'informations sur la requête percentile , voir percentile()
.
Cette requête générera un graphique linéaire pour la valeur médiane.
SELECT median(duration) FROM PageView TIMESERIES AUTO
Médiane dans une clause JOIN
:
Étant donné que la médiane est simplement un raccourci pour
percentile(attribute, 50)
, un résultatmedian()
issu d'une sous-requête jointe est un type de données composé, qui mappe le 50e percentile à sa valeur calculée.Pour référencer la valeur médiane réelle dans la requête externe, vous pouvez utiliser la fonction
getField()
. Notez que la clé mappée est une représentation sous forme de chaîne d'une valeur double, donc pourmedian()
c'est'50.0'
.
Utilisez la fonction min()
pour renvoyer la valeur minimale enregistrée d’un attribut numérique sur la plage de temps spécifiée. Il prend un seul nom d'attribut comme argument. Si une valeur de l'attribut n'est pas numérique, elle sera ignorée lors de l'agrégation. Si les données correspondant aux conditions de la requête ne sont pas trouvées ou si aucune valeur numérique n'est renvoyée par la requête, elle renverra une valeur nulle.
Utilisez la fonction percentage()
pour renvoyer le pourcentage d'un ensemble de données cible qui correspond à une condition.
Cette fonction attend exactement deux arguments (les arguments après les deux premiers sont ignorés). Le premier argument nécessite une fonction agrégateur contre l'attribut souhaité. Si l'attribut n'est pas numérique, cette fonction renvoie une valeur de 100 %. Le deuxième argument nécessite une clause WHERE
.
FROM Transaction SELECT percentage(count(*), WHERE error is true ) AS 'Error Percent' WHERE host LIKE '%west%' EXTRAPOLATE
Utilisez la fonction percentile()
pour renvoyer la valeur approximative d'un attribut à un percentile donné. Il nécessite un attribut et peut prendre n’importe quel nombre d’arguments représentant des points percentile . La fonction percentile()
permet d'afficher le centile avec jusqu'à trois chiffres après la virgule décimale, offrant ainsi une plus grande précision. le seuil de centile peut être spécifié sous forme de valeurs décimales, mais sachez que pour la plupart des ensembles de données, les centiles plus proches de 0,1 l'un de l'autre ne seront pas résolus.

exemples d'affichage de centiles
Utilisez TIMESERIES
pour générer un graphique linéaire avec un centile mappé au fil du temps.
Omettez
TIMESERIES
pour générer un panneau d’affichage et une feuille d’attributs affichant les valeurs agrégées pour le centile.Si aucun percentile n'est répertorié, la valeur par défaut est le 95e percentile. Pour renvoyer uniquement la valeur du 50e percentile, la médiane, vous pouvez également utiliser
median()
.Cette requête générera un graphique linéaire avec des lignes pour les 5e, 50e et 95e percentile.
SELECT percentile(duration, 5, 50, 95) FROM PageView TIMESERIES AUTOpercentile dans une clause
JOIN
:Lorsque vous utilisez un centile dans une sous-requête jointe, veuillez noter que les résultats de la sous-requête sont un type de données composé, qui mappe chaque percentile à sa valeur calculée.
Pour référencer l’une des valeurs percentile individuelles dans la requête externe, vous pouvez utiliser la fonction
getField()
. Notez que la clé mappée est une représentation sous forme de chaîne d'une valeur double, vous devez donc ajouter.0
aux entiers. Par exemple, la clé du 95e percentile est'95.0'
.
predictLinear()
est une extension de la fonction derivative()
. Il utilise une méthode similaire à la régression linéaire des moindres carrés pour prédire les valeurs futures d'un ensemble de données.
- Le
time interval
indique jusqu'où la requête regardera dans le futur. Par exemple,predictLinear(attributeName, 1 hour)
est une prédiction linéaire d'une heure dans le futur de la fenêtre temporelle de la requête. - En général,
predictLinear()
est utile pour les valeurs en croissance continue comme l'espace disque ou les prévisions sur les grandes tendances. - Étant donné que
predictLinear()
est une régression linéaire, la familiarité avec l’ensemble de données interrogé permet de garantir des prévisions précises à long terme. - Tout ensemble de données qui croît de manière exponentielle, logarithmique ou par d’autres moyens non linéaires ne sera probablement efficace que dans les prédictions à très court terme.
- New Relic recommande de ne pas utiliser
predictLinear
dans la requêteTIMESERIES
. Cela est dû au fait que chaque bucket effectuera une prédiction individuelle en fonction de sa période relative dans la requête, ce qui signifie qu'une telle requête n'affichera pas les prédictions à partir de la fin de la série chronologique.
Utilisez la fonction rate()
pour visualiser la fréquence ou le taux d’une requête donnée par intervalle de temps. Par exemple, vous souhaiterez peut-être connaître le nombre de pages vues par minute sur une période d'une heure ou le nombre de sessions uniques sur votre site par heure sur une période d'une journée.
Utilisez
TIMESERIES
pour générer un graphique linéaire avec les taux cartographiés au fil du temps.Omettez
TIMESERIES
pour générer un panneau d'affichage affichant une valeur de taux unique moyennée au fil du temps.Voici une requête de base qui générera un graphique linéaire indiquant le taux de débit des transactions APM par 10 minutes au cours des 6 dernières heures :
SELECT rate(count(*), 10 minute) FROM TransactionSINCE 6 hours ago TIMESERIESVoici une courte vidéo (3:21 minutes) expliquant comment utiliser
rate
pour comparer des données sur différentes fenêtres temporelles :
Utilisez la fonction stdvar()
pour renvoyer la variance standard d’un attribut numérique sur la plage de temps spécifiée.
Il faut un seul argument. Si l'attribut n'est pas numérique, il renverra une valeur de zéro.
Utilisez la fonction sum()
pour renvoyer la somme des valeurs enregistrées d’un attribut numérique sur la plage de temps spécifiée.
Il faut un seul argument. Si l'attribut n'est pas numérique, il renverra une valeur de zéro.
Utilisez la fonction uniqueCount()
pour renvoyer le nombre de valeurs uniques enregistrées pour un attribut sur la plage de temps spécifiée.
Conseil
Pour optimiser les performances des requêtes, cette fonction renvoie des résultats approximatifs pour les requêtes qui inspectent 256 valeurs uniques ou plus.
Utilisez la fonction uniques()
pour renvoyer une liste de valeurs uniques enregistrées pour un attribut sur la plage de temps spécifiée. Lorsqu'il est utilisé avec la clause facet
, une liste de valeurs d'attribut uniques sera renvoyée pour chaque valeur de facette.
Le paramètre limit
est facultatif. Lorsque cette valeur n'est pas fournie, la limite par défaut de 1 000 valeurs d'attribut uniques par facette est appliquée. Vous pouvez spécifier une valeur limit
différente, jusqu'à un maximum de 10 000. La fonction uniques()
renverra le premier ensemble de valeurs d'attribut uniques découvertes, jusqu'à ce que la limite soit atteinte. Par conséquent, si vous avez 5 000 valeurs d'attribut uniques dans votre ensemble de données et que la limite est définie sur 1 000, l'opérateur renverra les 1 000 premières valeurs uniques qu'il découvre, quelle que soit leur fréquence.
Le nombre maximal de valeurs pouvant être renvoyées dans un résultat de requête est le produit de la limite uniques()
multiplié par la limite facet
. Dans la requête suivante, le nombre maximal théorique de valeurs pouvant être renvoyées est de 5 millions (5 000 x 1 000).
En fonction de l'ensemble de données interrogé et de la complexité de la requête, les limites de protection de la mémoire peuvent empêcher l'exécution d'une requête très volumineuse.
From Transaction SELECT uniques(host,5000) FACET appName LIMIT 1000
Si vous souhaitez connaître les combinaisons uniques d'une poignée d'attributs, vous pouvez structurer une requête au format SELECT uniques(tuple(x, y, ... z)) ...
pour obtenir tous les tuples uniques de valeurs, afin de maintenir leur relation. Dans la requête suivante, tuple
est utilisé sur index
et cellName
ensemble pour trouver des éléments uniques où ces deux valeurs apparaissent en combinaison.
FROM NodeStatus SELECT uniques(tuple(index, cellName), 5)
Fonctions non-agrégatrices
Utilisez des fonctions non-agrégateur pour les données non numériques dans la requête NRQL .
Utilisez la fonction accountId()
pour renvoyer l’ ID de compte associé aux données de requête. Cette fonction ne prend aucun argument. Voici quelques exemples de requêtes :
Cette requête renvoie l'ID de compte associé à chaque événement Transaction
renvoyé :
SELECT accountId() FROM Transaction SINCE 1 day ago
Cette requête renvoie le nombre d'événements Transaction
du dernier jour associés à chaque ID de compte :
SELECT count(*) FROM Transaction FACET accountId() SINCE 1 day ago
Cette requête renvoie le nombre d'événements Transaction
au cours de la dernière journée où l'ID de compte est spécifiquement l'un des 1
, 2
ou 3
:
SELECT count(*) FROM Transaction WHERE accountId() IN (1,2,3) SINCE 1 day ago
Utilisez la fonction d'analyse d'ancrage, aparse()
pour extraire des valeurs spécifiques d'une chaîne. Il s'agit d'une alternative à capture()
.
aparse()
prend deux arguments :
Un attribut de chaîne
Une chaîne de modèle avec des chaînes d'ancrage et des caractères d'extraction. Par exemple, vous pouvez utiliser
www.*.com
pour extraire le domaine d’une URL.Lors de l'utilisation de
aparse()
, la chaîne de modèle doit contenir des ancres, commewww.
et.com
ci-dessus, pour identifier l'emplacement de la chaîne extraite prévue, notée par*
.aparse()
utilise les caractères suivants dans les chaînes de modèle :%
: Caractère générique non capturant, comme vous le verrez dans la clauseLIKE
*
: Capture de caractères génériques, similaire à l'utilisation de la capture d'expressions régulièresEn pratique, les chaînes d'ancrage apparaissent souvent au milieu d'un attribut de chaîne, et non au début ou à la fin.
Dans ce cas, utilisez le caractère générique
%
pour ignorer les valeurs indésirables : par exemple,%www.*.com%
.Comme
capture()
, tous les résultats deaparse()
sont des chaînes. Pour utiliser ces résultats dans des fonctions mathématiques, ils doivent être convertis avec la fonctionnumeric()
.Remarque :
aparse()
n'est pas sensible à la casse.FROM PageViewSELECT aparse(browserTransactionName, 'website.com/*')Pour extraire une valeur du milieu d'une chaîne, utilisez le caractère générique non capturant,
%
, au début et à la fin de la chaîne de modèle. Par exemple:FROM LogSELECT count(*)FACET aparse(string, '%"itemId":"*"%')Lors de l’extraction de plusieurs valeurs en tant que variables, notez que l’ordre est important. Par exemple:
FROM LogWITH aparse(string, 'POST: * body: {"itemId":"*","unitPrice":*}\n') AS (url, itemId, unitPrice)SELECT url, itemId, unitPricePour en savoir plus sur les variables, consultez Variables NRQL.
Utilisez la fonction blob()
sur un attribut de type blob pour renvoyer une chaîne codée en base 64 de cet attribut.
Cette fonction présente les restrictions suivantes :
la requête contenant des appels à
blob()
a une valeur maximale deLIMIT
de 20blob()
ne peut pas être appelé dans la clauseWHERE
d'une requêteblob()
ne peut pas être utilisé dans une requête à facettes ou une requête de séries chronologiquesPour plus d'informations sur la manière dont cela est utilisé dans le logging, voir Rechercher des données dans les logs longs (blobs).
Pour décoder un blob codé en base 64, consultez la fonction
decode()
.SELECT message, blob(`newrelic.ext.message`)FROM Log WHERE newrelic.ext.message IS NOT NULL
Utilisez la fonction buckets()
pour regrouper les données divisées par une clause FACET
dans des compartiments basés sur des plages. Vous pouvez effectuer un regroupement en fonction de n'importe quel attribut stocké sous forme de valeur numérique dans la base de données New Relic.
Il faut trois arguments :
Nom de l'attribut
Valeur maximale de la plage d'échantillons (toute valeur hors norme apparaîtra dans le compartiment final)
Nombre total de seaux
Pour plus d’informations et d’exemples, voir Diviser vos données en compartiments.
Utilisez la fonction concat()
pour renvoyer la chaîne résultant de la concaténation de ses arguments.
Jusqu'à 20 arguments de types numériques, booléens, uplet ou éventail peuvent être fournis. Les arguments nuls et les arguments de types non pris en charge sont ignorés. Si aucun argument n'est fourni, le résultat est une chaîne vide.
L'argument de précision facultatif peut être fourni afin de limiter le nombre de décimales incluses lors de la concaténation de valeurs numériques à virgule flottante.
La chaîne résultante peut avoir une longueur maximale de 4096 caractères.
Cette requête renvoie les durées du backend et du réseau à partir de l'événement PageView
, formatées avec deux décimales et des étiquettes, sous la forme d'une seule chaîne.
FROM PageView SELECT concat('Backend Duration: ', backendDuration, ', Network Duration: ', networkDuration, precision: 2)
Cela renverrait des réponses dans un format comme :
Backend Duration: 0.69, Network Duration: 0
Cette requête renvoie la durée moyenne de configuration de la connexion à partir de l'événement PageView
, facettée par une chaîne composée de la ville, de la région et du pays de l'utilisateur.
FROM PageView SELECT average(connectionSetupDuration) FACET concat(city, ', ', regionCode, ' ', countryCode) WHERE countryCode IN ('US', 'CA')
Utilisez la fonction convert()
pour effectuer une conversion d’unité entre les unités fournies sur la valeur d’entrée donnée.
Les unités et abréviations courantes pour le temps, la longueur, le poids, le volume et les données sont prises en charge à l'aide des normes UCUM pour s'aligner sur les spécifications OpenTelemetry. Pour plus de commodité, les abréviations standardisées sont complétées par quelques alternatives en langage naturel comme ft
en plus de ft_us
, kilobytes
et µs
.
Les unités sont sensibles à la casse. Toutes les unités sont en minuscules, sauf si leur spécification exige qu'elles soient en majuscules. Par exemple, les unités de données 'bits'
sont valides pour les bits et 'By'
doivent avoir une majuscule B
pour les octets.
La plus grande unité de temps est le year
julien, qui vaut toujours 365,25 jours.
FROM Transaction SELECT convert(duration, 'ms', 'min') AS durationMin
FROM Product SELECT convert(sum(itemWeight), 'grams', 'lbs')
Cette requête suppose que vous disposez des informations d'unité stockées sous forme d'attribut de chaîne dans l'événement lui-même et que vous souhaitez standardiser les valeurs en secondes.
FROM Metric SELECT average(convert(apm.mobile.external.duration, unit, 's')) WHERE appName = 'my-application'
Utilisez capture()
pour extraire des valeurs d'un attribut à l'aide d'expressions régulières avec la syntaxe RE2.
Il faut deux arguments :
Nom de l'attribut
Expression régulière avec syntaxe de capture (les expressions régulières dans NRQL utilisent une syntaxe de type Python,
r'...'
)Lors de la capture, utilisez la syntaxe de capture nommée RE2
...(?P<name> pattern )...
pour capturer le modèle contenu, étant donné le nom spécifié.Plusieurs valeurs peuvent être capturées en spécifiant des groupes de capture supplémentaires dans des expressions régulières. Par exemple:
...(?P<name1> pattern1)...(?P<name2> pattern2)...
Remarque : lors de la capture de plusieurs valeurs, chaque instruction de capture peut comporter jusqu'à 16 groupes de capture et chaque requête NRQL peut comporter jusqu'à 5 instructions de capture.
Découvrez comment utiliser la capture regex pour améliorer les résultats de votre requête.
Conseil
Les expressions régulières doivent correspondre à l'intégralité de son entrée. Si une expression de capture n'extrait pas les résultats attendus, vérifiez si elle a besoin
.*
au début ou à la fin, ce qui est le modèle pour une expression régulière de correspondance partielle. Cependant, la correspondance partielle de l'expression régulière peut entraîner l'exécution d'une requête lente.Voici une courte vidéo (3:05 minutes) montrant comment utiliser
capture()
pour améliorer la lisibilité dashboard :Pour plus d'informations, voir les exemples ci-dessous :
Ce qui suit sélectionnera le nom de domaine du site Web, en supprimant
https://
et tous les chemins suivant le.com
SELECT capture(pageUrl, r'https://(?P<baseUrl>.*.com)/.+')FROM PageView SINCE 1 day agoCe qui suit ne capturera que le premier mot du message d’erreur.
SELECT capture(errorMessage, r'(?P<firstWord>\S+)\s.+')FROM TransactionWHERE errorMessage IS NOT NULLSINCE 1 hour agoCe qui suit sera facetté par la méthode HTTP capturée.
SELECT count(*) FROM LogWHERE message LIKE '%HTTP%'FACET capture(message, r'.* "(?P<httpMethod>[A-Z]+) .*')Ce qui suit filtrera les résultats en fonction de l'événement de log avec l'attribut
message
qui correspond aux expressions régulières où le nom du travail capturé estExampleJob
.SELECT message FROM LogWHERE capture(message, r'.*Job Failed: (?P<jobName>[A-Za-z]+),.*') = 'ExampleJob'SINCE 10 minutes agoCe qui suit capturera la somme du temps CPU à partir des lignes log . Vous devez explicitement convertir en numérique pour effectuer des opérations mathématiques.
SELECT sum(numeric(capture(message, r'.*CpuTime:\s(?P<cpuTime>\d+)')))FROM LogWHERE message LIKE '%CpuTime:%' SINCE 1 hour agoDans cet exemple, les variables NRQL sont utilisées pour stocker plusieurs valeurs capturées à partir d'un message de 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 NULLEn savoir plus sur les variables NRQL ici.
Utilisez decode()
pour effectuer des conversions en base 64 sur des chaînes et des blobs. La valeur d'entrée (le premier argument) sera décodée à l'aide de la norme base-64 spécifiée par l'encodage (le deuxième argument).
Les valeurs de chaîne suivantes sont des paramètres d’encodage pris en charge :
'base64' : utilise la norme RFC4648 base-64
'base64mime' : utilise la norme RFC2045 base-64 (MIME)
'base64url' : utilise la norme RFC4648 base-64 avec un alphabet sécurisé pour les URL et les noms de fichiers
Comme
blob()
n'est pas autorisé dans les clausesWHERE
ouFACET
,decode()
avec les types blob n'est pas pris en charge dans la clauseWHERE
ou pour les requêtes à facettes.Pour encoder des chaînes, voir la fonction
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
Utilisez la fonction dimensions()
pour renvoyer toutes les valeurs dimensionnelles sur un type de données.
Vous pouvez explicitement inclure ou exclure un attribut spécifique à l'aide des arguments facultatifs :
include
: si présent, la liste d'inclusion limitedimensions()
à ces attributs.exclude
: si présent, le calculdimensions()
ignore ces attributs.FROM Metric SELECT count(node_filesystem_size)TIMESERIES FACET dimensions()Lorsqu'il est utilisé avec une clause
FACET
,dimensions()
produit une série temporelle unique pour toutes les facettes disponibles sur le type d'événement, de la même manière que Prometheus se comporte avec une requête non agrégée.
Utilisez encode()
pour effectuer des conversions en base 64 sur des chaînes. La valeur d'entrée (le premier argument) sera codée à l'aide de la norme base-64 spécifiée par l'encodage (le deuxième argument).
Les valeurs de chaîne suivantes sont des paramètres d’encodage pris en charge :
'base64' : utilise la norme RFC4648 base-64
'base64mime' : utilise la norme RFC2045 base-64 (MIME)
'base64url' : utilise la norme RFC4648 base-64 avec un alphabet sécurisé pour les URL et les noms de fichiers
Pour décoder des chaînes ou des blobs, consultez la fonction
decode()
.encode()
n'est pas pris en charge pour les blobs.FROM PageView SELECT session, encode(session, 'base64')
Utilisez la fonction cidrAddress()
pour obtenir l’adresse réseau de base à partir d’une adresse IP CIDR.
cidrAddress()
prend les arguments suivants :
attribute
- Une valeur de chaîne qui contient soit une adresse IP seule, soit avec une longueur de préfixe en notation CIDR.- Il peut s'agir d'un attribut de chaîne ou d'une chaîne littérale entre guillemets.
- L'adresse IP doit être une adresse IPv4.
number
- Une valeur entière qui représente la longueur du préfixe.- Il peut s'agir d'un attribut entier ou d'une valeur entière.
- Si le paramètre d'attribut est en notation CIDR, ce paramètre est facultatif et a priorité sur la longueur de préfixe fournie dans la chaîne CIDR.
cidrFormat
- Une valeur booléenne facultative utilisée pour déterminer si la sortie de l'adresse réseau doit être formatée en notation CIDR. La valeur par défaut sera vraie.La fonction
cidrAddress()
renverra une valeur tant que les paramètres d'attribut et de numéro contiennent une adresse IP et une longueur de préfixe valides. Si le paramètre d'entrée n'est pas valide,cidrAddress()
renverranull
.La requête suivante renvoie les sous-réseaux qui traitent le plus requests du type d'événement SyntheticRequest .
FROM SyntheticRequest SELECT count(*) FACET cidrAddress(serverIPAddress, 24)Cela renverrait des réponses dans un format comme :
Adresse Cidr de l'adresse IP du serveur
Compter
10.0.0.0/24
6 000
10.10.1.0/24
4k
10.0.14.0/24
1 000
Cette requête renvoie toutes les adresses IP de l'attribut
serverIPAddress
qui existent dans la plage CIDR de 10.0.0.0 à 10.0.0.255.FROM SyntheticRequest SELECT uniques(serverIPAddress)WHERE cidrAddress(serverIPAddress, 24) = '10.0.0.0/24'Cette requête renvoie un nombre de tous les enregistrements tout en excluant les enregistrements qui contiennent une valeur
serverIPAddress
comprise dans la plage 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()...
Utilisez la fonction eventType()
dans une clause FACET pour répartir les résultats selon le type de données sélectionné ou dans une clause WHERE pour filtrer les résultats selon un type de données spécifique. Ceci est particulièrement utile pour cibler des types de données spécifiques avec les fonctions filter() et percentage() .
Important
Dans ce contexte, « type d’événement » fait référence aux types de données auxquelles vous pouvez accéder avec une requête NRQL.
Cette requête renvoie le pourcentage du total de TransactionError
résultats sur le total de Transaction
résultats. Vous pouvez utiliser la fonction eventType()
pour cibler des types de données spécifiques avec la fonction 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
Cette requête affiche le nombre d'enregistrements renvoyés par chaque type de données (Transaction
et TransactionError
).
SELECT count(*) FROM Transaction, TransactionError FACET eventType() TIMESERIES
Utilisez la fonction getField()
pour extraire un élément d'un éventail ou un champ à partir de types de données composés, tels que des données métriques dimensionnelles.
getField()
prend les arguments suivants :
attribute
- Un éventail ou un type de données composé.field
- L'index de l'élément éventail ou le nom du champ du type de données composé.Important
L'indexation de l'éventail commence par
0
.Exemples\ Considérez l’éventail
[100, 110, 90, 100, 105]
stocké dans l’attributdurations
. La requête ci-dessous renverra90
:SELECT getField(durations, 2) FROM FooVous pouvez utiliser les crochets
[ ]
comme raccourci pourgetField()
. La requête suivante renverra également90
:SELECT durations[2] FROM FooLes types de données composés pris en charge et leurs champs sont :
Type métrique
Champs pris en charge
summary
count
,total
,max
,min
,type
gauge
count
,total
,max
,min
,latest
,type
distribution
count
,total
,max
,min
,type
count
count
,type
cumulativeCount
count
,cumulative
,type
timeslice
count
,total
,totalExclusive
,min
,max
,sumOfSquares
Exemples
SELECT max(getField(mySummary, count)) FROM MetricSELECT sum(mySummary) FROM Metric where getField(mySummary, count) > 10
getCdfCount()
est une implémentation de la fonction de distribution cumulative, renvoyant le nombre de valeurs dans attribute
égal ou inférieur à threshold
.
Un seul seuil est autorisé. Attribute
peut être soit un attribut numérique, soit un attribut de métrique de distribution. Les types mixtes dans une requête sont acceptés.
Pour un type numérique, il renvoie 1 si l'attribut est inférieur ou égal au seuil, sinon il renvoie 0. Pour une distribution, il renvoie le nombre dans l'ensemble de données représenté par la distribution. Pour tous les autres types, elle renvoie 0.
Cette requête renvoie le nombre d'événements où firstPaint
est inférieur ou égal à 1 seconde.
FROM PageView SELECT sum(getCdfCount(firstPaint, 1.0))
Utilisez if()
pour effectuer des opérations de contrôle de flux if-then-else dans une requête.
if()
prend 3 arguments :
condition
- une expression qui peut être évaluée àtrue
oufalse
trueValue
- cette valeur est renvoyée si l'expression booléenne esttrue
falseValue
- cette valeur facultative est renvoyée si l'expression booléenne estfalse
, ou si elle n'est pas fournie,NULL
est renvoyéeFROM 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')Utilisez une fonction if() imbriquée pour ajouter une logique conditionnelle supplémentaire.
FROM Transaction SELECT count(*)FACET if(appName LIKE '%java%', 'Java',if(appName LIKE '%kafka%', 'Kafka', 'Other'))
Utilisez la fonction d'analyse JSON, jparse()
, pour analyser une valeur de chaîne et produire une carte/liste de valeurs (ou de structures imbriquées) qui peuvent être traitées comme tout autre type de valeur de première classe dans NRQL.
jparse()
prend deux arguments :
attribute
- Une valeur de chaîne JSON.path
- Une valeur de chaîne facultative utilisée pour référencer directement une partie particulière du JSON dans le paramètreattribute
. Consultez la section Référence de la syntaxe du chemin d’analyse JSON ci-dessous.La fonction
jparse()
suit le format RFC 8259 pour analyser les valeurs JSON. Lorsque la fonctionjparse()
est utilisée sans le paramètrepath
, elle renverra la valeur JSON désérialisée.Vous pouvez utiliser des crochets pour extraire des valeurs individuelles d'un résultat
jparse()
via une clé/un index et mapper les clés JSON directement à l'attribut à l'aide de la clauseWITH
.Referencing a key
La requête suivante fait référence à la clé
userNames
dans l'attributjsonString
et renverra['abc', 'xyz']
.WITH '{"userNames": ["abc", "xyz"]}' AS jsonString SELECT jparse(jsonString)[userNames]Referencing an index
La requête suivante fait référence à l'index
0
dans l'attributjsonString
et renverra'abc'
.WITH '["abc", "xyz"]' AS jsonString SELECT jparse(jsonString)[0]La requête suivante utilise
jparse()
dans la clauseWITH
pour mapper les clés JSONuserName
etid
dans des variables NRQL afin qu'elles puissent être utilisées dans le reste de la requête.WITH '{"userName": "test", "unused": null, "id": 100}' AS jsonString, jparse(jsonString) AS (userName, id) SELECT userName, idPour analyser des valeurs spécifiques de la chaîne JSON, vous pouvez utiliser le paramètre
path
.Il est courant que les données JSON soient imbriquées dans plusieurs couches sous des formes non triviales. La syntaxe du chemin vous permet de référencer directement un élément particulier des données JSON.
Exemple de données :
{"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 }]}Exemples de syntaxe de chemin utilisant les données ci-dessus :
Path Syntax Example
Result Description
Result
valueA
Renvoie la valeur à la clé
"test"
["valueA"]
Renvoie la valeur à la clé
"test"
[valueA, valueC]
Renvoie la liste des valeurs clés
["test", [{"id": 1…}, {"id": 2…}], {"id": 3…}]]
valueB.nestedValue2
Renvoie la valeur à la clé
100
valueC[0]
Renvoie la valeur de la liste à l'index
0
{"id": 1…}
valueC[0,2]
Renvoie les valeurs de la liste à l'index
0
et2
[{"id": 1…}, {"id": 3…}]
valueC[0:2]
Renvoie la plage de valeurs de liste du premier index au deuxième, à l'exclusion de la valeur du deuxième index. Dans ce cas, les valeurs de liste aux index
0
et1
sont renvoyées.[{"id": 1…}, {"id": 2…}]
valueC[:2]
Renvoie la plage de valeurs de la liste du début au deuxième index, à l'exclusion de la valeur du deuxième index. Dans ce cas, les valeurs de liste aux index
0
et1
sont renvoyées.[{"id": 1…}, {"id": 2…}]
valueC[:-2]
Renvoie toutes les valeurs de la liste à l'exception du dernier n, où n est un nombre négatif après les deux points (c'est-à-dire
[:-n]
). Dans ce cas, la valeur de la liste à l’index0
sera renvoyée.[{"id": 1…}]
valueC[1:]
Renvoie la plage de valeurs de liste depuis l'index spécifié jusqu'à la fin de la liste. Dans ce cas, les valeurs de liste aux index
1
et2
sont renvoyées.[{"id": 2…}, {"id": 3…}]
valueC[-1:]
Renvoie les n dernières valeurs de la liste, où n est un nombre négatif avant les deux points (par exemple,
[-n:]
). Dans ce cas, la valeur de la liste à l'index2
sera renvoyée.[{"id": 3…}]
valueC[*]
Renvoie toutes les valeurs de la liste
[{"id": 1…}, {"id": 2…}, {"id": 3…}]
valueC[*].id
Renvoie la valeur clé spécifiée de tous les membres de la liste. Dans ce cas, la valeur clé
id
.[1, 2, 3]
valueC[*]["label", "other"]
Renvoie les clés spécifiées de tous les membres de la liste. Dans ce cas, les valeurs
label
etother
sont clés.[["A", 7],…]
Exemples :
La requête suivante analyse la chaîne JSON dans l’attribut
jsonString
.WITH '{"user": {"name": "John", "id": 5}}' AS jsonString SELECT jparse(jsonString)Cette requête renverra la chaîne JSON désérialisée :
{ "user": { "name": "John", "id": 5 } }Un problème courant est d'avoir des données riches et structurées cachées dans un message de log. Vous pouvez utiliser
aparse()
etjparse()
pour éliminer le bruit et trouver des valeurs spécifiques.La requête suivante :
Appelle
aparse()
pour extraire les données JSON de l'attributlogMessage
Analyse le champ
user.name
des données JSON extraites à l'aidejparse()
et du paramètre de cheminuser.name
.WITH '1693242121842: value=\'{"user": {"name": "John", "id": 5}}\', useless=stuff' AS logMessage, aparse(logMessage, '%: value=\'*\'%') AS jsonString SELECT jparse(jsonString, 'user.name')
La requête suivante analyse chaque champ
id
de la liste des objets dans l'attributjsonString
et génère ces valeurs sous forme d'éventail.WITH '{"users": [{"name": "A", "id": 5}, {"name": "B", "id": 10}]}' AS jsonString, jparse(jsonString, 'users[*].id') AS ids SELECT idsLa requête ci-dessus renverra
[5, 10]
.Fonctions associées :
mapKeys()
,mapValues()
Utilisez la fonction length()
pour renvoyer la longueur d'une valeur de chaîne ou le nombre d'éléments dans une valeur d'éventail.
Il faut un seul argument.
Cette requête renvoie la longueur de chaque chaîne d'URL de l'événement PageView
.
SELECT length(pageUrl) FROM PageView
Considérez l’éventail ["US", "CA", "UK"]
stocké dans l’attribut countries
.
SELECT length(countries) FROM Foo
length(countries) dans la requête ci-dessus renverra 3
.
Utilisez la fonction contains()
pour vérifier si un élément existe dans un éventail.
contains()
prend les arguments suivants :
attribute
- Un éventailelement
- L'élément pour vérifier l'éventail pourConsidérez l’éventail
["9999-1234-9999", "3333-7890-3333", "5555-3456-555"]
stocké dans l’attributguids
.SELECT contains(guids, '5555-3456-555') FROM Foocontains(guids, '5555-3456-555')
dans la requête ci-dessus renverraTRUE
.Considérez l'éventail
["9999-1234-9999", "3333-7890-3333", "5555-3456-555"]
stocké dans l'attributguids
au sein du type d'événementTransaction
.SELECT count(*) FROM Transaction WHERE contains(guids, '9999-1234-9999')La requête ci-dessus renverra un nombre de transactions qui incluent le GUID
"9999-1234-9999"
.
Si vous avez téléchargé une table de recherche, vous pouvez utiliser cette fonction avec un nom de table pour accéder aux données de cette table dans une requête. Voici un exemple de requête :
FROM LogSELECT count(*)WHERE hostname IN (FROM lookup(myHosts) SELECT uniques(myHost))
Pour plus d'informations, consultez Comment interroger les données d'une table de recherche.
Utilisez la fonction lower()
pour changer tous les caractères alphabétiques d’une valeur de chaîne en minuscules.
Arguments:
str
- La valeur de la chaîne doit être en minuscules- Cela peut être tout ce qui est évalué comme une chaîne, y compris une chaîne littérale entre guillemets, un attribut de chaîne interrogé, une fonction qui renvoie une chaîne ou même une sous-requête qui renvoie une valeur de chaîne unique.
- Si cet argument est évalué à null, la fonction
lower()
renverra null.
Cette requête illustre l'utilisation de la fonction
lower()
dans différentes parties d'une requête.FROM PageActionSELECT latest(lower(actionName))WHERE lower(actionName) = lower('acmePageRenderedEvent') OR lower(actionName) = lower('SubmitLogin')FACET concat(actionName, ':', lower(actionName))lower(str)
exempleFonction associée :
upper()
Utilisez la fonction mapKeys()
pour renvoyer une liste de clés lorsqu'une carte est fournie en entrée dans le paramètre attribute
.
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys
La requête ci-dessus :
- Désérialise la chaîne JSON dans l'attribut
jsonString
dans une carte à l'aide de la fonctionjparse()
- Appelle la fonction
mapKeys()
pour extraire une liste de toutes les clés de cette carte - Lie cette liste de clés à l'attribut
keys
Après avoir exécuté la requête ci-dessus, keys
contiendra la liste ['userResult1', 'userResult2', 'userResult3']
.
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapKeys(jparse(jsonString)) AS keys
La requête ci-dessus extraira uniquement les clés les plus externes de la chaîne JSON dans l'attribut jsonString
. Après avoir exécuté la requête, keys
contiendra la liste ['value1', 'value2']
.
Utilisez la fonction mapValues()
pour renvoyer une liste de valeurs lorsqu'une carte est fournie en entrée dans le paramètre attribute
.
WITH '{"userResult1": 100, "userResult2": 200, "userResult3": 4}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values
La requête ci-dessus :
- Désérialise la chaîne JSON dans l'attribut
jsonString
dans une carte à l'aide de la fonctionjparse()
- Appelle la fonction
mapValues()
pour extraire une liste de toutes les valeurs de cette carte - Lie cette liste de valeurs à l'attribut
values
Après avoir exécuté la requête ci-dessus, values
contiendra la liste [100, 200, 4]
.
WITH '{"value1": "test", "value2": {"nestedValue1": [1, 2, 3], "nestedValue2": 100}}' AS jsonString SELECT mapValues(jparse(jsonString)) AS values
La requête ci-dessus extrait les valeurs les plus externes de la chaîne JSON dans l'attribut jsonString
. Après avoir exécuté la requête, values
contiendra une liste de la chaîne "test"
et de l'objet imbriqué.
Ceci peut être vu dans la vue JSON :
"contents": [ { "function": "alias", "alias": "values", "contents": { "constant": [ "test", { "nestedValue1": [ 1, 2, 3 ], "nestedValue2": 100 } ] } }],
Utilisez la fonction minuteOf()
pour extraire uniquement la partie minute (c'est-à-dire les minutes 0 à 59) d'un attribut contenant une valeur d'horodatage valide. Cela fonctionne également pour des fonctions telles que hourOf()
, weekOf()
, etc. Pour une liste complète des fonctions basées sur le temps, consultez le tableau dans notre document sur les résultats de groupe dans le temps
Utilisez la fonction mod()
pour renvoyer le module plancher après avoir divisé la valeur de l'attribut numérique fourni (le premier argument ou dividende) par une valeur numérique (le deuxième argument ou diviseur). Cette opération modulo peut être utilisée dans une condition de clause WHERE
pour filtrer un sous-ensemble arbitraire de résultats ou dans une clause FACET
comme moyen de subdiviser l'ensemble de résultats.
FROM Transaction SELECT * WHERE mod(port, 2) = 1
FROM NrConsumption SELECT uniques(hostId, 10000) SINCE 1 day AGO FACET mod(hostId, 10)
Utilisez la fonction position()
pour trouver l’emplacement d’une sous-chaîne dans une chaîne. La correspondance est sensible à la casse.
Arguments:
str
- la chaîne dans laquelle trouver la sous-chaîne.- Cela peut être tout ce qui est évalué comme une chaîne, y compris une chaîne littérale entre guillemets, un attribut de chaîne interrogé, une fonction qui renvoie une chaîne ou même une sous-requête qui renvoie une valeur de chaîne unique.
substr
- la chaîne à rechercher dans str.occurrence
- indique à quelle occurrence de substr doit être renvoyée la position.Défaut:
0
Si positif, recherchez la n-ième occurrence du substr à partir du début de str, en commençant par zéro
Si négatif, recherchez la nième occurrence du substr à partir de la fin de str. La dernière occurrence de substr serait l'occurrence -1.
Alias :
indexOf(str, substr [, occurrence])
-indexOf()
est un nom alternatif pour la fonctionposition()
Retours :
L'index de base 0 du caractère de départ de la sous-chaîne dans str
Null est renvoyé si str est nul, substr est nul ou si l'occurrence référencée de substr n'est pas trouvée
Cette requête démontre l'utilisation de la fonction
position()
pour trouver l'index de position de diverses sous-chaînes dans une chaîne. L'utilisation de la fonctionposition()
dans les arguments de la fonctionsubstring()
est également démontrée ici.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])
exemple
Utilisez la fonction round()
pour renvoyer la valeur arrondie d'un attribut.
En option, round()
peut prendre un deuxième argument, to_nearest
, pour arrondir le premier argument au multiple le plus proche du deuxième. to_nearest
peut être fractionnaire.
SELECT round(n [, to_nearest])
Utilisez la fonction stddev()
pour renvoyer un écart type pour un attribut numérique sur la plage de temps spécifiée. Il faut un seul argument. Si l'attribut n'est pas numérique, il renverra une valeur de zéro.
Utilisez la fonction string()
pour convertir une valeur numérique, booléenne, uplet ou éventail en une valeur de chaîne.
Il faut deux arguments, dont un facultatif :
Nom de l'attribut
Précision : si présente, impose une limite au nombre de décimales incluses lors de la conversion de valeurs numériques à virgule flottante.
Cette requête renvoie la durée de PageView sous forme de chaîne, avec deux décimales.
FROM PageView SELECT string(duration, precision: 2)Cette requête renvoie la durée moyenne de PageView sous forme de chaîne, avec deux décimales.
FROM PageView SELECT string(average(duration), precision: 2)Utilisez
string()
pour facetter par une valeur à virgule flottante sans perdre de décimales.FROM PageView SELECT count(*)FACET string(tuple(asnLatitude, asnLongitude), precision: 2)
Utilisez la fonction substring()
pour extraire une partie d'une chaîne.
Arguments:
str
- la chaîne à partir de laquelle extraire une sous-chaîne.- Cela peut être tout ce qui est évalué comme une chaîne, y compris une chaîne littérale entre guillemets, un attribut de chaîne interrogé, une fonction qui renvoie une chaîne ou même une sous-requête qui renvoie une valeur de chaîne unique.
- Si cet argument est évalué à null, la fonction
substring()
renverra null.
start
- la position dans str à partir de laquelle commencer l'extraction.- Le premier caractère de str est la position 0.
- Une valeur négative trouvera la position par rapport à la fin de str, le dernier caractère de la chaîne étant la position -1.
- Si start est supérieur ou égal à la longueur de str, la fonction
substring()
renverra une chaîne vide. - Si start est négatif et que sa valeur absolue est supérieure à la longueur de str, la sous-chaîne extraite commencera à la position 0.
length
- la longueur, ou le nombre de caractères, de la sous-chaîne à extraire de str.- Facultatif - si la longueur n'est pas fournie, tous les caractères de str après la position de départ résolue seront inclus.
Voir la fonction
position()
pour des exemples d’utilisationsubstring()
etposition()
ensemble.
Utilisez la fonction toDatetime()
pour traduire un horodatage en une chaîne de date/heure formatée.
toDatetime()
prend les arguments suivants :
timestamp
- Un horodatage numérique à traduire en une chaîne de date et d'heure. Il peut s'agir d'une valeur numérique ou d'un attribut, et sera converti enlong
en interne.pattern
- Un modèle de date/heure facultatif utilisé pour formater le résultat. Consultez la section Modèles de formatage et d'analyse dans la documentation DatetimeFormatter pour savoir comment construire une chaîne de modèle.- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
si aucun modèle n'est fourni.
- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera
timezone
- Une valeur de fuseau horaire facultative utilisée pour interpréter la chaîne datetime (ex. UTC).- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera UTC ou la valeur fournie dans
WITH TIMEZONE
si disponible.
Tant que l'entrée est un nombre valide, la fonction
toDatetime()
renverra toujours une valeur.Alias :
fromTimestamp()
est un nom alternatif pour la fonctiontoDatetime()
.Exemples :
La requête suivante traduit l'attribut
timestampValue
en utilisant le modèle par défaut deyyyy-MM-dd'T'HH:mm:ss.SSSXXX
. Cela renverra la chaîne datetime1970-01-01T00:20:34.567Z
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue)La requête suivante traduit l'attribut
timestampValue
à l'aide de la chaîne de modèleyyyy-MM-dd
avec le fuseau horaire défini sur « America/Los_Angeles ». Cela renverra la chaîne datetime1969-12-31
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd', timezone:'America/Los_Angeles')La requête suivante traduit l'attribut
timestampValue
en utilisant le fuseau horaire fourni dans la clauseWITH TIMEZONE
. Cela renverra la chaîne datetime1969-12-31
.WITH 1234567 AS timestampValue SELECT toDatetime(timestampValue, 'yyyy-MM-dd') FROM Event WITH TIMEZONE 'America/Los_Angeles'- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera UTC ou la valeur fournie dans
Utilisez la fonction toTimestamp()
pour analyser un horodatage en millisecondes d'époque à partir d'une chaîne datetime.
toTimestamp()
prend les arguments suivants :
datestring
- Une chaîne de date et d'heure à traduire en un horodatage (millisecondes d'époque). Il peut s'agir d'un attribut de chaîne ou d'une chaîne littérale entre guillemets.pattern
- Un modèle de date/heure facultatif utilisé pour analyser le paramètre de chaîne de date. Consultez la section Modèles de formatage et d'analyse dans la documentation DatetimeFormatter pour savoir comment construire une chaîne de modèle.- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
si aucun modèle n'est fourni.
- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera
timezone
- Une valeur de fuseau horaire facultative utilisée pour interpréter le paramètre de chaîne de date (ex. TVP).- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera UTC ou la valeur fournie dans
WITH TIMEZONE
si disponible.
Alias :
fromDatetime()
est un nom alternatif pour la fonctiontoTimestamp()
.Conseil
Si la chaîne trouvée ne correspond pas au modèle donné, elle renverra
null
. Si vous avez des chaînes de date/heure dans une variété de modèles, vous pouvez fusionner les résultats en utilisantOR
pour les mettre en cascade jusqu'à ce que l'une des valeurs soit non nulle. Vous pouvez également utiliser des segments de motif facultatifs. Le modèle par défaut utilise des crochets pour rendre les millisecondes et les parties de décalage de zone facultatives.Scénario
Détail
Modèle d'échantillon
Exemple de date et d'heure
Décide de
Fuseau horaire manquant
Utilisera l'argument de fuseau horaire ou la valeur
WITH TIMEZONE
. La valeur par défaut estUTC
.aaaa-MM-jj HH:mm:ss.SSS
18/10/2023 15:27:03.123
18/10/2023 à 15:27:03.123Z
Champ datetime manquant
Tout champ d'heure manquant sera remplacé par 0. Tout champ de date manquant sera remplacé par 1. Si un champ est présent, tous les champs de priorité supérieure doivent également être présents.
Remarque : les modèles de jour de l’année et de trimestre de l’année sont pris en charge.aaaa-MM-jj HH:mm:ss
18/10/2023 15:27:03
18/10/2023 à 15:27:03.000Z
aaaa-MM-jj HH:mm
18/10/2023 15:27
18/10/2023 à 15:27:00.000Z
aaaa-MM-jj HH
18/10/2023 15
18/10/2023 à 15:00:00.000Z
aaaa-MM-jj
18/10/2023
18/10/2023 à 00:00:00.000Z
yyyy 'jour' D
2023 jour 291
18/10/2023 à 00:00:00.000Z
aaaa-MM
2023-10
01/10/2023 à 00:00:00.000Z
aaaa qqq
4e trimestre 2023
01/10/2023 à 00:00:00.000Z
yyyy
2023
01/01/2023 à 00:00:00.000Z
Temps seulement
Si un modèle horaire est utilisé sans date, l'horodatage Unix en millisecondes sera calculé.
Remarque : le réglage du fuseau horaire est toujours respecté.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
00h30 GMT+1
1969-12-31T23:30:00.000Z
12 heures
Si un modèle de 12 heures (h minuscule) est utilisé, le modèle am-pm-of-day (a) doit également être utilisé.
Remarque : dans la chaîne datetime, AM/PM doit être en majuscules.aaaa-MM-jj h:mm a
18/10/2023 15:27
18/10/2023 à 15:27:00.000Z
aaaa-MM-jj h:mm
18/10/2023 15:27
Modèle non pris en charge
aaaa-MM-jj h:mm a
18/10/2023 15:27
null (en raison de la minuscule pm)
Priorité des champs
Si un champ est présent, tous les champs de priorité supérieure doivent également être présents.
aaaa jj
2023 18
Modèle non pris en charge (dd est le jour du mois et le mois est manquant)
Exemples :
La requête suivante analyse la chaîne datetime '2023-10-18T15:27:03.123Z' en utilisant le modèle par défaut de
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
. Cela renvoie la valeur d'horodatage1697642823123
.SELECT toTimestamp('2023-10-18T15:27:03.123Z')FROM EventLa requête suivante analyse la chaîne datetime « 2023-11-03 11:00:32 » avec le fuseau horaire défini sur « America/Los_Angeles ». Cela renvoie la valeur d'horodatage
1699034432000
.SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss', timezone:'America/Los_Angeles')FROM EventLa requête suivante analyse la chaîne datetime « 2023-11-03 11:00:32 » avec le fuseau horaire fourni dans la clause
WITH TIMEZONE
. Cela renvoie la valeur d'horodatage1699034432000
.SELECT toTimestamp('2023-11-03 11:00:32', 'yyyy-MM-dd HH:mm:ss')FROM Event WITH TIMEZONE 'America/Los_Angeles'Important
L'UI détectera automatiquement la valeur
toTimestamp()
comme un horaire et la formatera comme une valeur de date/heure. Pour afficher l'horodatage numérique réel, encapsulez la fonctiontoTimestamp()
dans une fonctionstring()
.- Il doit s'agir d'une valeur de chaîne constante et la valeur par défaut sera UTC ou la valeur fournie dans
Utilisez la fonction upper()
pour changer tous les caractères alphabétiques d’une valeur de chaîne en majuscules.
Arguments:
str
- La valeur de la chaîne doit être en majusculesCela peut être tout ce qui est évalué comme une chaîne, y compris une chaîne littérale entre guillemets, un attribut de chaîne interrogé, une fonction qui renvoie une chaîne ou même une sous-requête qui renvoie une valeur de chaîne unique.
Si cet argument est évalué à null, la fonction
upper()
renverra null.Cette requête illustre l'utilisation de la fonction
upper()
dans différentes parties d'une requête.FROM PageActionSELECT latest(upper(actionName))WHERE upper(actionName) = upper('acmePageRenderedEvent') OR upper(actionName) = upper('SubmitLogin')FACET concat(actionName, ':', upper(actionName))upper(str)
exempleFonction associée :
lower()
Conversion de type
NRQL ne prend pas en charge la « coercition ». Cela signifie qu'un float stocké sous forme de chaîne est traité comme une chaîne et ne peut pas être exploité par des fonctions attendant des valeurs float.
Vous pouvez convertir une chaîne avec une valeur numérique ou un booléen avec une valeur de chaîne en leurs équivalents numériques et booléens, ou convertir une valeur non-chaîne en une valeur de chaîne, avec ces fonctions :
- Utilisez la fonction
numeric()
pour convertir un nombre au format chaîne en une valeur numérique. La fonction peut être intégrée dans une requête qui utilise des fonctions mathématiques sur les résultats de la requête ou des fonctions d'agrégation NRQL , telles queaverage()
. Veuillez noter que si la valeur NRQL est au format de jauge, alorsnumeric()
ne fonctionnera pas dessus. Au lieu de cela, vous devez utiliser l’une de ces fonctions de requête compatibles : latest()
min()
max()
sum()
count()
average()
- Utilisez la fonction
boolean()
pour convertir une valeur de chaîne de"true"
ou"false"
en valeur booléenne correspondante. - Utilisez la fonction
string()
pour convertir une valeur numérique, booléenne, uplet ou éventail en une valeur de chaîne. Voirstring()
ci-dessus pour plus d'informations.
Commentaires
Lorsque vous écrivez une requête NRQL, vous pouvez ajouter des commentaires, ce qui peut aider les membres de votre équipe à mieux comprendre et utiliser la requête.
Voici les détails de la syntaxe :
--
Deux tirets placeront en commentaire tout le texte à droite de cet indicateur sur la même ligne.//
Deux barres obliques placeront en commentaire tout le texte à droite de cet indicateur sur la même ligne./* */
Tout texte compris entre ces jeux de caractères sera placé en commentaire. Cet indicateur peut s'appliquer à plusieurs lignes.
Notez que les commentaires ne sont pas affichés partout. Certaines vues, comme « requête récente » et « requête de vue », n'afficheront pas de commentaires.
Quelques exemples de requêtes incluant des commentaires :
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(*)
Documents associés
D'autres ressources populaires pour comprendre la syntaxe et les règles NRQL incluent :