Affinements de requêtes transactionnelles
Affinez les requêtes AQL transactionnelles à l'aide de l'expression EXPLICIT avec les expressions BEGIN et END. Utilisez également les expressions TIMEOUT et TIMEWINDOW pour spécifier des intervalles de temps.
Utilisez l'expression EXPLICIT avec les expressions BEGIN et END pour appliquer un filtrage plus précis à vos requêtes transactionnelles.
Par exemple, vous pouvez utiliser l'expression BEGIN avec l'expression EXPLICIT END pour capturer plusieurs tentatives de connexion infructueuses (BEGIN), suivies d'une connexion réussie (EXPLICIT END).
Utilisez les expressions TIMEOUT et TIMEWINDOW pour appliquer des filtres de temps aux sessions dans vos requêtes transactionnelles.
Expressions
Utilisez les expressions décrites dans la section suivante pour affiner votre requête AQL transactionnelle :
| Expressions de requête | Descriptif |
|---|---|
| BEGIN | Une session est démarrée lorsque vous obtenez un événement où l'expression BEGIN est satisfaite ou que l'événement précédent met fin à la session. |
| EXPLICIT BEGIN | Lance une nouvelle session uniquement si l'expression EXPLICIT BEGIN est vraie. |
| FIN | Une session est arrêtée lorsque vous obtenez un événement où l'expression END est vraie ou que l'événement suivant démarre une nouvelle session. |
| EXPLICIT END | Ferme la session en cours uniquement si l'expression EXPLICIT END est vraie. |
| TIMEOUT | Ferme la session lorsque la période TIMEOUT spécifiée s'écoule à partir du moment où l'événement précédent s'est produit au moment où l'événement en cours s'est produit. |
| TIMEWINDOW | Effectue le suivi de la session. Ferme la session lorsque la période TIMEWINDOW spécifiée s'écoule à partir du moment où le premier événement s'est produit au moment où l'événement en cours s'est produit. |
- Syntaxe
SESSION BY <TimeExpression> <ExpressionList> [EXPLICIT] BEGIN <booleanExpression> [EXPLICIT] END <booleanExpression> TIMEOUT <IntegerLiteral millieseconds> TIMEWINDOW <IntegerLiteral SECONDS|MINUTES|HOURS|DAYS>
Les exemples suivants illustrent les exemples de résultats que vous obtenez en utilisant différentes combinaisons des expressions de requête disponibles:
Expressions BEGIN et END
Une expression BEGIN démarre une session lorsqu'un événement correspond à l'expression BEGIN ou que l'événement précédent termine la session.
Une expression END termine une session lorsque l'expression END est vraie pour un événement ou que l'événement suivant démarre une nouvelle session.
En utilisant l'expression EXPLICIT avec les expressions BEGIN et END, vous appliquez un filtre plus précis qui affine l'ensemble de résultats.
Voir les exemples de requêtes et de résultats suivants.
L'exemple de requête suivant utilise les expressions BEGIN et END.
Select sessionId,
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss')
start_time, username, sourceip,
category from events into TR1
where username = 'user_x'
SESSION BY starttime username, sourceip
BEGIN category=16001
END category=16003
start '2016-12-10 16:00' stop '2016-12-10 23:30'
Le tableau suivant présente les résultats de la requête utilisant BEGIN et END.
| sessionID | start_Time | nom d'utilisateur | IP de la source | catégorie |
|---|---|---|---|---|
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16001 |
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16003 |
| 2 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16003 |
| 3 | 2016-12-10 16:00:10 | user_x | 10.2.2.10 | 16001 |
| 3 | 2016-12-10 16:00:10 | user_x | 10.2.2.10 | 16003 |
| 4 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16003 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16001 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16003 |
Expressions EXPLICIT BEGIN et END
Les événements sont ignorés lorsqu'une session n'est pas démarrée et qu'un événement n'est pas un événement EXPLICIT
BEGIN.
Select sessionId,
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss')
start_time, username, sourceip,
category from events into TR2
where username='user_x'
SESSION BY starttime username, sourceip
EXPLICIT BEGIN category=16001
END category=16003 start '2016-12-10 16:00'
stop '2016-12-10 23:30'
Le tableau suivant présente les résultats de la requête qui utilise EXPLICIT BEGIN et END.
| sessionID | start_Time | nom d'utilisateur | IP de la source | catégorie |
|---|---|---|---|---|
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16001 |
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16003 |
| 2 | 2016-12-10 16:00:07 | user_x | 10.2.2.10 | 16001 |
| 2 | 2016-12-10 16:00:07 | user_x | 10.2.2.10 | 16003 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16001 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16003 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16003 |
| 4 | 2016-12-10 16:00:14 | user_x | 10.2.2.10 | 16001 |
| 5 | 2016-12-10 16:00:15 | user_x | 10.2.2.10 | 16001 |
| 5 | 2016-12-10 16:00:15 | user_x | 10.2.2.10 | 16003 |
Seuls les événements répondant à l'expression EXPLICIT BEGIN sont renvoyés.
Sessionid 2 et Sessionid 4 dans EXPLICIT BEGIN et END ne répondent pas à l'expression EXPLICIT BEGIN.
BEGIN et EXPLICIT END
Fermez la session en cours uniquement si l'expression EXPLICIT END est vraie. Il n'y a plus de contrôle des événements BEGIN dans la session lorsque l'expression EXPLICIT END est vraie.
Plusieurs événements BEGIN dans une même session peuvent être associés à une expression EXPLICIT
END. Par exemple, vous pouvez utiliser l'expression EXPLICIT END pour compter plusieurs tentatives de connexion ayant échoué, suivies d'une connexion réussie au cours d'un intervalle de temps spécifique (délai d'attente de session).
L'exemple de requête suivant utilise les expressions BEGIN et EXPLICIT END.
Select sessionId,
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss')
start_time, username, sourceip,
category from events into TR3
where username = 'user_x'
SESSION BY starttime username, sourceip
BEGIN category=16001
EXPLICIT END category=16003
start '2016-12-10 16:00'
stop '2016-12-10 23:30'
Le tableau suivant présente les résultats de la requête utilisant les expressions BEGIN et EXPLICIT END.
| sessionID | start_Time | nom d'utilisateur | IP de la source | catégorie |
|---|---|---|---|---|
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16001 |
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16003 |
| 2 | 2016-12-10 16:00:07 | user_x | 10.2.2.10 | 16003 |
| 2 | 2016-12-10 16:00:10 | user_x | 10.2.2.10 | 16001 |
| 2 | 2016-12-10 16:00:10 | user_x | 10.2.2.10 | 16003 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16001 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16003 |
| 4 | 2016-12-10 16:00:12 | user_x | 10.2.2.10 | 16003 |
| 4 | 2016-12-10 16:00:12 | user_x | 10.2.2.10 | 16001 |
| 4 | 2016-12-10 16:00:12 | user_x | 10.2.2.10 | 16003 |
| 5 | 2016-12-10 16:00:13 | user_x | 10.2.2.10 | 16001 |
| 4 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16003 |
EXPLICIT BEGIN et EXPLICIT END
Les événements sont ignorés lorsqu'une session n'est pas démarrée et qu'un événement n'est pas un événement EXPLICIT BEGIN.
Fermez la session en cours uniquement si l'expression EXPLICIT END est vraie. Il n'y a plus de contrôle des événements BEGIN dans la session lorsque l'expression EXPLICIT END est vraie.
L'exemple de requête suivant utilise les expressions EXPLICIT BEGIN et EXPLICIT END.
Select sessionId,
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss')
start_time, username, sourceip,
category from events into TR4
where username = 'user_x'
SESSION BY starttime username, sourceip
EXPLICIT BEGIN category=16001
EXPLICIT END category=16003
start '2016-12-10 16:00'
stop '2016-12-10 23:30'
Le tableau suivant présente les résultats de la requête qui utilise les expressions EXPLICIT BEGIN et EXPLICIT END.
| sessionID | start_Time | nom d'utilisateur | IP de la source | catégorie |
|---|---|---|---|---|
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16001 |
| 1 | 2016-12-10 16:00:06 | user_x | 10.2.2.10 | 16003 |
| 2 | 2016-12-10 16:00:10 | user_x | 10.2.2.10 | 16001 |
| 2 | 2016-12-10 16:00:10 | user_x | 10.2.2.10 | 16003 |
| 3 | 2016-12-10 16:00:11 | user_x | 10.2.2.10 | 16001 |
| 3 | 2016-12-10 16:00:12 | user_x | 10.2.2.10 | 16001 |
| 3 | 2016-12-10 16:00:12 | user_x | 10.2.2.10 | 16003 |
| 4 | 2016-12-10 16:00:13 | user_x | 10.2.2.10 | 16001 |
| 4 | 2016-12-10 16:00:14 | user_x | 10.2.2.10 | 16001 |
| 4 | 2016-12-10 16:00:14 | user_x | 10.2.2.10 | 16003 |
| 5 | 2016-12-10 16:00:15 | user_x | 10.2.2.10 | 16001 |
| 5 | 2016-12-10 16:00:15 | user_x | 10.2.2.10 | 16003 |
TIMEOUT
Ferme la session lorsque la période TIMEOUT spécifiée s'écoule à partir du moment où l'événement précédent s'est produit au moment où l'événement en cours s'est produit. L'événement en cours fait partie d'une nouvelle session. La valeur TIMEOUT est spécifiée en millisecondes.
L'exemple de requête suivant utilise l'expression TIMEOUT.
Select sessionId,
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss.SSS')
start_time, username, sourceip,
category from events into TR5
where username='user_x'
SESSION BY starttime username, sourceip
BEGIN category=16001
EXPLICIT END category=16003
TIMEOUT 3600
start '2016-12-10 16:00'
stop '2016-12-10 23:30'
Le tableau suivant présente les résultats de la requête qui utilise l'expression TIMEOUT.
| sessionID | start_Time | nom d'utilisateur | IP de la source | catégorie |
|---|---|---|---|---|
| 1 | 2016-12-10 16:00:06.716 | user_x | 10.2.2.10 | 16003 |
| 2 | 2016-12-10 16:00:10.328 | user_x | 10.2.2.10 | 16001 |
Sessionid 1 est arrêté et sessionid 2 est démarré, car le TIMEOUT de 3600 est dépassé.
TIMEWINDOW
Effectue le suivi de la session. Ferme la session lorsque la période TIMEWINDOW spécifiée s'écoule à partir du moment où le premier événement s'est produit au moment où l'événement en cours s'est produit. L'événement en cours fait partie d'une nouvelle session. La valeur TIMEWINDOW peut être spécifiée en secondes, minutes, heures ou jours.
L'exemple de requête suivant utilise l'expression TIMEWINDOW.
Select sessionId,
DATEFORMAT(starttime,'YYYY-MM-dd HH:mm:ss.SSS')
start_time, username, sourceip,
category from events into TR6
where username='user_x'
SESSION BY starttime username, sourceip
BEGIN category=16001
EXPLICIT END category=16003
TIMEWINDOW 3000
start '2016-12-10 16:00'
stop '2016-12-10 23:30'
Le tableau suivant présente les résultats de la requête qui utilise l'expression TIMEWINDOW.
| sessionID | start_Time | nom d'utilisateur | IP de la source | catégorie |
|---|---|---|---|---|
| 1 | 2016-12-10 16:00:06.415 | user_x | 10.2.2.10 | 16001 |
| 1 | 2016-12-10 16:00:06.433 | user_x | 10.2.2.10 | 16003 |
| 2 | 2016-12-10 16:00:06.716 | user_x | 10.2.2.10 | 16003 |
| 3 | 2016-12-10 16:00:10.328 | user_x | 10.2.2.10 | 16001 |
| 3 | 2016-12-10 16:00:06.328 | user_x | 10.2.2.10 | 16003 |
Sessionid1 se trouve dans l'expression TIMEWINDOW, mais sessionid 2 est arrêté car le TIMEWINDOW de 3600 est dépassé.