beolvasási operátor

A predikátumok alapján beolvassa az adatokat, az egyezéseket és a buildeket.

Az egyező rekordok meghatározása az operátor lépéseiben meghatározott predikátumok alapján történik. A predikátumok az előző lépések által létrehozott állapottól függhetnek. Az egyező rekord kimenetét az operátor lépéseiben meghatározott bemeneti rekord és hozzárendelések határozzák meg.

Syntax

T| scan [ with_match_id=MatchIdColumnName ] [ declare(ColumnDeclarations) ] with(StepDefinitions)

ColumnDeclarations szintaxis

ColumnName:ColumnType[=DefaultValue ] [, ... ]

StepDefinition szintaxis

stepStepName [ output | | alllastnone = ] :Feltétel [ =>Oszlop-hozzárendelés= [, ... ] ];

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
T string ✔️ A bemeneti táblázatos forrás.
MatchIdColumnName string A vizsgálat végrehajtásának részeként a kimenethez hozzáfűzött típusú long oszlop neve. A rekord egyezésének 0-alapú indexét jelzi.
ColumnDeclarations string Deklarálja a T sémájának kiterjesztését. Ezek az oszlopok a lépésekben vannak hozzárendelve értékekhez. Ha nincs hozzárendelve, a rendszer a DefaultValue értéket adja vissza. Ha másként nincs megadva, a DefaultValue értéke .null
StepName string ✔️ A feltételek és hozzárendelések vizsgálatának állapotában lévő értékekre való hivatkozásra szolgál. A lépés nevének egyedinek kell lennie.
Feltétel string ✔️ Olyan kifejezés, amely kiértékeli vagy truefalse meghatározza, hogy a bemenet mely rekordjai egyeznek meg a lépéssel. Egy rekord megegyezik azzal a lépéssel, amikor a feltétel true a lépés állapotával vagy az előző lépés állapotával van.
Hozzárendelés string Skaláris kifejezés, amely akkor van hozzárendelve a megfelelő oszlophoz, ha egy rekord megfelel egy lépésnek.
output string A lépés kimeneti logikáját szabályozza az ismétlődő egyezéseken. all a lépésnek megfelelő összes rekordot kimeneteli, last csak a lépéshez tartozó ismétlődő egyezések sorozatának utolsó rekordját adja ki, és none nem a lépésnek megfelelő rekordokat adja ki. A mező alapértelmezett értéke: all.

Válaszok

Rekord egy rekord minden egyes egyezéséhez a bemenettől a lépésig. A kimenet sémája a záradék oszlopával declare bővített forrás sémája.

Pásztázó logika

scan átmegy a szerializált bemeneti adatokon, rekordonként rögzíti, összehasonlítja az egyes rekordokat az egyes lépések feltételével, és figyelembe veszi az egyes lépések aktuális állapotát.

Állapot

Az operátor mögöttes állapota scan olyan táblázatnak tekinthető, amely minden stepegyes sorhoz tartozik. Minden lépés fenntartja a saját állapotát az oszlopok legújabb értékeivel és az összes előző lépés és az aktuális lépés deklarált változóival. Adott esetben a folyamatban lévő sorozat egyezés-azonosítóját is tartalmazza.

Ha egy vizsgálati operátornak ns_1,s_2, ..., s_n nevű lépése van, akkor a s_k lépés k rekordjai s_1,s_2, ..., s_k. A StepName. A ColumnName formátum egy állapotban lévő értékre való hivatkozásra szolgál. Például s_2.col1 a s_k állapotában lévő s_2 lépéshez tartozó oszlopra col1 hivatkozna. Részletes példát a vizsgálati logika útmutatójában talál.

Az állapot üresen indul, és minden alkalommal frissül, amikor egy beolvasott bemeneti rekord megfelel egy lépésnek. Ha az aktuális lépés állapota nem megfelelő, a lépést aktív sorozatnak nevezzük.

Egyező logika

Minden bemeneti rekord kiértékelése fordított sorrendben történik, az utolsó lépéstől az elsőig. Ha egy rekord r kiértékelése egy s_k lépésen történik, a rendszer a következő logikát alkalmazza:

  • 1. ellenőrzés: Ha az előző lépés (s_k-1) állapota nem megfelelő, és az r megfelel a s_kfeltételének, akkor egyezés történik. Az egyezés a következő műveletekhez vezet:

    1. A s_k állapota törlődik.
    2. A s_k-1 állapota a s_k állapotává lesz előléptetve.
    3. A s_k hozzárendeléseinek kiszámítása és kiterjesztése r.
    4. A kiterjesztett r hozzá lesz adva a kimenethez és a s_k állapotához.

    Megjegyzés

    Ha az 1. ellenőrzés egyezést eredményez, a 2. ellenőrzés figyelmen kívül lesz hagyva, és az r tovább lép a s_k-1 alapján történő kiértékelésre.

  • 2. ellenőrzés: Ha a s_k állapota aktív sorozattal rendelkezik, vagy s_k az első lépés, és az r megfelel a s_kfeltételének, akkor egyezés történik. Az egyezés a következő műveletekhez vezet:

    1. A s_k hozzárendeléseinek kiszámítása és kiterjesztése r.
    2. A s_k állapotában s_k ábrázoló értékek helyébe a kiterjesztett r érték kerül.
    3. Ha s_k definiálva output=allvan, akkor a kiterjesztett r lesz hozzáadva a kimenethez.
    4. Ha s_k az első lépés, egy új sorozat kezdődik, és az egyezés azonosítója a következővel 1nő: . Ez csak akkor befolyásolja a kimenetet, ha with_match_id használatban van.

Ha a s_k ellenőrzése befejeződött, az r továbbhalad az s_k-1-hez való kiértékeléshez.

Ennek a logikának a részletes példájáért tekintse meg a vizsgálati logika útmutatóját.

Példák

Összesített összeg

Egy bemeneti oszlop összegének kiszámítása. A példa eredménye egyenértékű a row_cumsum() használatával.

range x from 1 to 5 step 1 
| scan declare (cumulative_x:long=0) with 
(
    step s1: true => cumulative_x = x + s1.cumulative_x;
)

Kimenet

x cumulative_x
1 1
2 3
3 6
4 10
5 15

Összeg összegének összege több oszlopon alaphelyzetbe állítási feltétellel

Számítsa ki a két bemeneti oszlop összesített összegét, állítsa vissza az összeg értékét az aktuális rekordértékre, amikor az összeg elérte a 10-et vagy több értéket.

range x from 1 to 5 step 1
| extend y = 2 * x
| scan declare (cumulative_x:long=0, cumulative_y:long=0) with 
(
    step s1: true => cumulative_x = iff(s1.cumulative_x >= 10, x, x + s1.cumulative_x), 
                     cumulative_y = iff(s1.cumulative_y >= 10, y, y + s1.cumulative_y);
)

Kimenet

x é cumulative_x cumulative_y
1 2 1 2
2 4 3 6
3 6 6 12
4 8 10 8
5 10 5 18

Oszlop kitöltése előre

Sztringoszlop kitöltése. Minden üres értékhez az utolsóként látható nonempty érték lesz hozzárendelve.

let Events = datatable (Ts: timespan, Event: string) [
    0m, "A",
    1m, "",
    2m, "B",
    3m, "",
    4m, "",
    6m, "C",
    8m, "",
    11m, "D",
    12m, ""
]
;
Events
| sort by Ts asc
| scan declare (Event_filled: string="") with 
(
    step s1: true => Event_filled = iff(isempty(Event), s1.Event_filled, Event);
)

Kimenet

Ts Esemény Event_filled
00:00:00 A A
00:01:00 A
00:02:00 B B
00:03:00 B
00:04:00 B
00:06:00 C C
00:08:00 C
00:11:00 T T
00:12:00 T

Munkamenetek címkézése

Ossza fel a bemenetet munkamenetekre: a munkamenet a munkamenet első eseménye után 30 perccel ér véget, majd egy új munkamenet kezdődik. Figyelje meg a jelölő használatát with_match_id , amely egyedi értéket rendel a vizsgálat minden egyes különálló egyezéséhez (munkamenetéhez). Vegye figyelembe a példában szereplő két lépés speciális használatát is, amely feltételként szolgáltrue, inSession így rögzíti és kimenetként adja ki a bemenet összes rekordját, miközben endSession rögzíti azokat a sessionStart rekordokat, amelyek az aktuális egyezés értékétől több mint 30 m-et fordulnak elő. A endSession lépés azt output=none jelenti, hogy nem hoz létre kimeneti rekordokat. A endSession lépés az aktuális egyezés állapotának a-ról inSessionendSessiona-ra való előléptetésére szolgál, így az aktuális rekordtól kezdve új egyezés (munkamenet) kezdődhet.

