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ãoin~ - Use
hassuffix_cs, nãohassuffix
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.