Windows (Azure Stream Analytics)

Обработка окон позволяет агрегировать события за различные интервалы времени в зависимости от конкретных определений окон. Существует четыре типа темпоральных окон: "Переворачивающееся", "Прыгающее", " Скользящее" и "Сеанс".

Функция Windows() расширяет эту концепцию для одновременного вычисления результатов нескольких различных определений окон. Функция Windows() позволяет указать несколько определений окна. Логика запроса вычисляется для каждого из этих определений окон, и результатом является объединение всех результатов окна.

Так как результат функции Windows() содержит сочетание нескольких окон, необходимо различать различные результаты. Это делается путем назначения удостоверения каждому окну, доступ к которому можно получить с помощью системной функции System.Window(). Идентификатор. System.Window() возвращает запись с полем Id.

Существует два способа определения Windows:

  • Назначьте уникальные удостоверения с помощью функции Window(),Window ( ID , window_definition ), где ID — это удостоверение window_definition и уникальное значение varchar(max) без учета регистра в конструкции Windows.

  • Без удостоверений, в этом случае System.Window(). Идентификатор приводит к значению NULL.

Синтаксис

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

Примечание

Конструкции Windows не могут быть вложенными. Удостоверения должны быть предоставлены всем определениям окон или никому.

Существуют сокращенные имена определений окон, например "Переворачивающиеся", которые можно использовать в Windows(), чтобы избежать повторения слова "окно", как в Windows(Window('MyWindow', TumblingWindow(…. Сокращенные имена также можно использовать вне конструкции Windows.

Использование System.Window() не является ошибкой. Идентификатор без конструкции Windows, но его значение будет иметь значение NULL, так как для окна не было предоставлено удостоверение.

Если определения окон указываются с помощью функции Window(), все определения окон должны использовать функцию Window(), а все идентификаторы без учета регистра должны быть уникальными. Значение NULL не допускается.

Функция System.Window()

Функция System.Window() может использоваться только в предложении SELECTинструкции GROUP BY для получения метаданных о временном окне группировки.

Функция возвращает значение типа Record , содержащее идентификатор одного поля, которое содержит идентификатор окна, к которому принадлежит событие.

Примеры

Создайте окно для подсчета автомобилей для каждой продолжительности 10, 20, 30, 40, 50 и 60 минут без удостоверения окна.

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)) 

Создайте окна с 1 минутой прыжка и четырьмя различными продолжительностью : 1 мин, 15 минут, 30 минут и 60 минут.

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))) 

Создавайте окна разных размеров и фильтруйте результаты в зависимости от длительности окна, указанной в эталонной таблице.

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  

См. также раздел