let Events = datatable (Ts: timespan, Event: string) [
    0m, "A",
    1m, "A",
    2m, "B",
    3m, "D",
    32m, "B",
    36m, "C",
    38m, "D",
    41m, "E",
    75m, "A"
]
;
Events
| sort by Ts asc
| scan with_match_id=session_id declare (sessionStart: timespan) with 
(
    step inSession: true => sessionStart = iff(isnull(inSession.sessionStart), Ts, inSession.sessionStart);
    step endSession output=none: Ts - inSession.sessionStart > 30m;
)

Kimenet

Ts Esemény sessionStart session_id
00:00:00 A 00:00:00 0
00:01:00 A 00:00:00 0
00:02:00 B 00:00:00 0
00:03:00 T 00:00:00 0
00:32:00 B 00:32:00 1
00:36:00 C 00:32:00 1
00:38:00 T 00:32:00 1
00:41:00 E 00:32:00 1
01:15:00 A 01:15:00 2

Események a Start és a Leállítás között

Keresse meg az esemény Start és az 5 percen belül bekövetkező eseménysorozatok Stop mindegyikét. Rendeljen hozzá egyezés-azonosítót az egyes sorozatokhoz.

let Events = datatable (Ts: timespan, Event: string) [
    0m, "A",
    1m, "Start",
    2m, "B",
    3m, "D",
    4m, "Stop",
    6m, "C",
    8m, "Start",
    11m, "E",
    12m, "Stop"
]
;
Events
| sort by Ts asc
| scan with_match_id=m_id with 
(
    step s1: Event == "Start";
    step s2: Event != "Start" and Event != "Stop" and Ts - s1.Ts <= 5m;
    step s3: Event == "Stop" and Ts - s1.Ts <= 5m;
)

Kimenet

Ts Esemény m_id
00:01:00 Indítás 0
00:02:00 B 0
00:03:00 T 0
00:04:00 Leállítás 0
00:08:00 Indítás 1
00:11:00 E 1
00:12:00 Leállítás 1

Események egyéni tölcsérének kiszámítása

Számítsa ki a sorozat Hail tölcsérkiegészítését –>Tornado az>Thunderstorm WindState események közötti időpontokra vonatkozó egyéni küszöbértékekkel (Tornadobelül 1h és Thunderstorm Wind belül).2h Ez a példa hasonló a funnel_sequence_completion beépülő modulhoz, de nagyobb rugalmasságot tesz lehetővé.

StormEvents
| partition hint.strategy=native by State 
    (
    sort by StartTime asc
    | scan with 
    (
        step hail: EventType == "Hail";
        step tornado: EventType == "Tornado" and StartTime - hail.StartTime <= 1h;
        step thunderstormWind: EventType == "Thunderstorm Wind" and StartTime - tornado.StartTime <= 2h;
    )
    )
| summarize dcount(State) by EventType

Kimenet

EventType dcount_State
Jégeső 50
Tornádó 34
Zivatar szél 32

Logikai útmutató beolvasása

Ez a szakasz a beolvasási logikát mutatja be a kezdés és a leállítás közötti események részletes útmutatójának használatával:

let Events = datatable (Ts: timespan, Event: string) [
    0m, "A",
    1m, "Start",
    2m, "B",
    3m, "D",
    4m, "Stop",
    6m, "C",
    8m, "Start",
    11m, "E",
    12m, "Stop"
]
;
Events
| sort by Ts asc
| scan with_match_id=m_id with 
(
    step s1: Event == "Start";
    step s2: Event != "Start" and Event != "Stop" and Ts - s1.Ts <= 5m;
    step s3: Event == "Stop" and Ts - s1.Ts <= 5m;
)

Az állapot

Az operátor állapotát scan úgy tekinti, mint egy táblát, amelyben minden lépéshez tartozik egy sor, amelyben minden lépésnek saját állapota van. Ez az állapot az oszlopok és a deklarált változók legújabb értékeit tartalmazza az összes előző lépésből és az aktuális lépésből. További információ: Állapot.

Ebben a példában az állapot a következő táblával ábrázolható:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 X X
s3

Az "X" azt jelzi, hogy egy adott mező irreleváns az adott lépéshez.

Az egyező logika

Ez a szakasz a tábla minden rekordján végigköveti az Eventsegyező logikát, amely az állapot és a kimenet minden lépésben történő átalakítását ismerteti.

Megjegyzés

A bemeneti rekordokat a rendszer fordított sorrendben értékeli ki, az utolsó lépéstől (s3) az első lépésig (s1).

1. rekord

Ts Esemény
0m "A"

