Compartilhar via


Windows (Azure Stream Analytics)

A janela fornece uma maneira de agregar eventos em vários intervalos de tempo, dependendo de definições de janela específicas. Há quatro tipos de janelas temporais para escolher: Cascata, Salto, Deslizamento e Sessão.

A função Windows() estende esse conceito para calcular simultaneamente os resultados de várias definições de janela diferentes. A função Windows() permite que você especifique mais de uma definição de janela. A lógica de consulta é calculada para cada uma dessas definições de janela e o resultado é uma união de todos os resultados da janela.

Como o resultado da função Windows() contém uma combinação de várias janelas, você precisa distinguir entre os diferentes resultados. Isso é feito atribuindo uma identidade a cada janela que pode ser acessada usando a função do sistema System.Window(). Id. System.Window() retorna um registro com a ID como seu campo.

Há duas maneiras de definir o Windows:

  • Atribua identidades exclusivas usando a função Window(),Window ( ID , window_definition ), em que ID é uma identidade de window_definition e é um valor varchar(max) que não diferencia maiúsculas de minúsculas no constructo do Windows.

  • Sem identidades, nesse caso , System.Window(). A ID resulta em valor nulo.

Syntax

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

Observação

Os constructos do Windows não podem ser aninhados. As identidades devem ser fornecidas a todas as definições de janela ou fornecidas a nenhuma.

Há nomes de definição de janela abreviados, como "Em cascata", que podem ser usados no Windows() para evitar a repetição da palavra "janela", como em Windows(Window('MyWindow', TumblingWindow(…. Os nomes abreviados também podem ser usados fora do constructo do Windows.

Não é um erro usar System.Window(). Id sem o constructo do Windows, mas seu valor será nulo porque nenhuma identidade foi dada à janela.

Se as definições de janela forem especificadas usando a função Window(), todas as definições de janela deverão usar a função Window() e todas as IDs que não diferenciam maiúsculas de minúsculas deverão ser exclusivas. Nulo não é permitido.

Função System.Window()

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

A função retorna um valor do tipo Record que contém uma única ID de campo, que contém a identidade da janela à qual o evento pertence.

Exemplos

Crie uma janela para contar carros para cada uma das durações de 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 de tamanhos diferentes e filtre 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  

Confira também