Windows (Azure Stream Analytics)

O windowsing fornece uma forma de agregar eventos ao longo de vários intervalos de tempo, consoante as definições de janela específicas. Existem quatro tipos de janelas temporais à escolha: Cascata, Salto, Deslizante e Sessão.

A função Windows() expande este conceito para calcular simultaneamente resultados de várias definições de janela diferentes. A função Windows() permite-lhe especificar mais do que uma definição de janela. A lógica de consulta é calculada para cada uma destas definições de janela e o resultado é uma união de todos os resultados da janela.

Uma vez que o resultado da função Windows() contém uma combinação de múltiplas janelas, tem de distinguir entre os diferentes resultados. Isto é feito ao atribuir uma identidade a cada janela que pode ser acedida com a função de sistema System.Window(). ID. System.Window() devolve um registo com o ID como campo.

Existem duas formas de definir o Windows:

  • Atribua identidades exclusivas através da função Window(),Window ( ID , window_definition ), em que O ID é uma identidade de window_definition e é um valor varchar(max) não sensível a maiúsculas e minúsculas exclusivo na construção do Windows.

  • Sem identidades, caso em que System.Window(). O ID resulta num valor nulo.

Syntax

| Windows ( window_definition, … ) 
| Windows ( Window ( id , window_definition ), … ) 
 
window_definition = 
| HoppingWindow ( … 
| TumblingWindow ( … 
| SlidingWindow ( … 
| SessionWindow ( … 
| Hopping ( … 
| Tumbling ( … 
| Sliding ( … 
| Session ( …  
  

Nota

As construções do Windows não podem ser aninhadas. As identidades têm de ser dadas a todas as definições de janela ou atribuídas a nenhuma.

Existem nomes de definições de janela abreviados, como "Em Cascata", que podem ser utilizados no Windows() para evitar a repetição da palavra "janela" como em Windows(Window('MyWindow', TumblingWindow(…. Os nomes abreviados também podem ser utilizados fora da construção do Windows.

Não é um erro utilizar System.Window(). ID sem a construção do Windows, mas o respetivo valor será nulo porque não foi dada nenhuma identidade à janela.

Se as definições de janela forem especificadas com a função Window(), todas as definições de janela têm de utilizar a função Window() e todos os IDs não sensíveis a maiúsculas e minúsculas têm de ser exclusivos. Não é permitido nulo.

Função System.Window()

A função System.Window() só pode ser utilizada na cláusula SELECT da instrução GROUP BY para obter metadados sobre a janela de tempo de agrupamento.

A função devolve um valor do tipo Registo que contém um ID de campo único, que contém a identidade da janela à qual o evento pertence.

Exemplos

Crie uma janela para contar carros para cada uma das durações 10, 20, 30, 40, 50 e 60 minutos sem identidade de janela.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        TumblingWindow(minute, 10), 
        TumblingWindow(minute, 20), 
        TumblingWindow(minute, 30), 
        TumblingWindow(minute, 40), 
        TumblingWindow(minute, 50), 
        TumblingWindow(minute, 60)) 

Crie janelas com um salto de 1 minuto e quatro durações diferentes – 1 min, 15 min, 30 min e 60 min.

SELECT 
    System.Window().Id, 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        Window('1 min', TumblingWindow(minute, 1)), 
        Window('15 min', HoppingWindow(minute, 15, 1)), 
        Window('30 min', HoppingWindow(minute, 30, 1)), 
        Window('60 min', HoppingWindow(minute, 60, 1))) 

Crie janelas com diferentes tamanhos e filtre os resultados com base na duração da janela especificada na tabela Referência.

WITH HoppingWindowResults AS
( 
    SELECT 
        System.Window().Id, 
        TollId, 
        COUNT(*) 
    FROM Input TIMESTAMP BY EntryTime 
    GROUP BY 
        TollId, 
        Windows( 
            Window('H10', Hopping(minute, 10, 5)), 
            Window('H20', Hopping(minute, 20, 5)), 
            Window('H30', Hopping(minute, 30, 5)), 
            Window('H40', Hopping(minute, 40, 5)), 
            Window('H50', Hopping(minute, 50, 5)), 
            Window('H60', Hopping(minute, 60, 5))) 
) 
 
SELECT HoppingWindowResults.* 
FROM HoppingWindowResults 
JOIN ReferenceTable ON  
    HoppingWindowResults.TollId = ReferenceTable.TollId 
    AND HoppingWindowResults.Id = ReferenceTable.windowId  

Ver também