Operatore parse-where
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft Sentinel
Valuta un'espressione stringa e ne analizza il valore in una o più colonne calcolate. Il risultato è solo le stringhe analizzate correttamente.
parse-where
analizza le stringhe nello stesso modo dell'analisi e filtra le stringhe che non sono state analizzate correttamente.
Vedere l'operatore parse, che produce valori Null per stringhe analizzate senza esito positivo.
Sintassi
T | parse-where
[kind=
kind [flags=
regexFlags]] expression with
*
(stringConstant columnName [:
columnType]) *
...
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
T | string |
✔️ | Input tabulare da analizzare. |
kind | string |
✔️ | Uno dei valori di tipo supportati. Il valore predefinito è simple . |
regexFlags | string |
Se kind è regex , è possibile specificare flag regex da usare come U per la modalità non allineata, m per la modalità a più righe, s per la corrispondenza di nuova riga \n e senza distinzione tra maiuscole e i minuscole. Altri flag sono disponibili in Flag. |
|
expression | string |
✔️ | un'espressione che restituisce una stringa. |
stringConstant | string |
✔️ | Costante stringa per cui eseguire la ricerca e l'analisi. |
columnName | string |
✔️ | il nome di una colonna a cui assegnare un valore, estratto dall'espressione stringa. |
columnType | string |
Il valore calare che indica il tipo in cui convertire il valore. L'impostazione predefinita è string . |
Nota
- Usare il progetto anche se si desidera eliminare o rinominare alcune colonne.
- Usare
*
nel modello per ignorare i valori della posta indesiderata. Questo valore non può essere usato dopostring
la colonna. - Il modello di analisi può iniziare con ColumnName, oltre a StringConstant.
- Se l'espressione analizzata non è di tipo
string
, verrà convertita in tipostring
.
Valori dei tipi supportati
Testo | Descrizione |
---|---|
simple |
Questo è il valore predefinito. stringConstant è un valore stringa regolare e la corrispondenza è strict. Nella stringa analizzata dovranno comparire tutti i delimitatori di stringa e tutte le colonne estese devono corrispondere ai tipi richiesti. |
regex |
stringConstant può essere un'espressione regolare e la corrispondenza è strict. Nella stringa analizzata dovranno comparire tutti i delimitatori di stringa, che possono essere regex per questa modalità, e tutte le colonne estese devono corrispondere ai tipi richiesti. |
Modalità Regex
In modalità regex, parse converte il criterio in un'espressione regolare e usa espressioni regolari per eseguire la corrispondenza usando gruppi acquisiti numerati gestiti internamente. Ad esempio:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
L'espressione regolare che verrà generata internamente dall'analisi è .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
viene convertito in.*?
.string
viene convertito in.*?
.long
viene convertito in\-\d+
.
Valori restituiti
Tabella di input, estesa in base all'elenco di colonne fornite all'operatore.
Nota
Nell'output verranno analizzate solo le stringhe analizzate correttamente. Le stringhe che non corrispondono al criterio verranno filtrate.
Esempi
L'operatore parse-where
offre l'istruzione extend
per semplificare l'estensione di una tabella usando più applicazioni extract
nella stessa espressione string
. Ciò è più utile quando la tabella contiene una string
colonna contenente diversi valori che si desidera suddividere in singole colonne. Ad esempio, è possibile suddividere una colonna prodotta da un'istruzione di traccia per sviluppatori ("printf
"/"Console.WriteLine
").
uso di parse
Nell'esempio seguente la colonna EventText
della tabella Traces
contiene stringhe del formato Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. L'operazione seguente estenderà la tabella con sei colonne: resourceName
, totalSlices
, sliceNumber
, releaseTime
lockTime
previousLockTime
, , Month
, e Day
.
Alcune stringhe non hanno una corrispondenza completa.
Usando parse
, le colonne calcolate avranno valori 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
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 |
uso di parse-where
L'uso di 'parse-where' filtra le stringhe analizzate in modo non riuscito dal risultato.
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 |
Modalità Regex con flag regex
Per ottenere resourceName e totalSlices, usare la query seguente:
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
con flag regex senza distinzione tra maiuscole e minuscole
Nella query precedente la modalità predefinita fa distinzione tra maiuscole e minuscole, quindi le stringhe sono state analizzate correttamente. Non è stato ottenuto alcun risultato.
Per ottenere il risultato richiesto, eseguire parse-where
con un flag regex senza distinzione tra maiuscole e minuscole (i
).
Verranno analizzate correttamente solo tre stringhe, quindi il risultato è costituito da tre record (alcuni totalSlices contengono numeri interi non validi).
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 |