Compartir a través de


Cláusula GROUP

La cláusula GROUP hace que WMI genere una sola notificación para representar un grupo de eventos. La notificación representativa es una instancia de la clase del sistema __AggregateEvent. La clase del sistema __AggregateEvent contiene dos propiedades: Representative y NumberOfEvents. La propiedad Representative es un objeto incrustado que contiene una de las instancias recibidas durante el intervalo de agrupación especificado en la cláusula WITHIN. Por ejemplo, si se genera un evento agregado para notificar los eventos de modificación de instancias, Representative contiene una instancia de la clase __InstanceModificationEvent. La propiedad NumberOfEvents contiene el número de eventos recibidos durante el intervalo de agrupación. El intervalo de agrupación especifica el período de tiempo, después de recibir un evento inicial, durante el que WMI debe recopilar eventos similares.

La cláusula GROUP debe contener una cláusula WITHIN para especificar el intervalo de agrupación y puede contener la palabra clave BY o HAVING, o ambas. La cláusula GROUP se coloca después de la cláusula WHERE, como se muestra a continuación:

SELECT * FROM EventClass [WHERE property = value] 
    GROUP WITHIN interval [BY property_list]
    [HAVING NumberOfEvents operator integer]

El valor EventClass es la clase de evento de la que el evento es miembro y value es el valor de la propiedad sobre la que se necesita notificación. El intervalo es un entero sin signo que representa el intervalo de agrupación después de recibir el primer evento. El entero sin signo es un número de segundos. La lista de propiedades es una lista delimitada por comas de una o varias propiedades que se incluyen en la clase de eventos; operator es cualquier operador relacional; e integer es un entero de 32 bits sin signo que indica un número de eventos.

Cuando se usa la cláusula GROUP, las cláusulas WHERE, BY y HAVING son opcionales.

Un uso básico de la cláusula GROUP podría solicitar una agrupación de eventos dentro de un intervalo de tiempo que se inicia cuando se recibe el primer evento. Por ejemplo, en la siguiente consulta se agrupan todos los eventos de correo electrónico enviados en un plazo de cinco minutos. En lugar de avisar a un usuario cada vez que se recibe un correo electrónico nuevo, el consumidor permanente podría usar esta consulta para informar al usuario solo si se ha recibido un nuevo correo electrónico en los últimos cinco minutos.

SELECT * FROM EmailEvent GROUP WITHIN 300

Si se necesita información más detallada, los eventos se pueden agrupar mediante una o varias propiedades de la clase de eventos. En la consulta siguiente se solicita que los eventos de correo electrónico se combinen con otros eventos que tienen el mismo valor en la propiedad Sender:

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

Se puede lograr un nivel de detalle aún mayor si se agrega una cláusula WHERE. Por ejemplo, la siguiente consulta notifica a un usuario que hay un nuevo correo electrónico de un remitente determinado que ha llegado en los últimos 10 minutos, combinado con otros eventos que tienen el mismo valor en la propiedad Importance:

SELECT * FROM EventClass WHERE Sender = "MyBoss" 
  GROUP WITHIN 300 BY Importance