Compartir a través de


LAST (Azure Stream Analytics)

El operador de análisis LAST permite buscar el evento más reciente en un flujo de eventos dentro de restricciones definidas. Resulta útil en escenarios como calcular el último valor correcto conocido (por ejemplo, no null), buscar la última vez que el evento coincida con determinados criterios, etc.

En Stream Analytics, el ámbito de LAST (es decir, lo lejos del historial del evento actual que necesita buscar) siempre se limita a un intervalo de tiempo finito, mediante la cláusula LIMIT DURATION. LAST puede limitarse opcionalmente a considerar solo los eventos que coinciden con el evento actual en una determinada propiedad o condición mediante las cláusulas PARTITION BY y WHEN. LAST no se ve afectado por predicados en la cláusula WHERE, condiciones de combinación en la cláusula JOIN o expresiones de agrupación en la cláusula GROUP BY de la consulta actual.

Observación: LAST(<expression>, <default>) es equivalente a LAG(<expression>, 0, <default>) (que es el valor de desplazamiento establecido en '0'). Tenga en cuenta que LAG(<expression>, 0, <default>) no es realmente una construcción válida, ya que LAG toma un desplazamiento mayor o igual que 1. Por lo tanto, debe usar el operador LAST en su lugar, que se introdujo para mayor comodidad y mejor legibilidad.

Sintaxis

LAST(<scalar_expression >, [<default>])    
       OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])  
  

Argumentos

scalar_expression

Valor que se va a devolver. Es una expresión de cualquier tipo que devuelve un único valor (escalar) o la expresión de carácter comodín ' *'. Para '*' se devolverá todo el evento y se incluirá en el evento de resultado (registro anidado). scalar_expression no puede contener otras funciones de análisis ni funciones externas.

default

Valor que se va a devolver cuando no hay ningún criterio de coincidencia de eventos. Si no se especifica ningún valor predeterminado, se devuelve NULL. 'No event' puede ser el caso si no hay ningún evento anterior dentro del intervalo de tiempo especificado en el limit_duration_clause o el evento existe, pero no coincide con la condición especificada en el when_clause. Si el evento existe y el valor de scalar_expression es NULL, se devuelve NULL. default puede ser una columna, subconsulta u otra expresión, pero no puede contener otras funciones analíticas ni funciones externas. default debe tener exactamente el mismo tipo que scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause La cláusula partition BY <partition key> solicita que solo los eventos cuyo valor de
<la clave> de partición es la misma que la del evento actual que se debe tener en cuenta.

limit_duration_clause DURATION(<unit>, <length>):
Especifica la cantidad de historial del evento actual que se debe tener en cuenta. Para ver una descripción detallada de las unidades que se admiten y sus abreviaturas, consulte DATEDIFF. Si no se encuentran suficientes eventos coincidentes dentro del intervalo DURATION, se devuelve el <valor predeterminado> .

when_clause Especifica una condición booleana para los eventos que se deben tener en cuenta en último cálculo. Si no se encuentra ningún evento coincidente dentro del intervalo DURATION, se devuelve el <valor predeterminado> . El when_clause es opcional.

Tipos de valor devuelto

El tipo de datos del valor de scalar_expression especificado. Se devuelve NULL si scalar_expression

Notas generales

LAST es no determinista. Los eventos se procesan en orden temporal. Si hay varios eventos con la misma marca de tiempo, estos se procesan en el orden de llegada.

Aplicar LAST en el conjunto de resultados de una función de ventana puede producir resultados inesperados. Las funciones de ventana modifican la marca de tiempo de los eventos, ya que cada operación de ventana genera un evento al final de la ventana. Se puede tener acceso a la marca de tiempo actual de un evento con system.timestamp(), después de una operación de ventana que difiere del atributo de hora del evento original. Si LAST no se puede mover antes de la operación de ventana, considere la posibilidad de usar CollectTop, ordenando por la hora del evento original.

Ejemplos

Busque la lectura más reciente del sensor distinto de NULL:

SELECT  
       sensorId,   
       LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
FROM input   

Buscar la última vez que la lectura era mayor que 50:

SELECT
       sensorId,
       LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input 

Consulte también

ISFIRST (Azure Stream Analytics)
LAG (Análisis de transmisiones de Azure)