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 regex kind (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 \n a 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 zastring
sloupcem. - Vzorec analýzy může začínat na ColumnName kromě StringConstant.
- Pokud analyzovaný výraz není typu
string
, převede se na typstring
.
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
, Month
a Day
.
Některé řetězce se úplně neshodují.
Při použití parse
budou 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 |
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro