Aracılığıyla paylaş


tarama işleci

Verileri tarar, eşleştirir ve koşula göre diziler oluşturur.

Eşleşen kayıtlar, işlecin adımlarında tanımlanan koşula göre belirlenir. Koşul, önceki adımlarla oluşturulan duruma bağlı olabilir. Eşleşen kaydın çıktısı, işlecin adımlarında tanımlanan giriş kaydı ve atamaları tarafından belirlenir.

Sözdizimi

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

ColumnDeclarations söz dizimi

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

StepDefinition söz dizimi

stepStepName [ output | nonealllast = | ] : Condition [ => Sütun = Ataması [, ... ] ];

Söz dizimi kuralları hakkında daha fazla bilgi edinin.

Parametreler

Ad Tür Zorunlu Açıklama
T string ✔️ Giriş tablosal kaynağı.
MatchIdColumnName string Tarama yürütmesinin bir parçası olarak çıktıya eklenen türdeki long bir sütunun adı. Kayıt için eşleşmenin 0 tabanlı dizinini gösterir.
ColumnDeclarations string T şeması için bir uzantı bildirir. Bu sütunlara adımlarda değerler atanır. Atanmamışsa, DefaultValue döndürülür. Aksi belirtilmediği sürece DefaultValue değeridirnull.
StepName string ✔️ Koşulları ve atamaları tarama durumundaki değerlere başvurmak için kullanılır. Adım adı benzersiz olmalıdır.
Condition string ✔️ Girişten hangi kayıtların adımla eşleşdiğini tanımlayan veya false olarak değerlendirilen true bir ifade. Kayıt, koşul true adımın durumuyla veya önceki adımın durumuyla aynı olduğunda adımla eşleşir.
Atama string Bir kayıt bir adımla eşleştiğinde ilgili sütuna atanan skaler ifade.
output string Yinelenen eşleşmelerde adımın çıkış mantığını denetler. all adımla eşleşen tüm kayıtların çıkışını alır, last adım için yinelenen eşleşme dizisindeki yalnızca son kaydın çıktısını alır ve none adımla eşleşen kayıtların çıkışını vermez. Varsayılan değer: all.

Döndürülenler

Girişten bir adıma kaydın her eşleşmesi için bir kayıt. Çıkışın şeması, yan tümcesindeki sütunla genişletilmiş kaynağın declare şemasıdır.

Tarama mantığı

scan serileştirilmiş giriş verilerinin üzerinden geçer, kayda göre kayıt gerçekleştirir ve her bir kaydı her adımın geçerli durumunu dikkate alarak her adımın koşuluyla karşılaştırın.

Durum

İşlecin temel alınan durumu scan , her stepbiri için bir satırı olan bir tablo olarak düşünülebilir. Her adım, önceki adımların ve geçerli adımın tüm sütunlarının ve bildirilen değişkenlerin en son değerleriyle kendi durumunu korur. İlgiliyse, devam eden dizi için eşleşme kimliğini de tutar.

Tarama işlecinin s_1, s_2, ..., s_n adlı n adımı varsa, adım s_k s_1, s_2, ..., s_k karşılık gelen durumunda k kayıtları olur. StepName.ColumnName biçimi, durumdaki bir değere başvurmak için kullanılır. Örneğin, s_2.col1 s_k durumundaki adım s_2 ait olan sütuna col1 başvurur. Ayrıntılı bir örnek için tarama mantığı kılavuzuna bakın.

Durum boş başlar ve taranan bir giriş kaydı bir adımla eşleştiğinde güncelleştirilir. Geçerli adımın durumu boş olduğunda, adım etkin bir diziye sahip olarak adlandırılır.

Eşleşen mantık

