parse-where-Operator
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Wertet einen Zeichenfolgenausdruck aus und analysiert seinen Wert in einer oder mehreren berechneten Spalten. Das Ergebnis ist nur die erfolgreich analysierten Zeichenfolgen.
parse-where
analysiert die Zeichenfolgen auf die gleiche Weise wie die Analyse und filtert Zeichenfolgen heraus, die nicht erfolgreich analysiert wurden.
Siehe Analyseoperator, der NULL-Werte für nicht analysierte Zeichenfolgen erzeugt.
Syntax
T [kind [flags=
kind=
regexFlags]] Ausdruck with
*
(stringConstant columnName [:
columnType]) ... *
| parse-where
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
T | string |
✔️ | Die tabellarische Eingabe, die analysiert werden soll. |
kind | string |
✔️ | Einer der unterstützten Typwerte. Der Standardwert ist simple . |
regexFlags | string |
Wenn dies der Fall ist regex , können Sie regex-Flags angeben, die für U nicht farbig, m für den mehrzeiligen Modus s , für die Übereinstimmung mit der neuen Zeile \n und für die Groß-/ i Kleinschreibung verwendet werden sollen. Weitere Flags finden Sie in Flags. |
|
expression | string |
✔️ | Ein Ausdruck ein, der in eine Zeichenfolge ausgewertet wird. |
stringConstant | string |
✔️ | Eine Zeichenfolgenkonstante, für die gesucht und analysiert werden soll. |
columnName | string |
✔️ | Der Name einer Spalte, der ein Wert zugewiesen werden soll, extrahiert aus dem Zeichenfolgenausdruck. |
columnType | string |
Der Skalarwert, der den Typ angibt, in den der Wert konvertiert werden soll. Der Standardwert ist string . |
Hinweis
- Verwenden Sie das Projekt , wenn Sie auch einige Spalten ablegen oder umbenennen möchten.
- Verwenden Sie
*
das Muster, um Junk-Werte zu überspringen. Dieser Wert kann nachstring
Spalte nicht verwendet werden. - Das Analysemuster kann zusätzlich zu StringConstant mit ColumnName beginnen.
- Wenn der analysierte Ausdruck nicht vom Typ
string
ist, wird er in den Typstring
konvertiert.
Unterstützte Typwerte
Text | Beschreibung |
---|---|
simple |
Dies ist der Standardwert. stringConstant ist ein regulärer Zeichenfolgenwert, und die Übereinstimmung ist streng. Alle Zeichenfolgentrennzeichen sollten in der analysierten Zeichenfolge vorkommen, und alle erweiterten Spalten müssen mit den erforderlichen Typen übereinstimmen. |
regex |
stringConstant kann ein regulärer Ausdruck sein und die Übereinstimmung ist streng. Alle Zeichenfolgentrennzeichen, die für diesen Modus reguläre Ausdrücke sein können, sollten in der analysierten Zeichenfolge vorkommen, und alle erweiterten Spalten müssen mit den erforderlichen Typen übereinstimmen. |
Regex-Modus
Im regex-Modus übersetzt die Analyse das Muster in einen regulären Ausdruck und verwendet reguläre Ausdrücke, um den Abgleich mithilfe von nummerierten erfassten Gruppen zu erledigen, die intern behandelt werden. Zum Beispiel:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
Der regex, der intern von der Analyse generiert wird, ist .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
wurde in.*?
übersetzt.string
wurde in.*?
übersetzt.long
wurde in\-\d+
übersetzt.
Gibt zurück
Die Eingabetabelle, die entsprechend der Liste der Spalten erweitert wird, die dem Operator bereitgestellt werden.
Hinweis
Nur erfolgreich analysierte Zeichenfolgen werden in der Ausgabe enthalten. Zeichenfolgen, die nicht mit dem Muster übereinstimmen, werden herausgefiltert.
Beispiele
Der parse-where
-Operator bietet eine optimierte Möglichkeit zum extend
einer Tabelle, indem mehrere extract
-Anwendungen für denselben string
-Ausdruck verwendet werden. Dies ist am nützlichsten, wenn die Tabelle eine string
Spalte enthält, die mehrere Werte enthält, die Sie in einzelne Spalten aufteilen möchten. Sie können beispielsweise eine Spalte aufbrechen, die von einer Entwicklerablaufverfolgung ("printf
"/"Console.WriteLine
") erstellt wurde.
Verwenden von parse
Im folgenden Beispiel enthält die Tabellenspalte EventText
Traces
Zeichenfolgen des Formulars Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. Der folgende Vorgang erweitert die Tabelle mit sechs Spalten: resourceName
, , totalSlices
, sliceNumber
, lockTime
, releaseTime
, , previousLockTime
, und Day
Month
.
Einige der Zeichenfolgen haben keine vollständige Übereinstimmung.
Bei Verwendung parse
der berechneten Spalten sind NULL-Werte vorhanden.
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
Output
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 |
Verwenden von parse-where
Die Verwendung von "parse-where" filtert nicht erfolgreich analysierte Zeichenfolgen aus dem Ergebnis heraus.
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
Output
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-Modus mit regex-Flags
Verwenden Sie die folgende Abfrage, um "resourceName" und "totalSlices" abzurufen:
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
Output
resourceName | totalSlices |
---|---|
parse-where
bei regex-Flag ohne Groß-/Kleinschreibung
In der obigen Abfrage wurde die Groß-/Kleinschreibung beachtet, sodass die Zeichenfolgen erfolgreich analysiert wurden. Es wurde kein Ergebnis abgerufen.
Führen Sie zum Abrufen des erforderlichen Ergebnisses parse-where
mit einem regex-Flag (i
Groß-/Kleinschreibung) aus.
Es werden nur drei Zeichenfolgen erfolgreich analysiert, sodass das Ergebnis drei Datensätze ist (einige TotalSlices enthalten ungültige ganze Zahlen).
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
Output
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |