Operatore parse-where
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 le stringhe analizzate senza esito positivo.
Sintassi
T| parse-where
[kind [flags=
kind=
regexFlags]] expressionwith
*
(stringConstantcolumnName [:
columnType]) *
...
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Tipo | Obbligatoria | 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à a più righe, 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 |
✔️ | Espressione che restituisce una stringa. |
stringConstant | string |
✔️ | Costante stringa per cui eseguire la ricerca e l'analisi. |
columnName | string |
✔️ | 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 indesiderati. 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
Text | Descrizione |
---|---|
simple |
Si tratta del 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, l'analisi 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 dall'analisi internamente è .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
viene convertito in.*?
.string
viene convertito in.*?
.long
viene convertito in\-\d+
.
Restituisce
Tabella di input, estesa in base all'elenco di colonne fornite all'operatore.
Nota
Solo le stringhe analizzate correttamente saranno nell'output. 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ò è particolarmente 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
, , sliceNumber
totalSlices
, lockTime
, previousLockTime
releaseTime
, 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 senza esito positivo 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 è stata 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 è tre record (alcuni totali contengono 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 |
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per