Freigeben über


parse-where-Operator

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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 \nund 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 nach string Spalte nicht verwendet werden.
  • Das Analysemuster kann zusätzlich zu StringConstant mit ColumnName beginnen.
  • Wenn der analysierte Ausdruck nicht vom Typ stringist, wird er in den Typ stringkonvertiert.

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 DayMonth.

Einige der Zeichenfolgen haben keine vollständige Übereinstimmung.

Bei Verwendung parseder 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 (iGroß-/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