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 \neş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 sonra string kullanılamaz.
  • Ayrıştırma düzeni StringConstant'a ek olarak ColumnName ile başlayabilir.
  • Ayrıştırılan ifade türünde stringdeğilse türüne stringdö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, MonthpreviousLockTimeve Day. lockTimesliceNumbertotalSlicesresourceName

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