Vous pouvez utiliser NerdGraph pour exécuter une requête NRQL . De plus, vous pouvez également utiliser NerdGraph pour exécuter une requête NRQL asynchrone. Les requêtes asynchrones s'exécutent en arrière-plan et vous pouvez effectuer requests de suivi pour récupérer les résultats de la requête ou l'état de la requête. Ce type de requête évite qu'une requête soit interrompue par des problèmes tels que des délais d'expiration du navigateur ou des délais d'expiration de connexion HTTP. C'est particulièrement utile pour exécuter des requêtes dont l'exécution peut prendre beaucoup de temps.
Exigences
Si vous disposez de Data Plus, vous pouvez exécuter une requête asynchrone d'une durée maximale de 10 minutes en utilisant NerdGraph ou l'UI du générateur de requêtes.
Pour en savoir plus sur les limites des requêtes, consultez Limites des requêtes.
Exemple de requête asynchrone
Voici un exemple d'appel de requête asynchrone NerdGraph. Le async: true
est ce qui rend la requête asynchrone. Cette requête renverra des résultats si elle se termine dans le délai d'expiration par défaut de 5 secondes ; sinon, elle renverra des données queryProgress
à utiliser dans la requête de suivi dans le champ nrqlQueryProgress
.
{ actor { account(id: YOUR_ACCOUNT_ID) { nrql(query: "SELECT * FROM Transaction", async: true) { results queryProgress { queryId completed retryAfter retryDeadline resultExpiration } } } }}
Obtenir les résultats ou l'état d'une requête asynchrone
Si votre requête dépasse le délai d'expiration par défaut, elle renverra un ID de requête. Vous pouvez prendre cet ID et exécuter une deuxième requête pour obtenir les résultats de la requête, si elle est terminée, ou bien le statut de cette requête.
{ actor { account(id: YOUR_ACCOUNT_ID) { nrqlQueryProgress(queryId: "YOUR_QUERY_ID") { results queryProgress { queryId completed retryAfter retryDeadline resultExpiration } } } }}
Quelques détails importants sur cette requête :
- Le
queryId
provient des donnéesqueryProgress
renvoyées par la requête asynchrone d'origine. - L'argument
account
doit correspondre à l'argumentaccount
de la requête d'origine. - Cette requête renverra des résultats si l'exécution asynchrone est terminée ; sinon, elle renverra
queryProgress
données. - La requête peut être répétée mot pour mot jusqu'à ce que des résultats ou une erreur soient renvoyés.
Annuler une requête asynchrone
Vous pouvez annuler une requête asynchrone en utilisant la mutation nrqlCancelQuery
. Cette mutation prend le queryId
de la requête que vous souhaitez annuler. Il renverra soit un statut ACCEPTED
, soit un statut REJECTED
avec une raison de rejet.
mutation { nrqlCancelQuery(queryId: "YOUR_QUERY_ID") { queryId requestStatus rejectionReason }}