Operátor parse-where

Vyhodnotí řetězcový výraz a parsuje jeho hodnotu do jednoho nebo více počítaných sloupců. Výsledkem jsou pouze úspěšně parsované řetězce.

parse-where analyzuje řetězce stejným způsobem jako analýza a vyfiltruje řetězce, které nebyly úspěšně analyzovány.

Viz operátor parse, který vytváří hodnoty null pro neúspěšně analyzované řetězce.

Syntax

T| parse-where [kind=kind [flags=regexFlags]] výrazwith* (stringConstantcolumnName [:columnType]) *...

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
T string ✔️ Tabulkový vstup, který se má analyzovat.
Druhu string ✔️ Jedna z podporovaných hodnot druhu. Výchozí hodnota je simple.
regexFlags string Pokud je regexkind (druh) , můžete zadat příznaky regulárního výrazu, které se mají použít, například U pro ungreedy, m pro režim s více řádky, s pro shodu s novým řádkem \na pro nerozlišují se malá a i velká písmena. Další příznaky najdete v části Příznaky.
expression string ✔️ Výraz, který se vyhodnotí jako řetězec.
stringConstant string ✔️ Řetězcová konstanta, kterou chcete vyhledat a analyzovat.
columnName string ✔️ Název sloupce, ke kterému se má přiřadit hodnota, extrahovaný z řetězcového výrazu.
Columntype string Skalární hodnota označující typ, na který se má hodnota převést. Výchozí hodnota je string.

Poznámka

  • Projekt použijte, pokud chcete také odstranit nebo přejmenovat některé sloupce.
  • Ve vzoru se používá * k vynechání nevyžádaných hodnot. Tuto hodnotu nelze použít za string sloupcem.
  • Vzorec analýzy může začínat na ColumnName kromě StringConstant.
  • Pokud analyzovaný výraz není typu string, převede se na typ string.

Podporované hodnoty druhu

Text Description
simple Toto je výchozí hodnota. stringConstant je hodnota běžného řetězce a shoda je striktní. V analyzovaném řetězci by se měly objevit všechny oddělovače řetězců a všechny rozšířené sloupce musí odpovídat požadovaným typům.
regex stringConstant může být regulární výraz a shoda je striktní. Všechny oddělovače řetězců, které mohou být regulárním výrazem pro tento režim, by se měly zobrazit v analyzovaném řetězci a všechny rozšířené sloupce musí odpovídat požadovaným typům.

Režim regulárního výrazu

V režimu regulárního výrazu parse přeloží vzor na regulární výraz a použije regulární výrazy , aby bylo možné provést párování pomocí číslovaných zachycených skupin, které se zpracovávají interně. Příklad:

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

Regulární výraz, který se vygeneruje interně parsováním, je .*?<regex1>(.*?)<regex2>(\-\d+).

  • * byla přeložena na .*?.
  • string byla přeložena na .*?.
  • long byla přeložena na \-\d+.

Návraty

Vstupní tabulka, která je rozšířena podle seznamu sloupců poskytovaných operátoru.

Poznámka

Ve výstupu budou pouze úspěšně parsované řetězce. Řetězce, které neodpovídají vzoru, se odfiltrují.

Příklady

Operátor parse-where poskytuje zjednodušenou cestu k extend tabulce pomocí více extract aplikací ve stejném string výrazu. To je nejužitečnější, když tabulka obsahuje string sloupec obsahující několik hodnot, které chcete rozdělit do jednotlivých sloupců. Můžete například rozdělit sloupec vytvořený příkazem vývojářského trasování ("printf/"Console.WriteLine").

Používání akce parse

V následujícím příkladu obsahuje sloupec EventText tabulky Traces řetězce ve formátu Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5}). Následující operace rozšíří tabulku o šest sloupců: resourceName , , totalSlices, sliceNumber, lockTime, releaseTime, previousLockTime, Montha Day.

Některé řetězce se úplně neshodují.

Při použití parsebudou mít počítané sloupce hodnoty null.

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

Výstup

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

Používání akce parse-where

Použití příkazu parse-where odfiltruje neúspěšně analyzované řetězce z výsledku.

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

Výstup

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

Režim regex s využitím příznaků regex

Pokud chcete získat resourceName a totalSlices, použijte následující dotaz:

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

Výstup

resourceName totalSlices

parse-where s příznakem regex bez rozlišování velkých a malých písmen

Ve výše uvedeném dotazu byl výchozí režim rozlišující malá a malá písmena, takže se řetězce úspěšně parsovaly. Nebyl získán žádný výsledek.

Pokud chcete získat požadovaný výsledek, spusťte příkaz parse-where s příznakem regex bez rozlišování velkých a malých písmen (i).

Pouze tři řetězce budou úspěšně analyzovány, takže výsledkem jsou tři záznamy (některé totalSlices obsahují neplatná celá čísla).

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

Výstup

resourceName totalSlices
PipelineScheduler 27
PipelineScheduler 27
PipelineScheduler 27