tarama işleci
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini✅ Azure İzleyici✅Microsoft Sentinel
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
step
StepName [ output
| none
all
last
= | ] :
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.
State
İş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ü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:
- s_k durumu temizlenir.
- s_k-1'in durumu, s_k durumuna yükseltilir.
- s_k atamaları hesaplanır ve r'yi genişletir.
- 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:
- 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 tanımlanırsa, genişletilmiş r çıktıya eklenir.
output=all
- İ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 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 endSession
kullanı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
>>State
Tornado
Thunderstorm Wind
hesaplayın.2h
Thunderstorm Wind
1h
Tornado
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
: Durumus2
boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors3
.s2
: Durumus1
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şulunaEvent == "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
: Durumus2
boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors3
.s2
: Durumus1
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şulunuEvent == "Start"
karşıladığı için 2 denetimi 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.
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
: Durumus2
boş olduğundan 1'in geçirilmediğinden ve etkin bir dizi olmadığından 2'yi denetle geçirilmiyors3
.s2
: 1'ins1
durumu boş olduğundan ve kaydın koşuluna uygun olduğundan 1'inTs - s1.Ts < 5m
geçirildiğini denetleyin. Bu eşleşme, durumununs1
temizlenip içindeki sırasınıns1
olarak yükseltilmesines2
neden olur. Kayıt 3 ve onunm_id
(0
) durumu ve çıkışı eklenir.s1
: Önceki adım olmadığından 1'in ilgisiz olduğunu ve kayıt koşulunaEvent == "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şulunaEvent == "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'ins1
geçirilmediğinden denetleyin. , 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
: Önceki adım olmadığından 1'in ilgisiz olduğunu ve kayıt koşulunaEvent == "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şulunaEvent == "Stop"
uyguns3
. Bu eşleşme, durumununs2
temizlenip içindeki sırasınıns2
olarak yükseltilmesines3
neden olur. Kayıt 5 ve onunm_id
(0
) durumu ve çıkışı eklenir.s2
: Durumus1
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şulunaEvent == "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
: Durumus2
boş olduğundan 1'in geçirilmediğinden ve koşulunaEvent == "Stop"
uymadığındans3
2'yi denetle geçirilmiyors3
.s2
: Durumus1
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şulunuEvent == "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ğundans2
1 denetimi geçirilmiyor ve Koşuluna uymadığındanEvent == "Stop"
2'yi denetle geçirilmiyor.s2
: Durumus1
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'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.
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ğundans2
1 denetimi geçirilmiyor ve Koşuluna uymadığındans3
Event == "Stop"
2'yi denetle geçirilmiyor.s2
: 1'ins1
durumu boş olduğundan ve kaydın koşuluna uygun olduğundan 1'inTs - s1.Ts < 5m
geçirildiğini denetleyin. Bu eşleşme, durumununs1
temizlenip içindeki sırasınıns1
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şulunaEvent == "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şulunaEvent == "Stop"
uyguns3
. Bu eşleşme, durumununs2
temizlenip içindeki sırasınıns2
olarak yükseltilmesines3
neden olur. Kayıt 9 ve onunm_id
(1
) durumu ve çıkışı eklenir.s2
: Durumus1
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'yiEvent == "Start"
geçirir. Bu eşleşme, içinde yeni bir ile yenim_id
bir sıras1
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 |