Refinamientos de consultas transaccionales
Refine las consultas AQL transaccionales utilizando la expresión EXPLICIT con las expresiones BEGIN y END. Además, utilice las expresiones TIMEOUT y TIMEWINDOW para especificar intervalos de tiempo.
Utilice la expresión EXPLICIT con las expresiones BEGIN y END para aplicar un filtrado más preciso a las consultas transaccionales.
Por ejemplo, puede utilizar la expresión BEGIN con la expresión EXPLICIT END para capturar varios intentos de inicio de sesión no satisfactorios (BEGIN), seguidos de un inicio de sesión satisfactorio (EXPLICIT END).
Utilice las expresiones TIMEOUT y TIMEWINDOW para aplicar filtros de tiempo para las sesiones en las consultas transaccionales.
Expresiones
Utilice las expresiones que se describen a continuación para refinar la consulta AQL transaccional:
| Expresiones de consulta | Descripción |
|---|---|
| BEGIN | Se inicia una sesión cuando se obtiene un evento en el que se cumple la expresión BEGIN o el evento anterior finaliza la sesión. |
| INICIO EXPLÍCITO | Inicia una nueva sesión sólo si la expresión EXPLICIT BEGIN es true. |
| FIN | Una sesión finaliza cuando se obtiene un evento en el que la expresión END es true o el siguiente evento inicia una nueva sesión. |
| FIN EXPLÍCITO | Cierra la sesión actual sólo si la expresión EXPLICIT END es true. |
| TIEMPOESPERA | Cierra la sesión cuando transcurre el periodo TIMEOUT especificado desde el momento en que se ha producido el suceso anterior hasta el momento en que se ha producido el suceso actual. |
| VENTANA de tiempo | Realiza un seguimiento de la hora de la sesión. Cierra la sesión cuando transcurre el periodo TIMEWINDOW especificado desde el momento en que se ha producido el primer suceso hasta el momento en que se ha producido el suceso actual. |
- Sintaxis
SESSION BY <TimeExpression> <ExpressionList> [EXPLICIT] BEGIN <booleanExpression> [EXPLICIT] END <booleanExpression> TIMEOUT <IntegerLiteral millieseconds> TIMEWINDOW <IntegerLiteral SECONDS|MINUTES|HOURS|DAYS>
Los ejemplos siguientes muestran los ejemplos de resultados que se obtienen utilizando diferentes combinaciones de las expresiones de consulta disponibles:
Expresiones BEGIN y END
Una expresión BEGIN inicia una sesión cuando un evento coincide con la expresión BEGIN o el evento anterior finaliza la sesión.
Una expresión END finaliza una sesión cuando la expresión END es verdadera para un evento o cuando el siguiente evento inicia una nueva sesión.
Al utilizar la expresión EXPLICIT con las expresiones BEGIN y END, aplica un filtro más preciso que refina el conjunto de resultados.
Consulte los siguientes ejemplos de consultas y resultados.
El ejemplo de consulta siguiente utiliza expresiones BEGIN y 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'
La tabla siguiente muestra los resultados de la consulta que utiliza BEGIN y END.
| sessionID | start_time | nombre de usuario | IP de origen | categoría |
|---|---|---|---|---|
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16001 |
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16003 |
| 2 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16003 |
| 3 | 10/12/2016 16:00:10 | usuario_x | 10.2.2.10 | 16001 |
| 3 | 10/12/2016 16:00:10 | usuario_x | 10.2.2.10 | 16003 |
| 4 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16003 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16001 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16003 |
Expresiones EXPLICIT BEGIN y END
Los eventos se omiten cuando no se inicia una sesión y un evento no es un evento de 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'
La tabla siguiente muestra los resultados de la consulta que utiliza EXPLICIT BEGIN y END.
| sessionID | start_time | nombre de usuario | IP de origen | categoría |
|---|---|---|---|---|
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16001 |
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16003 |
| 2 | 10/12/2016 16:00:07 | usuario_x | 10.2.2.10 | 16001 |
| 2 | 10/12/2016 16:00:07 | usuario_x | 10.2.2.10 | 16003 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16001 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16003 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16003 |
| 4 | 10/12/2016 16:00:14 | usuario_x | 10.2.2.10 | 16001 |
| 5 | 10/12/2016 16:00:15 | usuario_x | 10.2.2.10 | 16001 |
| 5 | 10/12/2016 16:00:15 | usuario_x | 10.2.2.10 | 16003 |
Sólo se devuelven los sucesos que satisfacen la expresión EXPLICIT BEGIN .
Sessionid 2 y Sessionid 4 en EXPLICIT BEGIN y END no satisfacen la expresión EXPLICIT BEGIN .
BEGIN y EXPLICIT END
Cierre la sesión actual sólo si la expresión EXPLICIT END es true. No hay más comprobaciones para los eventos BEGIN en la sesión cuando la expresión EXPLICIT END es true.
Se pueden asociar varios eventos BEGIN en una sola sesión con una expresión EXPLICIT
END . Por ejemplo, puede utilizar la expresión EXPLICIT END para contar varios intentos de inicio de sesión fallidos seguidos de un inicio de sesión satisfactorio durante un intervalo de tiempo específico (tiempo de espera de sesión).
El ejemplo de consulta siguiente utiliza las expresiones BEGIN y 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'
La tabla siguiente muestra los resultados de la consulta que utiliza las expresiones BEGIN y EXPLICIT END.
| sessionID | start_time | nombre de usuario | IP de origen | categoría |
|---|---|---|---|---|
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16001 |
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16003 |
| 2 | 10/12/2016 16:00:07 | usuario_x | 10.2.2.10 | 16003 |
| 2 | 10/12/2016 16:00:10 | usuario_x | 10.2.2.10 | 16001 |
| 2 | 10/12/2016 16:00:10 | usuario_x | 10.2.2.10 | 16003 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16001 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16003 |
| 4 | 10/12/2016 16:00:12 | usuario_x | 10.2.2.10 | 16003 |
| 4 | 10/12/2016 16:00:12 | usuario_x | 10.2.2.10 | 16001 |
| 4 | 10/12/2016 16:00:12 | usuario_x | 10.2.2.10 | 16003 |
| 5 | 10 de diciembre de 2016, 16:00:13 | usuario_x | 10.2.2.10 | 16001 |
| 4 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16003 |
INICIO EXPLÍCITO y FIN EXPLÍCITO
Los sucesos se ignoran cuando no se inicia una sesión y un suceso no es un suceso EXPLICIT BEGIN.
Cierre la sesión actual sólo si la expresión EXPLICIT END es true. No hay más comprobaciones para los eventos BEGIN en la sesión cuando la expresión EXPLICIT END es true.
El ejemplo de consulta siguiente utiliza las expresiones EXPLICIT BEGIN y 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'
La tabla siguiente muestra los resultados de la consulta que utiliza las expresiones EXPLICIT BEGIN y EXPLICIT END.
| sessionID | start_time | nombre de usuario | IP de origen | categoría |
|---|---|---|---|---|
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16001 |
| 1 | 10/12/2016 16:00:06 | usuario_x | 10.2.2.10 | 16003 |
| 2 | 10/12/2016 16:00:10 | usuario_x | 10.2.2.10 | 16001 |
| 2 | 10/12/2016 16:00:10 | usuario_x | 10.2.2.10 | 16003 |
| 3 | 10/12/2016 16:00:11 | usuario_x | 10.2.2.10 | 16001 |
| 3 | 10/12/2016 16:00:12 | usuario_x | 10.2.2.10 | 16001 |
| 3 | 10/12/2016 16:00:12 | usuario_x | 10.2.2.10 | 16003 |
| 4 | 10 de diciembre de 2016, 16:00:13 | usuario_x | 10.2.2.10 | 16001 |
| 4 | 10/12/2016 16:00:14 | usuario_x | 10.2.2.10 | 16001 |
| 4 | 10/12/2016 16:00:14 | usuario_x | 10.2.2.10 | 16003 |
| 5 | 10/12/2016 16:00:15 | usuario_x | 10.2.2.10 | 16001 |
| 5 | 10/12/2016 16:00:15 | usuario_x | 10.2.2.10 | 16003 |
TIEMPOESPERA
Cierra la sesión cuando transcurre el periodo TIMEOUT especificado desde el momento en que se ha producido el suceso anterior hasta el momento en que se ha producido el suceso actual. El evento actual pasa a formar parte de una nueva sesión. El valor de TIMEOUT se especifica en milisegundos.
El ejemplo de consulta siguiente utiliza la expresión 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'
La tabla siguiente muestra los resultados de la consulta que utiliza la expresión TIMEOUT.
| sessionID | start_time | nombre de usuario | IP de origen | categoría |
|---|---|---|---|---|
| 1 | 10-12-2016 16:00:06.716 | usuario_x | 10.2.2.10 | 16003 |
| 2 | 10-12-2016 16:00:10.328 | usuario_x | 10.2.2.10 | 16001 |
Sessionid 1 finaliza y sessionid 2 se inicia porque se ha excedido el tiempo de espera de 3600.
VENTANA de tiempo
Realiza un seguimiento de la hora de la sesión. Cierra la sesión cuando transcurre el periodo TIMEWINDOW especificado desde el momento en que se ha producido el primer suceso hasta el momento en que se ha producido el suceso actual. El evento actual pasa a formar parte de una nueva sesión. El valor de TIMEWINDOW se puede especificar en segundos, minutos, horas o días.
El ejemplo de consulta siguiente utiliza la expresión 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'
La tabla siguiente muestra los resultados de la consulta que utiliza la expresión TIMEWINDOW.
| sessionID | start_time | nombre de usuario | IP de origen | categoría |
|---|---|---|---|---|
| 1 | 10-12-2016 16:00:06.415 | usuario_x | 10.2.2.10 | 16001 |
| 1 | 10-12-2016 16:00:06.433 | usuario_x | 10.2.2.10 | 16003 |
| 2 | 10-12-2016 16:00:06.716 | usuario_x | 10.2.2.10 | 16003 |
| 3 | 10-12-2016 16:00:10.328 | usuario_x | 10.2.2.10 | 16001 |
| 3 | 10-12-2016 16:00:06.328 | usuario_x | 10.2.2.10 | 16003 |
Sessionid 1 está dentro del tiempo de expresión TIMEWINDOW pero sessionid 2 ha finalizado porque se ha excedido el valor de TIMEWINDOW de 3600.