operador parse-where
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Avalia uma expressão de cadeia de caracteres e analisa seu valor em uma ou mais colunas calculadas. O resultado são apenas as cadeias de caracteres analisadas com êxito.
parse-where
analisa as cadeias de caracteres da mesma forma que analisae filtra as cadeias de caracteres que não foram analisadas com êxito.
Consulte operador de análise, que produz nulos para cadeias de caracteres analisadas sem êxito.
Sintaxe
T| parse-where
[kind=
kind [flags=
regexFlags]] expressãowith
*
(stringConstantcolumnName [:
columnType]) *
...
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
T | string |
✔️ | A entrada tabular a ser analisada. |
tipo | string |
✔️ | Um dos valores de tipo suportados. O valor padrão é simple . |
regexFlags | string |
Se tipo for regex , você poderá especificar sinalizadores regex a serem usados como U para não ganancioso, m para modo de várias linhas, s para corresponder a novos \n de linha e i para diferenciar maiúsculas de minúsculas. Mais bandeiras podem ser encontradas em Flags. |
|
expressão | string |
✔️ | Uma expressão que é avaliada como uma cadeia de caracteres. |
stringConstant | string |
✔️ | Uma constante de cadeia de caracteres para a qual pesquisar e analisar. |
columnName | string |
✔️ | O nome de uma coluna à qual atribuir um valor, extraído da expressão de cadeia de caracteres. |
columnType | string |
O valor escalar que indica o tipo para o qual converter o valor. O padrão é o string . |
Observação
- Use projeto se também quiser soltar ou renomear algumas colunas.
- Use
*
no padrão para ignorar valores de lixo. Esse valor não pode ser usado apósstring
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
, ela será convertida em tipostring
.
Valores de tipo suportados
Texto | Descrição |
---|---|
simple |
Este é o valor padrão. stringConstant é um valor de cadeia de caracteres regular e a correspondência é estrita. Todos os delimitadores de cadeia de caracteres devem aparecer na cadeia de caracteres analisada e todas as colunas estendidas devem corresponder aos tipos necessários. |
regex |
stringConstant pode ser uma expressão regular e a correspondência é estrita. Todos os delimitadores de cadeia de caracteres, que podem ser um regex para esse modo, devem aparecer na cadeia de caracteres analisada e todas as colunas estendidas devem corresponder aos tipos necessários. |
Modo Regex
No modo regex, a análise traduzirá o padrão para um regex e usará expressões regulares para fazer a correspondência usando grupos capturados numerados que são manipulados 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 é estendida de acordo com a lista de colunas que são fornecidas ao operador.
Observação
Somente cadeias de caracteres analisadas com êxito estarão na saída. As cadeias de caracteres que não corresponderem ao padrão serão filtradas.
Exemplos
Os exemplos nesta seção mostram como usar a sintaxe para ajudá-lo a começar.
Os exemplos neste artigo usam tabelas disponíveis publicamente no de cluster de ajuda, como a tabela
StormEvents
no banco de dados Samples.
Os exemplos neste artigo usam tabelas disponíveis publicamente, como a tabela
StormEvents
na análise do tempo dados de exemplo.
O operador parse-where
fornece uma maneira simplificada de extend
uma tabela usando vários aplicativos extract
na mesma expressão string
. Isso é mais útil quando a tabela tem uma coluna string
que contém vários valores que você deseja dividir em colunas individuais. Por exemplo, você pode dividir uma coluna que foi produzida por uma instrução de rastreamento de desenvolvedor ("printf
"/"Console.WriteLine
").
Usando parse
No exemplo abaixo, a coluna EventText
da tabela Traces
contém cadeias de caracteres do formulário Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
. A operação abaixo estenderá a tabela com seis colunas: resourceName
, totalSlices
, sliceNumber
, lockTime
, releaseTime
, previousLockTime
, Month
e Day
.
Algumas das cordas não têm uma correspondência completa.
Usando 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
Output
nome_do_recurso | totalFatias | fatiaNúmero | lockTime | releaseTime | anteriorLockTime |
---|---|---|---|---|---|
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 |
Usando parse-where
Usar 'parse-where' filtrará cadeias de caracteres analisadas sem sucesso 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
Output
nome_do_recurso | totalFatias | fatiaNúmero | lockTime | releaseTime | anteriorLockTime |
---|---|---|---|---|---|
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 usando sinalizadores regex
Para obter o resourceName e totalSlices, use 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
Output
nome_do_recurso | totalFatias |
---|---|
parse-where
com sinalizador regex que não diferencia maiúsculas de minúsculas
Na consulta acima, o modo padrão diferenciava maiúsculas de minúsculas, portanto, as cadeias de caracteres foram analisadas com êxito. Nenhum resultado foi obtido.
Para obter o resultado necessário, execute parse-where
com um sinalizador regex que não diferencia maiúsculas de minúsculas (i
).
Apenas três cadeias de caracteres serão analisadas com êxito, portanto, o resultado são três registros (alguns totalSlices contêm 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
Output
nome_do_recurso | totalFatias |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |