operador parse-where
Avalia uma expressão de cadeia e analisa o respetivo valor numa ou mais colunas calculadas. O resultado são apenas as cadeias analisadas com êxito.
parse-where
analisa as cadeias da mesma forma que a análise e filtra as cadeias que não foram analisadas com êxito.
Veja Operador de análise, que produz nulos para cadeias analisadas sem êxito.
Syntax
T| parse-where
[kind=
kind [flags=
regexFlags]] expressionwith
*
(stringConstantcolumnName [:
columnType]) *
...
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Tipo | Necessário | Descrição |
---|---|---|---|
T | string |
✔️ | A entrada tabular a analisar. |
tipo | string |
✔️ | Um dos valores de tipo suportados. O valor predefinido é simple . |
regexFlags | string |
Se kind for regex , pode especificar sinalizadores regex a serem utilizados como U para não gananciosos, m para o modo multilinha, s para corresponder à nova linha \n e para não sensível a maiúsculas e i minúsculas. Pode encontrar mais sinalizadores em Sinalizadores. |
|
expression | string |
✔️ | Uma expressão que é avaliada como uma cadeia. |
stringConstant | string |
✔️ | Uma constante de cadeia para a qual procurar e analisar. |
columnName | string |
✔️ | O nome de uma coluna à qual atribuir um valor, extraído da expressão de cadeia. |
columnType | string |
O valor escalar que indica o tipo para o qual converter o valor. A predefinição é .string |
Nota
- Utilize o projeto se também quiser remover ou mudar o nome de algumas colunas.
- Utilize
*
no padrão para ignorar valores de lixo. Este valor não pode ser utilizado apósstring
a coluna. - O padrão de análise pode começar com ColumnName, além de StringConstant.
- Se a expressão analisada não for do tipo
string
, será convertida para o tipostring
.
Valores de tipo suportados
Texto | Description |
---|---|
simple |
Este é o valor predefinido. stringConstant é um valor de cadeia regular e a correspondência é estrita. Todos os delimitadores de cadeia devem aparecer na cadeia analisada e todas as colunas expandidas têm de corresponder aos tipos necessários. |
regex |
stringConstant pode ser uma expressão regular e a correspondência é estrita. Todos os delimitadores de cadeias, que podem ser um regex para este modo, devem aparecer na cadeia analisada e todas as colunas expandidas têm de corresponder aos tipos necessários. |
Modo Regex
No modo regex, a análise traduzirá o padrão para um regex e utilizará expressões regulares para fazer a correspondência com grupos capturados numerados que são processados internamente. Por exemplo:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
O regex que será gerado pela análise internamente é .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
foi traduzido para.*?
.string
foi traduzido para.*?
.long
foi traduzido para\-\d+
.
Devoluções
A tabela de entrada, que é expandida de acordo com a lista de colunas fornecidas ao operador.
Nota
Apenas as cadeias analisadas com êxito estarão na saída. As cadeias que não corresponderem ao padrão serão filtradas.
Exemplos
O parse-where
operador fornece uma forma simplificada de uma extend
tabela ao utilizar várias extract
aplicações na mesma string
expressão. Isto é mais útil quando a tabela tem uma string
coluna que contém vários valores que pretende dividir em colunas individuais. Por exemplo, pode dividir uma coluna produzida por uma instrução de rastreio do programador ("printf
/"Console.WriteLine
").
Ao utilizar parse
No exemplo abaixo, a coluna EventText
da tabela Traces
contém cadeias do formulário Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. A operação abaixo irá expandir a tabela com seis colunas: resourceName
, totalSlices
, sliceNumber
, lockTime
, releaseTime
, previousLockTime
, Month
e Day
.
Algumas das cadeias não têm uma correspondência completa.
Com parse
, as colunas calculadas terão nulos.
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
Saída
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 |
Ao utilizar parse-where
A utilização de "parse-where" filtrará as cadeias analisadas sem êxito do resultado.
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
Saída
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 |
Modo Regex com sinalizadores regex
Para obter o resourceName e totalSlices, utilize a seguinte consulta:
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
Saída
resourceName | totalSlices |
---|---|
parse-where
com sinalizador regex sensível a maiúsculas e minúsculas
Na consulta acima, o modo predefinido era sensível às maiúsculas e minúsculas, pelo que as cadeias foram analisadas com êxito. Não foi obtido nenhum resultado.
Para obter o resultado necessário, execute parse-where
com um sinalizador regex não sensível a maiúsculas e minúsculas (i
).
Apenas três cadeias serão analisadas com êxito, pelo que o resultado é três registos (alguns totalSlices contêm números inteiros inválidos).
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
Saída
resourceName | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários