parse-where operátor

Kiértékel egy sztringkifejezést, és az értékét egy vagy több számított oszlopba elemzi. Az eredmény csak a sikeresen elemezt sztringek.

parse-where A sztringeket ugyanúgy elemzi, mint az elemzést, és kiszűri azokat a sztringeket, amelyeket nem sikerült elemezni.

Lásd az elemzési operátort, amely null értékeket állít elő a sikertelenül elemezett sztringekhez.

Syntax

T| parse-where [kind=kind [flags=regexFlags]] kifejezéswith* (stringConstantcolumnName [:columnType]) *...

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
T string ✔️ Az elemezni kívánt táblázatos bemenet.
Fajta string ✔️ Az egyik támogatott fajtaérték. Az alapértelmezett érték simple.
regexFlags string Ha a típus , regexakkor megadhat regex jelzőket, például U nem elfogadott, többsoros módhoz, ms új sor \negyeztetéséhez és kis- és i nagybetűk megkülönböztetéséhez. További jelzők a jelölők között találhatók.
expression string ✔️ Sztringre kiértékelt kifejezés.
stringConstant string ✔️ Egy sztringállandó, amelynek keresésére és elemzésére van sor.
columnName string ✔️ A sztringkifejezésből kinyert érték hozzárendeléséhez tartozó oszlop neve.
columnType string A skaláris érték, amely azt jelzi, hogy milyen típusúra szeretné konvertálni az értéket. Az alapértelmezett érték a string.

Megjegyzés

  • Ha egyes oszlopokat is szeretne elvetni vagy átnevezni, használja a projectet .
  • Használja * a mintában a levélszemétértékek kihagyásához. Ez az érték oszlop után string nem használható.
  • Az elemzési minta a StringConstant mellett a ColumnName értékkel is kezdődhet.
  • Ha az elemzett kifejezés nem típus string, akkor a program a következő típusra stringkonvertálja: .

Támogatott típusértékek

Szöveg Description
simple Ez az alapértelmezett érték. a stringConstant egy normál sztringérték, és az egyezés szigorú. Az összes sztringelválasztónak meg kell jelennie az elemzett sztringben, és minden kiterjesztett oszlopnak meg kell egyeznie a szükséges típusokkal.
regex stringConstant lehet egy reguláris kifejezés, és az egyezés szigorú. Az összes sztringelválasztónak, amely regex lehet ehhez a módhoz, meg kell jelennie az elemzett sztringben, és minden kiterjesztett oszlopnak meg kell egyeznie a szükséges típusokkal.

Regex mód

Regex módban az elemzés regexre fordítja a mintát, és reguláris kifejezéseket használ az egyeztetéshez a belsőleg kezelt számozott rögzített csoportok használatával. Például:

parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long

A belső elemzés által generált regex a ..*?<regex1>(.*?)<regex2>(\-\d+)

  • * lefordítva a(z) kifejezésre .*?.
  • string lefordítva a(z) kifejezésre .*?.
  • long lefordítva a(z) kifejezésre \-\d+.

Válaszok

A bemeneti tábla, amely az operátornak biztosított oszlopok listájának megfelelően van kiterjesztve.

Megjegyzés

Csak a sikeresen elemzett sztringek lesznek a kimenetben. A rendszer kiszűri azokat a sztringeket, amelyek nem felelnek meg a mintának.

Példák

Az parse-where operátor leegyszerűsített módszert kínál a táblákhoz extend , ha több extract alkalmazást használ ugyanazon string a kifejezésen. Ez akkor hasznos, ha a táblázat olyan oszlopot string tartalmaz, amely több értéket tartalmaz, amelyeket egyes oszlopokra szeretne bontani. Feloszthat például egy fejlesztői nyomkövetési ("printf/"Console.WriteLine") utasítással létrehozott oszlopot.

Az parse használata

Az alábbi példában a tábla Traces oszlopa EventText az űrlap Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})sztringeit tartalmazza. Az alábbi művelet hat oszlopból áll: resourceName , , totalSlices, sliceNumber, releaseTimelockTime, , previousLockTime, Monthés Day.

Néhány sztringnek nincs teljes egyezése.

A használatával parsea számított oszlopok null értékűek lesznek.

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

Kimenet

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

Az parse-where használata

A "parse-where" használatával kiszűri a sikertelenül elemzett sztringeket az eredményből.

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

Kimenet

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 mód regex jelzőkkel

A resourceName és a totalSlices lekérdezéséhez használja a következő lekérdezést:

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

Kimenet

resourceName totalSlices

parse-where kis- és nagybetűket nem megkülönböztető regex jelzővel

A fenti lekérdezésben az alapértelmezett mód megkülönböztette a kis- és nagybetűket, így a sztringek elemzése sikerült. Nem kapott eredményt.

A szükséges eredmény lekéréséhez futtassa a parancsot parse-where egy kis- és nagybetűket nem megkülönböztető (i) regex jelzővel.

Csak három sztring lesz sikeresen elemezve, így az eredmény három rekord (egyes totalSlices érvénytelen egész számokat tartalmaz).

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

Kimenet

resourceName totalSlices
PipelineScheduler 27
PipelineScheduler 27
PipelineScheduler 27