Her giriş kaydı, son adımdan ilk adıma kadar tüm adımlara göre ters sırada değerlendirilir. Bir kayıt r s_k bir adıma göre değerlendirildiğinde aşağıdaki mantık uygulanır:

  • Denetim 1: Önceki adımın (s_k-1) durumu boşsa ve r s_k Koşulu'na uyuyorsa bir eşleşme oluşur. Eşleşme aşağıdaki eylemlere yol açar:

    1. s_k durumu temizlenir.
    2. s_k-1'in durumu, s_k durumuna yükseltilir.
    3. s_k atamaları hesaplanır ve r'yi genişletir.
    4. Genişletilmiş r, çıktıya ve s_k durumuna eklenir.

    Not

    Check 1 eşleşmeyle sonuçlanırsa, Denetim 2 göz ardı edilir ve r, s_k-1'e karşı değerlendirilmek üzere devam eder.

  • Denetim 2: s_k durumunun etkin bir sırası varsa veya ilk adım s_k ise ve r s_k Koşulu'na uyuyorsa bir eşleşme oluşur. Eşleşme aşağıdaki eylemlere yol açar:

    1. s_k atamaları hesaplanır ve r'yi genişletir.
    2. s_k durumundaki s_k temsil eden değerler genişletilmiş r değerleriyle değiştirilir.
    3. s_k olarak tanımlanırsa, genişletilmiş r çıktıya eklenir.output=all
    4. İlk adım s_k ise, yeni bir sıra başlar ve eşleşme kimliği tarafından 1artar. Bu yalnızca kullanıldığında çıkışı with_match_id etkiler.

s_k denetimleri tamamlandıktan sonra r, s_k-1'e karşı değerlendirilmek üzere devam eder.

Bu mantığın ayrıntılı bir örneği için tarama mantığı kılavuzuna bakın.

Örnekler

Birikmeli toplam

Giriş sütunu için birikmeli toplamı hesaplama. Bu örneğin sonucu, row_cumsum() kullanımıyla eşdeğerdir.

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

Çıktı

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

Sıfırlama koşuluyla birden çok sütunda toplu toplam

İki giriş sütunu için birikmeli toplamı hesaplayın, birikmeli toplam 10 veya daha fazla değere ulaştığında toplam değerini geçerli kayıt değerine sıfırlayın.

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

Çıktı

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

Sütunu ileri doğru doldurma

Dize sütununu ileri doğru doldurun. Her boş değere en son görülen ve olmayan değer atanır.

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

Çıktı

Ts Etkinlik Event_filled
00:00:00 A A
00:01:00 A
00:02:00 K K
00:03:00 K
00:04:00 K
00:06:00 C C
00:08:00 C
00:11:00 D D
00:12:00 D

Oturum etiketleme

Girişi oturumlara bölün: Oturum, oturumun ilk olayından 30 dakika sonra sona erer ve ardından yeni bir oturum başlatılır. Taramanın her ayrı eşleşmesi with_match_id (oturum) için benzersiz bir değer atayan bayrağının kullanımına dikkat edin. Ayrıca, bu örnekteki iki adımın özel kullanımı, true inSession geçerli eşleşmenin değerinden 30 metreden fazla gerçekleşen kayıtları yakalarken endSession girişteki sessionStart tüm kayıtları yakalayıp çıkışını veren bir koşuldur. Adım endSession , output=none çıkış kayıtları oluşturmadığı anlamına gelir. Bu endSession adım, geçerli eşleşmenin durumunu olarak inSession ilerletmek için endSessionkullanılır ve geçerli kayıttan başlayarak yeni bir eşleşmenin (oturum) başlamasına izin verir.

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

Çıktı

Ts Etkinlik sessionStart session_id
00:00:00 A 00:00:00 0
00:01:00 A 00:00:00 0
00:02:00 K 00:00:00 0
00:03:00 D 00:00:00 0
00:32:00 K 00:32:00 1
00:36:00 C 00:32:00 1
00:38:00 D 00:32:00 1
00:41:00 E 00:32:00 1
01:15:00 A 01:15:00 2

Başlat ve Durdur arasındaki olaylar

Olay ile 5 dakika içinde gerçekleşen olay Start arasındaki tüm olay Stop dizilerini bulun. Her dizi için bir eşleşme kimliği atayın.

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

Çıktı

Ts Etkinlik m_id
00:01:00 Başlangıç 0
00:02:00 K 0
00:03:00 D 0
00:04:00 Durdur 0
00:08:00 Başlangıç 1
00:11:00 E 1
00:12:00 Durdur 1

Olayların özel hunisini hesaplama

Olaylar arasındaki zamanlardaki (içinde ve içinde) özel eşiklerle sıranın huni tamamlanmasını Hail>>StateTornadoThunderstorm Wind hesaplayın.2hThunderstorm Wind 1hTornado Bu örnek, funnel_sequence_completion eklentisine benzer, ancak daha fazla esneklik sağlar.

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

Çıktı

EventType dcount_State
Dolu 50
Hortum 34
Gök Gürültülü Fırtına 32

