tarama işleci
Verileri, eşleşmeleri tarar 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.
Syntax
T| scan
[ with_match_id
=
MatchIdColumnName ] [ declare
(
ColumnDeclarations)
] with
(
StepDefinitions)
ColumnDeclarations söz dizimi
Columnname:
ColumnType[=
DefaultValue ] [,
... ]
StepDefinition söz dizimi
step
StepName [ output
| last
all
= | none
] :
Condition [ =>
Sütun=
Ataması [,
... ] ];
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Gerekli | 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ına bir uzantı bildirir. Bu sütunlara adımlarda değerler atanır. Atanmamışsa DefaultValue döndürülür. Aksi belirtilmedikçe DefaultValue değeridir null . |
|
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 olduğunda adımla eşleşir. |
Atama | string |
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 çıkışı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 kaydeder ve her bir kaydı her adımın geçerli durumunu hesaba katarak her adımın koşuluyla karşılaştırırken.
Durum
İşlecin temel alınan durumu scan
, her step
biri 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ümlerinden sütunların ve bildirilen değişkenlerin en son değerleriyle kendi durumunu korur. Uygunsa, devam eden sıranın eşleşme kimliğini de tutar.
Tarama işlecinin s_1, s_2, ..., s_n adlı n adımı varsa,adım s_ks_1, s_2, ..., s_k karşılık gelen durumunda k kayıtları olur. StepName. ColumnName biçimi, durumundaki bir değere başvurmak için kullanılır. Örneğin, s_2.col1
s_kdurumundaki 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 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 olmak olarak adlandırılır.
Eşleşen mantık
Her giriş kaydı, son adımdan birinciye doğru ters sırada tüm adımlara göre değerlendirilir. Bir r kaydı bir adım s_k karşı değerlendirildiğinde aşağıdaki mantık uygulanır:
Denetim 1: Önceki adımın (s_k-1) durumu boşsa ve rs_kKoşulunu karşılıyorsa, bir eşleşme oluşur. Eşleşme aşağıdaki eylemlere yol açar:
- s_k durumu temizlenir.
- s_k-1 durumu, s_k durumuna yükseltilir.
- s_k atamaları hesaplanır ve r'yi genişletir.
- Genişletilmiş r , çıkışa ve s_k durumuna eklenir.
Not
Check 1 eşleşmeyle sonuçlanırsa, Check 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 rs_kKoşulunu karşılıyorsa, bir eşleşme oluşur. Eşleşme aşağıdaki eylemlere yol açar:
- s_k atamaları hesaplanır ve r'yi genişletir.
- s_k durumundaki s_k temsil eden değerler genişletilmiş r değerleriyle değiştirilir.
- s_k olarak
output=all
tanımlanmışsa, genişletilmiş r çıktıya eklenir. - İlk adım s_k ise, yeni bir sıra başlar ve eşleşme kimliği tarafından
1
artar. Bu yalnızca kullanıldığında çıkışıwith_match_id
etkiler.
s_k denetimleri tamamlandıktan sonra r, s_k-1'e göre 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;
)
Çıkış
x | cumulative_x |
---|---|
1 | 1 |
2 | 3 |
3 | 6 |
4 | 10 |
5 | 15 |
Sıfırlama koşulu olan birden çok sütunda toplu toplam
İki giriş sütunu için birikmeli toplamı hesaplayın, toplam 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);
)
Çıkış
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 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);
)
Çıkış
Ts | Olay | 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 | D | D |
00:12:00 | D |
Oturum etiketleme
Girişi oturumlara bölme: 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
(oturumu) 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ı koşuludur, inSession
true
bu nedenle girişteki tüm kayıtları yakalar ve çıkışını oluştururken endSession
, geçerli eşleşmenin değerinden 30 milyondan sessionStart
fazla gerçekleşen kayıtları yakalar. Adım endSession
, output=none
çıkış kayıtları oluşturmadığı anlamına gelir. Bu endSession
adım, geçerli eşleşmenin durumunu 'den inSession
'e ilerletmek için endSession
kullanılır ve geçerli kayıttan başlayarak yeni bir eşleşmenin (oturum) başlatılması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;
)
Çıkış
Ts | Olay | 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 | D | 00:00:00 | 0 |
00:32:00 | B | 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;
)
Çıkış
Ts | Olay | m_id |
---|---|---|
00:01:00 | Başlangıç | 0 |
00:02:00 | B | 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 bir huni tamamlanmasını Hail
>Thunderstorm Wind
>Tornado
State
hesaplayın.Tornado
2h
Thunderstorm Wind
1h
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
Çıkış
Olay türü | dcount_State |
---|---|
Dolu | 50 |
Kasırga | 34 |
Fırtına Rüzgarı | 32 |
Tarama mantığının izlenecek yolu
Bu bölümde, başlatma ve durdurma arasındaki olaylar örneğinin adım adım izlenecek yolu 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 örnekte durum aşağıdaki tabloyla gösterilebilir:
adım | 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 | Olay |
---|---|
0m | "A" |
Her adımda değerlendirmeyi kaydedin:
s3
: Durumu boş olduğundans2
1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından 2'yi denetle geçirilmiyors3
.s2
: Durumu boş olduğundans1
1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2
.s1
: Önceki adım olmadığından 1'in ilgisiz olduğunu denetleyin. Kayıt koşulunaEvent == "Start"
uymadığından 2 denetimi geçirilmiyor. Kayıt 1 , durumu veya çıkışı etkilemeden atılır.
Durum:
adım | 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 | Olay |
---|---|
1m | "Başlat" |
Her adımda değerlendirmeyi kaydedin:
s3
: Durumus2
boş olduğundan 1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından Denetim 2 geçirilmiyors3
.s2
: Durumus1
boş olduğundan 1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından Denetim 2 geçirilmiyors2
.s1
: Önceki bir adım olmadığından 1'in ilgisiz olduğunu denetleyin. Kayıt koşulunuEvent == "Start"
karşıladığı için denetim 2 geçirildi. Bu eşleşme yeni bir sıra başlatır vem_id
atanır. Kayıt 2 ve onunm_id
(0
) durumu ve çıkış eklenir.
Durum:
adım | 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 | Olay |
---|---|
2m | "B" |
Her adımda değerlendirmeyi kaydedin:
s3
: Durumus2
boş olduğundan 1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından Denetim 2 geçirilmiyors3
.s2
: Durumu boş olduğundans1
ve kayıt koşulunuTs - s1.Ts < 5m
karşıladığı için 1'i denetleyin. Bu eşleşme, durumununs1
temizlenmesine ve içindekis1
sırasının olarak yükseltilmesines2
neden olur. Kayıt 3 ve onunm_id
(0
) durumu ve çıkış eklenir.s1
: Denetim 1'in ilgisizdir çünkü önceki adım yoktur ve Kayıt koşulunuEvent == "Start"
karşılamadığından 2. denetim geçirilmez.
Durum:
adım | 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 | Olay |
---|---|
3m | "D" |
Her adımda değerlendirmeyi kaydedin:
s3
: Kayıt koşulunuEvent == "Stop"
karşılamadığından 1 denetimi geçirilmiyor ve Etkin bir dizi olmadığından 2. Denetim geçirilmiyor.s3
s2
: Durumus1
boş olduğundan 1 denetimi geçirilmiyor. koşulunu karşıladığı için Denetim 2'yiTs - s1.Ts < 5m
geçirir. Kayıt 4 ve onunm_id
(0
) durumu ve çıkış eklenir. Bu kayıttan alınan değerler ves2.Event
içins2.Ts
önceki durum değerlerinin üzerine yazar.s1
: Denetim 1'in ilgisizdir çünkü önceki adım yoktur ve Kayıt koşulunuEvent == "Start"
karşılamadığından 2. denetim geçirilmez.
Durum:
adım | 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 | Olay |
---|---|
4m | "Durdur" |
Her adımda değerlendirmeyi kaydedin:
s3
: Onay 1 geçirildi çünküs2
yok ve koşulunus3
Event == "Stop"
karşılıyor. Bu eşleşme, durumununs2
temizlenmesine ve içindekis2
sırasının olarak yükseltilmesines3
neden olur. Kayıt 5 ve onunm_id
(0
) durumu ve çıkış eklenir.s2
: Durumus1
boş olduğundan 1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından Denetim 2 geçirilmiyors2
.s1
: Önceki bir adım olmadığından 1'in ilgisiz olduğunu denetleyin. Kayıt koşulunaEvent == "Start"
uymadığından 2. denetim geçirilmiyor.
Durum:
adım | 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 | "Durdur" |
Kayıt 6
Ts | Olay |
---|---|
6m | "C" |
Her adımda değerlendirmeyi kaydedin:
s3
: Durumus2
boş olduğundan denetim 1 geçirilmiyor ve KoşulaEvent == "Stop"
uymadığındans3
2 denetimi geçirilmiyors3
.s2
: Durumus1
boş olduğundan 1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından Denetim 2 geçirilmiyors2
.s1
: Önceki adım olmadığından 1 denetimi geçirilmiyor ve KoşuluEvent == "Start"
karşılamadığından 2. denetim geçirilmiyor. Kayıt 6 , durumu veya çıkışı etkilemeden atılır.
Durum:
adım | 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 | "Durdur" |
Kayıt 7
Ts | Olay |
---|---|
8m | "Başlat" |
Her adımda değerlendirmeyi kaydedin:
s3
: Durumus2
boş olduğundan 1 denetimi geçirilmiyor ve KoşulaEvent == "Stop"
uymadığından 2 denetimi geçirilmiyor.s2
: Durumus1
boş olduğundan 1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından Denetim 2 geçirilmiyors2
.s1
: Önceki adım olmadığından 1'in geçirilmiyor olduğunu denetleyin. koşulunu karşıladığı için Denetim 2'yiEvent == "Start"
geçirir. Bu eşleşme, içinde yeni bir ile yenim_id
bir sıras1
başlatır. Kayıt 7 ve onunm_id
(1
) durumu ve çıkış eklenir.
Durum:
adım | 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 | "Durdur" |
Not
Artık durumda iki etkin dizi vardır.
Kayıt 8
Ts | Olay |
---|---|
11m | "E" |
Her adımda değerlendirmeyi kaydedin:
s3
: Durumu boş olduğundans2
1'i denetleme işlemi geçirilmiyor ve Koşulu karşılamadığındans3
Event == "Stop"
2'yi denetle geçirilmiyor.s2
: Durumu belirsiz olduğundan ve kayıt koşulunuTs - s1.Ts < 5m
karşıladığındans1
1'i denetleyin. Bu eşleşme, durumununs1
temizlenmesine ve içindekis1
sırasının olarak yükseltilmesines2
neden olur. Kayıt 8 ve onunm_id
(1
) durumu ve çıkış eklenir.s1
: Önceki adım olmadığından 1'in ilgisiz olduğunu ve kayıt koşulunu karşılamadığından 2'yi denetleme işlemininEvent == "Start"
geçirilmiyor olduğunu denetleyin.
Durum:
adım | 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 | "Durdur" |
Kayıt 9
Ts | Olay |
---|---|
12m | "Durdur" |
Her adımda değerlendirmeyi kaydedin:
s3
: 1'in geçirildiğini denetleyin çünküs2
yok ve koşulunus3
Event == "Stop"
karşılıyor. Bu eşleşme, durumununs2
temizlenmesine ve içindekis2
sırasının olarak yükseltilmesines3
neden olur. Kayıt 9 ve onunm_id
(1
) durumu ve çıkışı eklenir.s2
: Durumu boş olduğundans1
1'i denetleme işlemi geçirilmiyor ve Etkin bir dizi olmadığından 2'yi denetle geçirilmiyors2
.s1
: Önceki adım olmadığından 1'i denetleme işlemi geçirilmiyor. denetim 2'yi geçirir çünkü koşuluna uygun olurEvent == "Start"
. Bu eşleşme, içinde yeni bir ile yenim_id
bir sıras1
başlatır.
Durum:
adım | 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 | "Durdur" |
Son çıkış
Ts | Olay | m_id |
---|---|---|
00:01:00 | Başlangıç | 0 |
00:02:00 | B | 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 |
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin