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:

Tabla 1. Expresiones de consulta transaccional de AQL
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 categoría de suceso 16001 indica un suceso de inicio de sesión o cierre de sesión de usuario en la consola, y la categoría de suceso 16003 indica que un usuario ha iniciado un proceso, como por ejemplo iniciar una copia de seguridad o generar un informe.

La tabla siguiente muestra los resultados de la consulta que utiliza BEGIN y END.

Tabla 2. Resultados de la consulta 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
Nota: Sessionid 2 consta de un solo suceso que lo cierra (categoría 16003). Una sesión que tiene un evento es una excepción y puede suceder.

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.

Tabla 3. Resultados de consulta 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.

Tabla 4. Resultados de consulta 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.

Tabla 5. Resultados de la consulta 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.

Tabla 6. Resultados de la consulta 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.

Tabla 7. Resultados de la consulta 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.