Opisywanie funkcji obsługi okien

Ukończone

Funkcje obsługi okien to operacje wykonywane względem danych zawartych w oknie czasowym lub w oknie czasowym. Okno zawiera dane zdarzenia na osi czasu. Korzystanie z obsługi okien umożliwia agregowanie zdarzeń w różnych przedziałach czasu w zależności od określonych definicji okien.

W aplikacjach, które przetwarzają zdarzenia w czasie rzeczywistym, obliczenia w czasie lub agregacje, takie jak zliczanie, ile razy zdarzenie ma miejsce w danym okresie, są często używanym wzorcem. Możliwość łatwego wykonywania zapytań w segmentach czasu jest podstawową koniecznością dla systemów przetwarzania zdarzeń. Azure Stream Analytics obejmuje natywną obsługę pięciu rodzajów funkcji obsługi okien czasowych. Te funkcje umożliwiają opracowywanie zaawansowanych rozwiązań analitycznych w czasie rzeczywistym przy użyciu prostego, deklaratywnego języka przypominacego SQL z osadzoną obsługą logiki czasowej.

Obsługiwane funkcje obsługi okien to Tumbling, Przeskakiwane, Przesuwanie, Sesjai Migawka.

Tumbling

Funkcje okna tygowania segmentują strumień danych na ciągłą serię nienakładających się segmentów czasu o stałym rozmiarze i działają na nich. Zdarzenia nie mogą należeć do więcej niż jednego okna tygowania.

Diagram przedstawia strumień z serią zdarzeń zamapowanych na 10-minutowe okna tyg.

Przykład okna tumowania reprezentowany przez poniższe zapytanie zlicza, ile razy każde zdarzenie występuje w 10-minutowym oknie. Funkcje obsługi okien są stosowane Stream Analytics zadaniach przy użyciu klauzuli GROUP BY składni zapytania. Klauzula GROUP BY w poniższym zapytaniu zawiera TumblingWindow() funkcję , która określa 10-minutowy rozmiar okna.

SELECT EventName, COUNT(*) AS Count
FROM EventStream TIMESTAMP BY EventTimestamp
GROUP BY EventName, TumblingWindow(minute, 10)

Azure Stream Analytics okna otwierają się w czasie rozpoczęcia okna i zamykają się po godzinie zakończenia okna. W powyższym przykładzie, jeśli okno 10-minutowe występuje od 12:00 do 12:10, okno będzie zawierać wszystkie zdarzenia o znaczniku czasu większym niż 12:00 i do 12:10 włącznie. Domyślnie okna są włącznie z końcem okna i wykluczają się od początku. Można jednak użyć Offset parametru , aby zmienić to zachowanie. Dane wyjściowe okna będą pojedynczym zdarzeniem opartym na funkcji agregowania używanej z sygnaturą czasową równą godzinie zakończenia okna. Wszystkie funkcje obsługi okien wyprowadzają wyniki na końcu określonego okna.

Hopping

Model funkcji okien przeskoków zaplanowane nakładające się okna, skoki do przodu w czasie o stały okres. Prawdopodobnie najłatwiej jest myśleć o nich jak o oknach tumowania, które mogą się nakładać i być emitowane częściej niż rozmiar okna. W rzeczywistości okna tygowania są po prostu oknem przeskokowym, hop którego wartość jest równa wartości size . W przypadku korzystania z okien przeskok zdarzenia mogą należeć do więcej niż jednego zestawu wyników okna.

Diagram przedstawia strumień z serią zdarzeń. Pola reprezentują każde okno przeskoki i zdarzenia, które są liczone jako część tego okna. Przeskok wynosi 5, a rozmiar to 10

Aby utworzyć okno przeskoki, należy określić trzy parametry. Pierwszy parametr wskazuje jednostkę czasu, taką jak sekunda, minuta lub godzina. Poniższy parametr ustawia rozmiar okna, który określa, jak długo trwa każde okno. Ostatnim wymaganym parametrem jest rozmiar przeskoku, który określa, ile okna przesuwa się do przodu względem poprzedniego. Opcjonalnie można użyć czwartego parametru oznaczający rozmiar przesunięcia.

Poniższe zapytanie demonstruje użycie wartości HoppingWindow() , w której wartość jest timeunit ustawiona na second . Jest windowsize to 10 sekund, a hopsize 5 sekund. To zapytanie zwraca zdarzenie co pięć sekund zawierające liczbę zdarzeń, które wystąpiły w ciągu ostatnich 10 sekund.

-- Count the number of times each event occurs every 10 seconds
SELECT EventName, COUNT(*) AS Count
FROM EventStream TIMESTAMP BY EventTimestamp
GROUP BY EventName, HoppingWindow(second, 10, 5)

Przesuwne

Przesuwanie okien generuje zdarzenia dla punktów w czasie, gdy zawartość okna rzeczywiście się zmieniła. Aby ograniczyć liczbę okien, które należy wziąć pod uwagę, Azure Stream Analytics zwraca zdarzenia tylko dla tych punktów w czasie, gdy zdarzenie zostało wprowadzone lub zostało wychodzące z okna. W związku z tym każde okno zawiera co najmniej jedno zdarzenie. Zdarzenia w oknach przesuwanych mogą należeć do więcej niż jednego okna przesuwanego, podobnie jak okna przesuwane.

Diagram przedstawia strumień z serią zdarzeń zamapowanych na przesuwane okna o 10 minutach.

Poniższe zapytanie używa funkcji , aby znaleźć zdarzenia, które miały miejsce SlidingWindow() więcej niż trzy razy w ciągu ostatnich dziesięciu minut.

SELECT
    DateAdd(minute,-5,System.Timestamp()) AS WinStartTime,
    System.Timestamp() AS WinEndTime,
    EventName,
    COUNT(*) AS Count
FROM EventStream TIMESTAMP BY EventTimestamp
GROUP BY EventName, SlidingWindow(minute, 10)
HAVING COUNT(*) > 3

Sesja

Funkcje okna sesji klastrują zdarzenia, które docierają w podobnym czasie, filtrując okresy, w których nie ma żadnych danych. Ma trzy podstawowe parametry: limit czasu, maksymalny czas trwania i klucz partycjonowania (opcjonalnie).

Diagram przedstawia strumień z serią zdarzeń zamapowanych na okna sesji z limitem czasu na 5 minut i maksymalnym czasem trwania 10 minut.

Wystąpienie pierwszego zdarzenia uruchamia okno sesji. Załóżmy, że w ciągu określonego limitu czasu od ostatniego pozyskanego zdarzenia wystąpi inne zdarzenie. W takim przypadku okno zostanie rozszerzone w celu uwzględnienia nowego zdarzenia. Jeśli jednak żadne inne zdarzenia nie wystąpią w określonym przedziale czasu, okno zostanie zamknięte w tym czasie. Jeśli zdarzenia będą nadal się działy w określonym czasie, okno sesji będzie się wydłużać do momentu osiągnięciu maksymalnego czasu trwania.

Następujące zapytanie mierzy długość sesji użytkownika przez utworzenie danych strumienia kliknij przycisku o długości SessionWindow timeoutsize 5 minut i maximumdurationsize 60 minut.

-- Output the count of events that occur within 2 minutes of each other with a maximum duration of 60 minutes.
SELECT
    Username,
    MIN(ClickTime) AS WindowStart,
    System.Timestamp() AS WindowEnd,
    DATEDIFF(s, MIN(ClickTime), System.Timestamp()) AS DurationInSeconds
FROM Clickstream TIMESTAMP BY ClickTime
GROUP BY Username, SessionWindow(minute, 2, 60) OVER (PARTITION BY Username)

Powyższe zapytanie definiuje również klucz partycjonowania Username . Dzięki kluczom partycji zdarzenia są grupowane według klucza, a okno sesji jest stosowane niezależnie do każdej grupy. To grupowanie jest przydatne w przypadkach, gdy potrzebujesz różnych okien sesji dla różnych użytkowników lub urządzeń. Partycjonowanie zdefiniowane w powyższym zapytaniu oznacza, że każdy z nich Username jest śledzony w niezależnym oknie sesji. Dla każdego okna to zapytanie wygeneruje dane wyjściowe zawierające , czas rozpoczęcia okna ( ), koniec okna ( ) i łączny czas trwania Username WindowStart sesji użytkownika ( WindowEnd DurationInSeconds ).

Snapshot

Okna migawek grupuje zdarzenia według identycznych wartości znaczników czasu. W przeciwieństwie do innych typów obsługi okien funkcja określonego okna (taka jak SessionWindow()nie jest wymagana. Okno migawki można stosować, dodając System.Timestamp() do klauzuli GROUP BY zapytania.

Diagram przedstawia strumień z serią zdarzeń zamapowanych na okna migawki.

Na przykład następujące zapytanie zwraca liczbę zdarzeń o tej samej nazwie, które występują dokładnie w tym samym czasie.

SELECT EventName, COUNT(*) AS Count
FROM EventStream TIMESTAMP BY EventTimestamp
GROUP BY EventName, System.Timestamp()

System.Timestamp() jest traktowany w klauzuli jako definicja okna migawki, ponieważ grupuje zdarzenia w okno na GROUP BY podstawie równości znaczników czasu.