parse-where işleci
Bir dize ifadesini değerlendirir ve değerini bir veya daha fazla hesaplanmış sütuna ayrıştırıyor. Sonuç yalnızca başarıyla ayrıştırılan dizeler olur.
parse-where
dizeleri ayrıştırma ile aynı şekilde ayrıştırılır ve başarıyla ayrıştırılmayan dizeleri filtreler.
Başarısız şekilde ayrıştırılan dizeler için null değerleri üreten ayrıştırma işlecine bakın.
Syntax
T| parse-where
[kind=
kind [flags=
regexFlags]] ifadesiwith
*
(stringConstantcolumnName [:
columnType]) *
...
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Gerekli | Açıklama |
---|---|---|---|
T | string |
✔️ | Ayrıştırmak için tablosal giriş. |
Tür | string |
✔️ | Desteklenen tür değerlerinden biri. simple varsayılan değerdir. |
regexFlags | string |
tür iseregex , tek tek, çok satırlı mods , m yeni satır \n eşleştirme ve i büyük/küçük harfe duyarsız için gibi U kullanılacak regex bayraklarını belirtebilirsiniz. Bayraklar'da daha fazla bayrak bulunabilir. |
|
expression | string |
✔️ | Dize olarak değerlendirilen ifade. |
stringConstant | string |
✔️ | Aranacak ve ayrıştırılan bir dize sabiti. |
columnName | string |
✔️ | Dize ifadesinden ayıklanan, değer atanacak sütunun adı. |
Columntype | string |
Değerin dönüştürüldüğü türü gösteren skaler değer. Varsayılan değerdir string . |
Not
- Bazı sütunları da 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 | Description |
---|---|
simple |
Varsayılan değer budur. 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 reex 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ştirme yapmak için normal ifadeler kullanır. Örnek:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Ayrıştırma tarafından dahili olarak oluşturulacak regex şeklindedir .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
, olarak.*?
çevrildi.string
, olarak.*?
çevrildi.long
, olarak\-\d+
çevrildi.
Döndürülenler
giriş tablosu, işlecine sağlanan sütun listesine göre genişletilir.
Not
Yalnızca başarıyla ayrıştırılan dizeler çıktıda olur. 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, geliştirici izlemesi ("printf
"/"Console.WriteLine
") deyimi tarafından oluşturulan bir sütunu bölebilirsiniz.
parse
kullanma
Aşağıdaki örnekte, tablonun 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
, Month
previousLockTime
ve Day
. lockTime
sliceNumber
totalSlices
resourceName
Dizelerden birkaçının tam eşleşmesi yok.
kullanıldığında 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
Çıkış
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
'parse-where' kullanıldığında sonuçtan başarısız ayrıştırılan 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
Çıkış
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
Çıkış
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
Çıkış
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |
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