GitHubContribuir no GitHub: Editar on-line

Operadores de sequência

O KQL oferece uma variedade de operadores de consulta para procurar tipos de dados de sequência. O artigo a seguir descreve como os termos de sequências são indexados, lista os operadores de consultas de sequências e fornece dicas para otimizar o desempenho.

Entendendo termos de sequência

KQL indexa todas as colunas, incluindo colunas do tipo string. Vários índices são construídos para essas colunas, dependendo dos dados reais Esses índices não são expostos diretamente, mas são usados em consultas com os operadores do string que têm has como parte de seu nome, como has, !has, hasprefix, !hasprefix A semântica desses operadores é ditada pela maneira como a coluna é codificada.. Em vez de fazer uma correspondência de subsequência "simples", esses operadores correspondem a termos

O que é um termo?

Por padrão, cada valor string é dividido em sequências máximas de caracteres alfanuméricos ASCII e cada uma dessas sequências é feita em um termo. Por exemplo, no stringa seguir, os termos são KQL, KQLExplorerQueryRune as seguintes subsequências: ad67d136, c1db, 4f9f, 88ef, d94f3b6b0b5a.

KQL: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun

O KQL constrói um índice de termo que consiste em todos os termos que são três caracteres ou maise esse índice é usado por operadores de sequências como has, !hase assim por diante. Se a consulta procurar um termo menor que três caracteres ou usar um operador contains , a consulta será revertida para varrer os valores na coluna. A varredura é muito mais lenta do que procurar o termo no índice do termo..

Operadores em sequências

As abreviações a seguir são usadas na tabela abaixo:

  • RHS = lado direito da expressão
  • LHS = lado esquerdo da expressão

Operadores com um sufixo _cs fazem distinção entre maiúsculas e minúsculas.

Os operadores sem distinção entre maiúsculas e minúsculas são suportados atualmente apenas para texto ASCII Para comparação não ASCII, utilize a função tolower () .

Operador Descrição Distinção entre Maiúsculas e Minúsculas Exemplo (produz true)
== Igual True "aBc" == "aBc"
!= Diferente de True "abc" != "ABC"
=~ Igual Não "abc" =~ "ABC"
!~ Diferente de Não "aBc" !~ "xyz"
contains RHS ocorre como uma subsequência de LHS Não "FabriKam" contains "BRik"
!contains RHS não ocorre em LHS Não "Fabrikam" !contains "xyz"
contains_cs RHS ocorre como uma subsequência de LHS True "FabriKam" contains_cs "Kam"
!contains_cs RHS não ocorre em LHS True "Fabrikam" !contains_cs "Kam"
endswith RHS é uma subsequência de encerramento da LHS Não "Fabrikam" endswith "Kam"
!endswith RHS não é uma subsequência final de LHS Não "Fabrikam" !endswith "brik"
endswith_cs RHS é uma subsequência de encerramento da LHS True "Fabrikam" endswith_cs "kam"
!endswith_cs RHS não é uma subsequência final de LHS True "Fabrikam" !endswith_cs "brik"
has Lado direito (RHS) é um termo inteiro no lado esquerdo (LHS) Não "North America" has "america"
!has RHS não é um termo completo em LHS Não "North America" !has "amer"
has_all Igual a has , mas funciona em todos os elementos Não "North and South America" has_all("south", "north")
has_any Mesmo que has , mas funciona em qualquer um dos elementos Não "North America" has_any("south", "north")
has_cs RHS é um termo inteiro em LHS True "North America" has_cs "America"
!has_cs RHS não é um termo completo em LHS True "North America" !has_cs "amer"
hasprefix RHS é um prefixo de termo em LHS Não "North America" hasprefix "ame"
!hasprefix RHS não é um prefixo de termo no LHS Não "North America" !hasprefix "mer"
hasprefix_cs RHS é um prefixo de termo em LHS True "North America" hasprefix_cs "Ame"
!hasprefix_cs RHS não é um prefixo de termo no LHS True "North America" !hasprefix_cs "CA"
hassuffix RHS é um sufixo de termo em LHS Não "North America" hassuffix "ica"
!hassuffix RHS não é um sufixo de termo em LHS Não "North America" !hassuffix "americ"
hassuffix_cs RHS é um sufixo de termo em LHS True "North America" hassuffix_cs "ica"
!hassuffix_cs RHS não é um sufixo de termo em LHS True "North America" !hassuffix_cs "icA"
in Igual a um dos elementos True "abc" in ("123", "345", "abc")
!in Não é igual a nenhum dos elementos True "bca" !in ("123", "345", "abc")
in~ Igual a qualquer um dos elementos Não "Abc" in~ ("123", "345", "abc")
!in~ Não é igual a nenhum dos elementos Não "bCa" !in~ ("123", "345", "ABC")
matches regex LHS contém uma correspondência para RHS True "Fabrikam" matches regex "b.*k"
startswith RHS é uma subsequência inicial de LHS Não "Fabrikam" startswith "fab"
!startswith RHS não é uma subsequência inicial de LHS Não "Fabrikam" !startswith "kam"
startswith_cs RHS é uma subsequência inicial de LHS True "Fabrikam" startswith_cs "Fab"
!startswith_cs RHS não é uma subsequência inicial de LHS True "Fabrikam" !startswith_cs "fab"

Todos os operadores que contêm has search on indexed terms de três ou mais caracteres e não em correspondências de subsequência. Um termo é criado dividindo a sequência em sequências de caracteres alfanuméricos ASCII.. Consulte entendendo os termos da cadeia

Dicas de desempenho.

Para melhor desempenho, quando houver dois operadores que executam a mesma tarefa, use o que faz distinção entre maiúsculas e minúsculas. Por exemplo:

  • Use ==, não =~
  • Use in, não in~
  • Use hassuffix_cs, não hassuffix

Para obter resultados mais rápidos, se você estiver testando a presença de um símbolo ou palavra alfanumérica que é ligada por caracteres não alfanuméricos ou o início ou o término de um campo, use has ou in. has funciona mais rápido que contains, startswithou endswith.