System.Timestamp() (Stream Analytics)
Každá událost v každé fázi dotazu v Azure Stream Analytics má přidružené časové razítko. System.Timestamp() je systémová vlastnost, kterou lze použít k načtení časového razítka události.
Níže popisujeme, jak Azure Stream Analytics přiřazuje událostem časová razítka.
Časové razítko vstupních událostí
Časové razítko vstupní události lze definovat pomocí hodnoty sloupce (nebo výrazu) zadaného v klauzuli TIMESTAMP BY :
SELECT System.Timestamp() t
FROM input
TIMESTAMP BY MyTimeField
Pokud pro daný vstup není zadána klauzule TIMESTAMP BY, použije se jako časové razítko čas příjezdu události. Například čas události ve frontě se použije v případě vstupu centra událostí.
Časové razítko výsledné události
Při výpočtu je časovým razítkem výsledné události nejstarší logický čas, ve kterém lze tento výsledek určit.
Podívejme se, jak základní operace dotazů ve službě Azure Stream Analytics (filtry, projekce, agregace a spojení) generují časová razítka pro výsledek.
Projekce
SELECT
Prop1,
Prop2,
Prop3 - Prop4 / 12,
System.Timestamp() t
FROM input
Projekce nemění časové razítko události, časové razítko výsledku je stejné jako časové razítko vstupu.
Filtr
SELECT *
FROM input
WHERE prop1 > prop2
Filtry nemění časové razítko události. Časové razítko výsledku je stejné jako časové razítko vstupu.
OKNO GROUP BY v průběhu času
SELECT
userId,
AVG(prop1),
SUM(prop2),
System.Timestamp() t
FROM input
GROUP BY TumblingWindow(minute, 1), userId
Časové razítko výsledku agregace je konec časového období, kterému tento výsledek odpovídá. Přečtěte si články o vytváření oken (Azure Stream Analytics), které popisují různé typy oken v Azure Stream Analytics.
VNITŘNÍ SPOJENÍ
SELECT
System.Timestamp()
FROM input1
JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN 0 AND 10
Vnitřní spojení vytváří výsledky, které odpovídají párům událostí ze input1 a input2.
Událost, která představuje shodu události E1 ze input1 a e2 ze input2, je časového razítka označená nejnovějšími časovými razítky e1 a e2.
LEVÉ VNĚJŠÍ SPOJENÍ
SELECT
System.Timestamp()
FROM input1
LEFT JOIN input2
ON DATEDIFF(minute, input1, input2) BETWEEN -2 AND 10
Levý vnější spojení vytváří výsledky dvou typů. Některé odpovídají odpovídající dvojici událostí z input1 a input2; jiné odpovídají pouze události ze input1 a označují, že nebyla nalezena žádná odpovídající událost ze input2.
Události, které představují shodu (mají input1 i input2), jsou časového razítka označeny nejnovějšími časovými razítky odpovídajících vstupů (jako v případě inner JOIN výše).
Události, které představují neshody (input2 je NULL), jsou časové razítko nejnovější logický čas, ve kterém mohlo dojít k odpovídající události input2. Například ve výše uvedeném příkladu je to časové razítko input1 + 10 minut.