Partilhar via


operador parse-where

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 \nde 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ós string 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 tipo string.

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, Monthe 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