Tarama mantığı kılavuzu

Bu bölümde, başlangıç ve durdurma örneği arasındaki olaylara ilişkin adım adım bir izlenecek yol kullanılarak tarama mantığı gösterilmektedir:

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

Durum

İşlecin durumunu, her adımın scan kendi durumuna sahip olduğu her adım için bir satırı olan bir tablo olarak düşünün. Bu durum, önceki adımların ve geçerli adımın tüm sütunlarının ve bildirilen değişkenlerin en son değerlerini içerir. Daha fazla bilgi için bkz . State.

Bu örnek için durum aşağıdaki tabloyla gösterilebilir:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 X X
s3

"X" belirli bir alanın bu adım için ilgisiz olduğunu gösterir.

Eşleşen mantık

Bu bölüm, tablonun her kaydında Events eşleşen mantığı izler ve her adımda durum ve çıkışın dönüştürülmesi açıklanır.

Not

Giriş kaydı, son adımdan () ilks1 adıma (s3) kadar ters sırada adımlara göre değerlendirilir.

Kayıt 1

Ts Etkinlik
0m "A"

Her adımda değerlendirmeyi kaydedin:

  • s3: Durumu s2 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors3.
  • s2: Durumu s1 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2.
  • s1: Önceki adım olmadığından 1'in ilgisiz olup olmadığını denetleyin. Kayıt koşuluna Event == "Start"uymadığından 2 denetimi geçirilmiyor. Kayıt 1 , durumu veya çıkışı etkilemeden atılır.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 X X
s3

Kayıt 2

Ts Etkinlik
1 m "Başlat"

Her adımda değerlendirmeyi kaydedin:

  • s3: Durumu s2 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors3.
  • s2: Durumu s1 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2.
  • s1: Önceki adım olmadığından 1'in ilgisiz olup olmadığını denetleyin. Kayıt koşulunu Event == "Start"karşıladığı için 2 denetimi geçirildi. Bu eşleşme yeni bir sıra başlatır ve m_id atanır. Kayıt 2 ve onun m_id (0) durumu ve çıkışı eklenir.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 0 00:01:00 "Başlat" X X X X
s2 X X
s3

Kayıt 3

Ts Etkinlik
2m "B"

Her adımda değerlendirmeyi kaydedin:

  • s3: Durumu s2 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors3.
  • s2: 1'in s1 durumu boş olduğundan ve kaydın koşuluna uygun olduğundan 1'in Ts - s1.Ts < 5mgeçirildiğini denetleyin. Bu eşleşme, durumunun s1 temizlenip içindeki sırasının s1 olarak yükseltilmesine s2neden olur. Kayıt 3 ve onun m_id (0) durumu ve çıkışı eklenir.
  • s1: Önceki adım olmadığından 1'in ilgisiz olduğunu ve kayıt koşuluna Event == "Start"uymadığından 2'yi denetleme işleminin geçirilmediğinden denetleyin.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 0 00:01:00 "Başlat" 00:02:00 "B" X X
s3

Kayıt 4

Ts Etkinlik
3 d "D"

Her adımda değerlendirmeyi kaydedin:

  • s3: Kayıt koşuluna Event == "Stop"uymadığından 1'in geçirilmediğinden ve Etkin bir dizi olmadığından 2'yi denetle geçirilmezs3.
  • s2: Durumu boş olduğundan 1'in s1 geçirilmediğinden denetleyin. , koşulunu karşıladığı için Denetim 2'yi Ts - s1.Ts < 5mgeçirir. Kayıt 4 ve onun m_id (0) durumu ve çıkışı eklenir. Bu kayıttan alınan değerler ve s2.Eventiçin s2.Ts önceki durum değerlerinin üzerine yazar.
  • s1: Önceki adım olmadığından 1'in ilgisiz olduğunu ve kayıt koşuluna Event == "Start"uymadığından 2'yi denetleme işleminin geçirilmediğinden denetleyin.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 0 00:01:00 "Başlat" 00:03:00 "D" X X
s3

Kayıt 5

Ts Etkinlik
4m "Dur"

Her adımda değerlendirmeyi kaydedin:

  • s3: 1'in geçirildiğini denetleyin çünkü s2 yok ve koşuluna Event == "Stop"uyguns3. Bu eşleşme, durumunun s2 temizlenip içindeki sırasının s2 olarak yükseltilmesine s3neden olur. Kayıt 5 ve onun m_id (0) durumu ve çıkışı eklenir.
  • s2: Durumu s1 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2.
  • s1: Önceki adım olmadığından 1'in ilgisiz olup olmadığını denetleyin. Kayıt koşuluna Event == "Start"uymadığından 2 denetimi geçirilmiyor.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 X X
s3 0 00:01:00 "Başlat" 00:03:00 "D" 00:04:00 "Dur"

Kayıt 6

Ts Etkinlik
6m "C"

Her adımda değerlendirmeyi kaydedin:

  • s3: Durumu s2 boş olduğundan 1'in geçirilmediğinden ve koşuluna Event == "Stop"uymadığından s3 2'yi denetle geçirilmiyors3.
  • s2: Durumu s1 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2.
  • s1: Önceki adım olmadığından 1'in geçirilmediğinden ve koşulunu Event == "Start"karşılamadığından 2'yi denetle geçirilmiyor. Kayıt 6 , durumu veya çıkışı etkilemeden atılır.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 X X
s3 0 00:01:00 "Başlat" 00:03:00 "D" 00:04:00 "Dur"

Kayıt 7

Ts Etkinlik
8m "Başlat"

Her adımda değerlendirmeyi kaydedin:

  • s3: Durumu boş olduğundan s2 1 denetimi geçirilmiyor ve Koşuluna uymadığından Event == "Stop"2'yi denetle geçirilmiyor.
  • s2: Durumu s1 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2.
  • s1: Önceki adım olmadığından 1'in geçirilmediğinden denetleyin. , koşulunu karşıladığı için Denetim 2'yi Event == "Start"geçirir. Bu eşleşme, içinde yeni bir ile yeni m_idbir sıra s1 başlatır. Kayıt 7 ve onun m_id (1) durumu ve çıkışı eklenir.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 1 00:08:00 "Başlat" X X X X
s2 X X
s3 0 00:01:00 "Başlat" 00:03:00 "D" 00:04:00 "Dur"

Not

Artık durumunda iki etkin dizi vardır.

Kayıt 8

Ts Etkinlik
11m "E"

Her adımda değerlendirmeyi kaydedin:

  • s3: Durumu boş olduğundan s2 1 denetimi geçirilmiyor ve Koşuluna uymadığından s3 Event == "Stop"2'yi denetle geçirilmiyor.
  • s2: 1'in s1 durumu boş olduğundan ve kaydın koşuluna uygun olduğundan 1'in Ts - s1.Ts < 5mgeçirildiğini denetleyin. Bu eşleşme, durumunun s1 temizlenip içindeki sırasının s1 olarak yükseltilmesine s2neden olur. Kayıt 8 ve onun m_id (1) durumu ve çıkışı eklenir.
  • s1: Önceki adım olmadığından 1'in ilgisiz olduğunu ve kayıt koşuluna Event == "Start"uymadığından 2'yi denetleme işleminin geçirilmediğinden denetleyin.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 1 00:08:00 "Başlat" 00:11:00 "E" X X
s3 0 00:01:00 "Başlat" 00:03:00 "D" 00:04:00 "Dur"

Kayıt 9

Ts Etkinlik
12m "Dur"

Her adımda değerlendirmeyi kaydedin:

  • s3: 1'in geçirildiğini denetleyin çünkü s2 yok ve koşuluna Event == "Stop"uyguns3. Bu eşleşme, durumunun s2 temizlenip içindeki sırasının s2 olarak yükseltilmesine s3neden olur. Kayıt 9 ve onun m_id (1) durumu ve çıkışı eklenir.
  • s2: Durumu s1 boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2.
  • s1: Önceki adım olmadığından 1'in geçirilmediğinden denetleyin. , koşulunu karşıladığı için Denetim 2'yi Event == "Start"geçirir. Bu eşleşme, içinde yeni bir ile yeni m_idbir sıra s1 başlatır.

State:

step m_id s1. Ts s1. Olay s2. Ts s2. Olay s3. Ts s3. Olay
s1 X X X X
s2 X X
s3 1 00:08:00 "Başlat" 00:11:00 "E" 00:12:00 "Dur"

Son çıkış

Ts Etkinlik m_id
00:01:00 Başlangıç 0
00:02:00 K 0
00:03:00 D 0
00:04:00 Durdur 0
00:08:00 Başlangıç 1
00:11:00 E 1
00:12:00 Durdur 1