A kiértékelés rögzítése az egyes lépéseknél:

  • s3: Az 1. ellenőrzés nem lett átadva, mert az állapota s2 üres, és a 2. ellenőrzés nem lett átadva, mert s3 nincs aktív sorozat.
  • s2: Az 1. ellenőrzés nem lett átadva, mert az állapota s1 üres, és a 2. ellenőrzés nem lett átadva, mert s2 nincs aktív sorozat.
  • s1: Az 1. ellenőrzés irreleváns, mert nincs előző lépés. A 2. ellenőrzés nem lett átadva, mert a rekord nem felel meg a feltételnek Event == "Start". Az 1. rekord elvetése az állapot vagy a kimenet befolyásolása nélkül történik.

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 X X
s3

2. rekord

Ts Esemény
1m "Start"

A kiértékelés rögzítése az egyes lépéseknél:

  • s3: Az 1. ellenőrzés nem lett átadva, mert az állapota s2 üres, és a 2. ellenőrzés nem lett átadva, mert s3 nincs aktív sorozat.
  • s2: Az 1. ellenőrzés nem lett átadva, mert az állapota s1 üres, és a 2. ellenőrzés nem lett átadva, mert s2 nincs aktív sorozat.
  • s1: Az 1. ellenőrzés irreleváns, mert nincs előző lépés. A 2. ellenőrzés azért lett átadva, mert a rekord megfelel a feltételnek Event == "Start". Ez az egyezés elindít egy új sorozatot, és a m_id hozzá van rendelve. A 2. rekord és annak m_id (0) hozzáadása az állapothoz és a kimenethez.

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 0 00:01:00 "Start" X X X X
s2 X X
s3

3. rekord

Ts Esemény
2m "B"

A kiértékelés rögzítése az egyes lépéseknél:

  • s3: Az 1. ellenőrzés nem lett átadva, mert az állapota s2 üres, és a 2. ellenőrzés nem lett átadva, mert s3 nincs aktív sorozat.
  • s2: Az 1-et azért adták át, mert az állapota s1 nem megfelelő, és a rekord megfelel a feltételnek Ts - s1.Ts < 5m. Ez a megfeleltetés miatt az állapot s1 törlődik, a sorrend pedig s1 előléptethető a következőre s2: . A 3. rekord és annak m_id (0) hozzáadása az állapothoz és a kimenethez.
  • s1: Az 1. ellenőrzés nem releváns, mert nincs előző lépés, és a 2 . ellenőrzés nem lett átadva, mert a rekord nem felel meg a feltételnek Event == "Start".

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 0 00:01:00 "Start" 00:02:00 "B" X X
s3

4. rekord

Ts Esemény
3m "D"

A kiértékelés rögzítése az egyes lépéseknél:

  • s3: Az 1. ellenőrzés nem lett átadva, mert a rekord nem felel meg a feltételnek Event == "Stop", és a 2. ellenőrzés nem lett átadva, mert s3 nincs aktív sorozat.
  • s2: Az 1. ellenőrzés nem lett átadva, mert az állapota s1 üres. a 2. ellenőrzést adja át, mert megfelel a feltételnek Ts - s1.Ts < 5m. A 4. rekord és annak m_id (0) hozzáadása az állapothoz és a kimenethez. A rekord értékei felülírják a és s2.Eventa korábbi állapotértékeits2.Ts.
  • s1: Az 1. ellenőrzés nem releváns, mert nincs előző lépés, és a 2 . ellenőrzés nem lett átadva, mert a rekord nem felel meg a feltételnek Event == "Start".

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 0 00:01:00 "Start" 00:03:00 "D" X X
s3

5. rekord

Ts Esemény
4m "Leállítás"

A kiértékelés rögzítése minden lépésnél:

  • s3: Ellenőrizze, hogy az 1-e átadva, mert s2 nem megfelelő, és megfelel a s3 feltételnek Event == "Stop". Ez az egyezés törli az állapotot s2 , és a sorrendet s2 előlépteti a következőre: s3. Az 5. rekord és annak m_id (0) hozzáadása az állapothoz és a kimenethez.
  • s2: Az 1. ellenőrzés nem lett átadva, mert az állapota s1 üres, és a 2. ellenőrzés nem lett átadva, mert s2 hiányzik az aktív sorozat.
  • s1: Az 1. ellenőrzés irreleváns, mert nincs előző lépés. Ellenőrizze, hogy a 2 nincs-e átadva, mert a rekord nem felel meg a feltételnek Event == "Start".

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 X X
s3 0 00:01:00 "Start" 00:03:00 "D" 00:04:00 "Leállítás"

6. rekord

