Aracılığıyla paylaş


parse-where işleci

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 \neş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 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 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, Monthve Day. lockTimesliceNumbertotalSlicesresourceName

Dizelerden birkaçının tam eşleşmesi yok.

kullanılarak parsehesaplanmış 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