Sdílet prostřednictvím


Okno relace (Azure Stream Analytics)

Okna relací seskupují události, které přicházejí v podobných časech, a odfiltrují časová období, ve kterých nejsou žádná data. Funkce okna relace má tři hlavní parametry: časový limit, maximální dobu trvání a klíč dělení (volitelné).

Následující diagram znázorňuje datový proud s řadou událostí a jejich mapování na okna relace s časovým limitem 5 minut a maximální dobou trvání 10 minut.

Okno relace Stream Analytics

Okno relace začíná při výskytu první události. Pokud v zadaném časovém limitu od poslední ingestované události dojde k jiné události, okno se rozšíří o novou událost. Jinak pokud během časového limitu nedojde k žádným událostem, okno se při vypršení časového limitu zavře.

Pokud události stále probíhají v zadaném časovém limitu, okno relace se bude prodlužovat, dokud nebude dosaženo maximální doby trvání. Upozorňujeme, že maximální intervaly kontroly doby trvání jsou nastaveny na stejnou velikost jako zadaná maximální doba trvání. Pokud je například maximální doba trvání 10, provede se kontrola, jestli okno překročí maximální dobu trvání, při t = 0, 10, 20, 30 atd. To znamená, že skutečná doba trvání okna relace pak může být až dvakrát maxDuration.

Matematicky tedy okno relace končí, pokud je splněna následující podmínka:

Podmínky ukončení okna relace

Po zadání klíče oddílu se události seskupí podle klíče a okno relace se použije na každou skupinu nezávisle. To je užitečné v případech, kdy potřebujete různá okna relací pro různé uživatele nebo zařízení.

Syntax

{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]

{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]

Poznámka

Okno relace lze použít dvěma výše uvedenými způsoby.

Argumenty

timeunit Je časová jednotka pro velikost okna. V následující tabulce jsou uvedeny všechny platné argumenty časového intervalu.

Časová nit Zkratky
day dd, d
hour hh
minute mi, n
second ss, s
Milisekund Paní
mikrosekundy Mcs

velikost časového limitu

Velké celé číslo, které popisuje velikost mezery v okně relace. Data, která se vyskytují v rámci mezery, jsou seskupena ve stejném okně.

maxdurationsize

Pokud celková velikost okna překročí zadanou hodnotu maxDurationSize v kontrolním bodě, okno se zavře a ve stejném bodě se otevře nové okno. V současné době je velikost intervalu kontroly rovna maxDurationSize.

klíč oddílu

Volitelný parametr, který určuje klíč, se kterým okno relace pracuje. Pokud je tato hodnota zadána, okno seskupí pouze události stejného klíče.

Příklady

Předpokládejme, že máte následující data JSON:

[
  // time: the timestamp when the user clicks on the link
  // user_id: the id of the user
  // url: the url the user clicked on
  {
    "time": "2017-01-26T00:00:00.0000000z",
    "user_id": 0,
    "url": "www.example.com/a.html"
  },
  {
    "time": "2017-01-26T00:00:20.0000000z",
    "user_id": 0,
    "url": "www.example.com/b.html"
  },
  {
    "time": "2017-01-26T00:00:55.0000000z",
    "user_id": 1,
    "url": "www.example.com/c.html"
  },
  // ...
]

Pokud chcete změřit, jak dlouho jsou jednotlivé uživatelské relace, můžete použít následující dotaz:

CREATE TABLE localinput(time DATETIME, user_id BIGINT, url NVARCHAR(MAX))
SELECT
    user_id,
    MIN(time) AS window_start,
    System.Timestamp() AS window_end,
    DATEDIFF(s, MIN(time), System.Timestamp()) AS duration_in_seconds
FROM localinput TIMESTAMP BY time
GROUP BY user_id, SessionWindow(minute, 2, 60) OVER (PARTITION BY user_id)

Předchozí dotaz vytvoří okno relace s časovým limitem 2 minuty, maximální dobou trvání 60 minut a klíčem pro dělení user_id. To znamená, že pro každou user_id se vytvoří nezávislá okna relací. Pro každé okno tento dotaz vygeneruje výstup, který obsahuje user_id, čas zahájení okna (window_start), konec okna (window_end) a celkovou dobu trvání uživatelské relace (duration_in_seconds).