Ts Esemény
6m "C"

A kiértékelés rögzítése minden lépésnél:

  • s3: Az 1. ellenőrzés nem lett átadva, mert az állapota s2 üres, és a 2. ellenőrzés nem lett átadva, mert s3 nem felel meg a s3 feltételnek.Event == "Stop"
  • s2: Az 1. ellenőrzés nem lett átadva, mert az állapota s1 üres, és a 2. ellenőrzés nem lett átadva, mert s2 hiányzik az aktív sorozat.
  • s1: Az 1 . ellenőrzés nem lett átadva, mert nincs előző lépés, és a 2 . ellenőrzés nincs átadva, mert nem felel meg a feltételnek Event == "Start". A 6. rekord elvetése az állapot vagy a kimenet befolyásolása nélkül történik.

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 X X
s3 0 00:01:00 "Start" 00:03:00 "D" 00:04:00 "Leállítás"

7. rekord

Ts Esemény
8m "Start"

A kiértékelés rögzítése minden lépésnél:

  • s3: Az 1. ellenőrzés nem lett átadva, mert az állapota s2 üres, és a 2. ellenőrzés nem lett átadva, mert nem felel meg a feltételnek Event == "Stop".
  • s2: Az 1. ellenőrzés nem lett átadva, mert az állapota s1 üres, és a 2. ellenőrzés nem lett átadva, mert s2 hiányzik az aktív sorozat.
  • s1: Ellenőrizze, hogy az 1 nincs-e átadva, mert nincs előző lépés. a 2. ellenőrzést adja át, mert megfelel a feltételnek Event == "Start". Ez az egyezés egy új sorozatot kezdeményez egy s1 újkal m_id. A 7. rekord és annak m_id (1) hozzáadása az állapothoz és a kimenethez.

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 1 00:08:00 "Start" X X X X
s2 X X
s3 0 00:01:00 "Start" 00:03:00 "D" 00:04:00 "Leállítás"

Megjegyzés

Most már két aktív sorozat van állapotban.

8. rekord

Ts Esemény
11 m "E"

A kiértékelés rögzítése minden lépésnél:

  • s3: Az 1. ellenőrzés nem lett átadva, mert az állapota s2 üres, és a 2. ellenőrzés nem lett átadva, mert nem felel meg a s3 feltételnek.Event == "Stop"
  • s2: Az 1-et azért adja át a rendszer, mert az állapota s1 nem megfelelő, és a rekord megfelel a feltételnek Ts - s1.Ts < 5m. Ez az egyezés törli az állapotot s1 , és a sorrendet s1 előlépteti a következőre: s2. A 8. rekord és annak m_id (1) hozzáadása az állapothoz és a kimenethez.
  • s1: Az 1. ellenőrzés irreleváns, mert nincs előző lépés, és a 2 . ellenőrzés nem lesz átadva, mert a rekord nem felel meg a feltételnek Event == "Start".

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 1 00:08:00 "Start" 00:11:00 "E" X X
s3 0 00:01:00 "Start" 00:03:00 "D" 00:04:00 "Leállítás"

9. rekord

Ts Esemény
12 m "Leállítás"

A kiértékelés rögzítése minden lépésnél:

  • s3: Ellenőrizze, hogy az 1-e átadva, mert s2 nem megfelelő, és megfelel a s3 feltételnek Event == "Stop". Ez az egyezés törli az állapotot s2 , és a sorrendet s2 előlépteti a következőre: s3. A 9. rekord és annak m_id (1) hozzáadása az állapothoz és a kimenethez.
  • s2: Az 1. ellenőrzés nem lett átadva, mert az állapota s1 üres, és a 2. ellenőrzés nem lett átadva, mert s2 hiányzik az aktív sorozat.
  • s1: Ellenőrizze, hogy az 1 nincs-e átadva, mert nincs előző lépés. a 2. ellenőrzést adja át, mert megfelel a feltételnek Event == "Start". Ez az egyezés egy új sorozatot kezdeményez egy s1 újkal m_id.

Állami:

lépés m_id s1. Ts s1. Esemény s2. Ts s2. Esemény s3. Ts s3. Esemény
s1 X X X X
s2 X X
s3 1 00:08:00 "Start" 00:11:00 "E" 00:12:00 "Leállítás"

Végső kimenet

Ts Esemény m_id
00:01:00 Indítás 0
00:02:00 B 0
00:03:00 T 0
00:04:00 Leállítás 0
00:08:00 Indítás 1
00:11:00 E 1
00:12:00 Leállítás 1