Operátor parse-where
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Vyhodnotí řetězcový výraz a parsuje jeho hodnotu do jednoho nebo více počítaných sloupců. Výsledkem jsou pouze úspěšně analyzované řetězce.
parse-where
parsuje řetězce stejným způsobem jako analýza a filtruje řetězce, které nebyly úspěšně analyzovány.
Viz operátor parse, který vytváří hodnoty null pro neúspěšně parsované řetězce.
Syntaxe
T | parse-where
[kind=
kind [flags=
regexFlags]] výraz with
*
(stringConstant columnName [:
columnType]) *
...
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
T | string |
✔️ | Tabulkový vstup, který se má analyzovat. |
laskavý | string |
✔️ | Jedna z podporovaných hodnot typu Výchozí hodnota je simple . |
regexFlags | string |
Pokud je typ , můžete určit příznaky regulárních výrazů, které se mají použít jako U pro nerozdělené, m pro víceřádkový režim, s pro shodu nového řádku \n a pro nerozlišující velká a i regex malá písmena. Další příznaky najdete v příznakech. |
|
výraz | string |
✔️ | Výraz, který se vyhodnotí jako řetězec. |
stringConstant | string |
✔️ | Řetězcová konstanta, pro kterou se má hledat a parsovat. |
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:
- Pokud chcete některé sloupce odstranit nebo přejmenovat, použijte projekt .
- Pomocí
*
vzoru můžete přeskočit nevyžádané hodnoty. Tuto hodnotu nelze použít zastring
sloupcem. - Vzor analýzy může začínat sloupcem ColumnName, kromě StringConstant.
- Pokud analyzovaný výraz není typu
string
, převede se na typstring
.
Podporované hodnoty typu
Text | Popis |
---|---|
simple |
Tato hodnota je výchozí. stringConstant je běžná řetězcová hodnota a shoda je striktní. Všechny oddělovače řetězců by se měly objevit v analyzovaném řetězci 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 výrazem regex pro tento režim, by se měly objevit v analyzovaném řetězci a všechny rozšířené sloupce musí odpovídat požadovaným typům. |
Režim regulárních výrazů
V režimu regulárního výrazu parse přeloží vzor na regulární výrazy a použije regulární výrazy k tomu, aby se shodovaly pomocí očí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+)
.
*
byl přeložen do.*?
.string
byl přeložen do.*?
.long
byl přeložen do\-\d+
.
Návraty
Vstupní tabulka, která je rozšířena podle seznamu sloupců, které jsou zadané operátoru.
Poznámka:
Ve výstupu budou pouze úspěšně analyzované řetězce. Řetězce, které neodpovídají vzoru, se vyfiltrují.
Příklady
Operátor parse-where
poskytuje zjednodušený způsob, jak do extend
tabulky použít více extract
aplikací ve stejném string
výrazu. To je nejužitečnější, když tabulka obsahuje string
sloupec, který obsahuje několik hodnot, které chcete rozdělit do jednotlivých sloupců. Můžete například rozdělit sloupec, který byl vytvořen příkazem trasování vývojáře ("printf
/"Console.WriteLine
").
Používání akce parse
V následujícím příkladu sloupec EventText
tabulky Traces
obsahuje řetězce formuláře Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. Následující operace rozšíří tabulku o šest sloupců: , , , , , , Month
previousLockTime
a Day
. releaseTime
lockTime
sliceNumber
totalSlices
resourceName
Několik řetězců nemá úplnou shodu.
Pomocí parse
počítaných sloupců budou mít 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
Při použití funkce parse-where se úspěšně parsují ř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 regulárních výrazů s využitím příznaků regulárních výrazů
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 regulárního výrazu nerozlišující malá a velká písmena
Ve výše uvedeném dotazu se u výchozího režimu rozlišují malá a velká písmena, takže řetězce se úspěšně parsovaly. Nebyl získán žádný výsledek.
Chcete-li získat požadovaný výsledek, spusťte parse-where
příznak regulárního výrazu nerozlišujícíi
malá a velká písmena ().
Úspěšně se parsují pouze tři řetězce, 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 |