parse-where işleci
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini✅ Azure İzleyici✅Microsoft Sentinel
Bir dize ifadesini değerlendirir ve değerini bir veya daha fazla hesaplanmış sütuna ayrıştırıyor. Sonuçta yalnızca başarıyla ayrıştırılan dizeler elde edilir.
parse-where
dizeleri ayrıştırma ile aynı şekilde ayrıştırıp başarıyla ayrıştırılmayan dizeleri filtreler.
Bkz . başarısız ayrıştırılmış dizeler için null değerler üreten ayrıştırma işleci.
Sözdizimi
T | parse-where
[kind=
kind [flags=
regexFlags]] ifadesi with
*
(stringConstant columnName [:
columnType]) *
...
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Zorunlu | Açıklama |
---|---|---|---|
T | string |
✔️ | Ayrıştırmak için tablosal giriş. |
tür | string |
✔️ | Desteklenen tür değerlerinden biri. Varsayılan değer şudur: simple . |
regexFlags | string |
türü ise, tekil olmayan, çok satırlı mods , m yeni satır \n eşleştirme ve i büyük/küçük harfe duyarsız gibi U kullanılacak regex bayraklarını belirtebilirsiniz.regex Bayraklar bölümünde daha fazla bayrak bulunabilir. |
|
ifade | string |
✔️ | Dize olarak değerlendirilen ifade. |
stringConstant | string |
✔️ | Aranacak ve ayrıştırılan dize sabiti. |
columnName | string |
✔️ | Dize ifadesinden ayıklanan, değer atanacak sütunun adı. |
columnType | string |
Değerin dönüştürülecek türünü gösteren skaler değer. Varsayılan değerdir string . |
Not
- Ayrıca bazı sütunları bırakmak veya yeniden adlandırmak istiyorsanız projeyi kullanın.
- Gereksiz değerleri atlamak için desende kullanın
*
. Bu değer sütundan sonrastring
kullanılamaz. - Ayrıştırma düzeni StringConstant'a ek olarak ColumnName ile başlayabilir.
- Ayrıştırılan ifade türünde
string
değilse, türünestring
dönüştürülür.
Desteklenen tür değerleri
Metin | Açıklama |
---|---|
simple |
Bu varsayılan değerdir. stringConstant normal bir dize değeridir ve eşleşme katıdır. Tüm dize sınırlayıcıları ayrıştırılmış dizede görünmelidir ve tüm genişletilmiş sütunlar gerekli türlerle eşleşmelidir. |
regex |
stringConstant normal bir ifade olabilir ve eşleşme katıdır. Bu mod için bir regex olabilecek tüm dize sınırlayıcıları ayrıştırılmış dizede görünmelidir ve tüm genişletilmiş sütunların gerekli türlerle eşleşmesi gerekir. |
Regex modu
Regex modunda ayrıştır, deseni bir regex'e çevirir ve dahili olarak işlenen numaralandırılmış yakalanan grupları kullanarak eşleştirmeyi yapmak için normal ifadeleri kullanır. Örneğin:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Ayrıştırma tarafından dahili olarak oluşturulacak regex değeridir .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
olarak çevrildi.*?
.string
olarak çevrildi.*?
.long
olarak çevrildi\-\d+
.
Döndürülenler
Giriş tablosu, işlecine sağlanan sütun listesine göre genişletilir.
Not
Çıktıda yalnızca başarıyla ayrıştırılan dizeler olacaktır. Desenle eşleşmeyen dizeler filtrelenir.
Örnekler
işleci, parse-where
aynı string
ifadede birden çok extract
uygulama kullanarak tabloya extend
kolaylaştırılmış bir yol sağlar. Bu, tablonun tek tek sütunlara bölmek istediğiniz birkaç değer içeren bir string
sütunu olduğunda kullanışlıdır. Örneğin, bir geliştirici izleme ("printf
"/"Console.WriteLine
") deyimi tarafından oluşturulan bir sütunu bölebilirsiniz.
parse
kullanma
Aşağıdaki örnekte, tablo Traces
sütunu EventText
biçimindeki Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
dizeleri içerir. Aşağıdaki işlem tabloyu altı sütunla genişletir: , , , , , releaseTime
, previousLockTime
, Month
ve Day
. lockTime
sliceNumber
totalSlices
resourceName
Dizelerden birkaçının tam eşleşmesi yok.
kullanılarak parse
hesaplanmış sütunlarda null değerleri olur.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previouLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previouLockTime
Çıktı
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
parse-where
kullanma
'ayrıştır-where' kullanıldığında sonuçtan başarısız ayrıştırılmış dizeler filtrelenir.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previousLockTime
Çıktı
resourceName | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
Regex bayraklarını kullanan regex modu
resourceName ve totalSlices değerlerini almak için aşağıdaki sorguyu kullanın:
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Çıktı
resourceName | totalSlices |
---|---|
parse-where
büyük/küçük harfe duyarlı olmayan regex bayrağıyla
Yukarıdaki sorguda varsayılan mod büyük/küçük harfe duyarlı olduğundan dizeler başarıyla ayrıştırıldı. Sonuç alınmıyordu.
Gerekli sonucu almak için büyük/küçük harfe duyarlı olmayan (i
) bir regex bayrağıyla çalıştırınparse-where
.
Yalnızca üç dize başarıyla ayrıştırılacağından sonuç üç kayıttır (bazı totalSlices geçersiz tamsayıları barındırmaktadır).
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex flags=i EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
Çıktı
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |