operadoresString
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
O Kusto Query Language (KQL) oferece vários operadores de consulta para pesquisar tipos de dados de cadeia de caracteres. O artigo a seguir descreve como os termos de cadeia de caracteres são indexados, lista os operadores de consulta de cadeia de caracteres e fornece dicas para otimizar o desempenho.
Noções básicas de termos de cadeia de caracteres
O Azure Data Explorer indexa todas as colunas, incluindo as colunas do tipo string
. Vários índices são criados para essas colunas, dependendo dos dados reais. Esses índices não são expostos diretamente, mas usados em consultas com os operadores string
que têm has
como parte do nome deles, como has
, !has
, hasprefix
, !hasprefix
. A semântica desses operadores é determinada pela maneira como a coluna é codificada. Em vez de fazer uma correspondência de substring "simples", esses operadores fazem a correspondência de termos.
O que é uma termo?
Por padrão, cada string
valor é dividido em sequências máximas de caracteres alfanuméricos e cada uma dessas sequências é transformada em um termo.
Por exemplo, em string
a seguir, os termos são Kusto
, KustoExplorerQueryRun
e as seguintes substrings: ad67d136
, c1db
, 4f9f
, 88ef
, d94f3b6b0b5a
.
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
O Kusto cria um índice de termos que consiste em todos os termos com três caracteres ou mais, e esse índice é usado por operadores de cadeia de caracteres como has
, !has
e assim por diante. Se a consulta procurar um termo menor que três caracteres ou usar um operador contains
, ela será revertida para verificar os valores na coluna. A verificação é muito mais lenta do que pesquisar o termo no índice de termos.
Operadores em cadeias de caracteres
As seguintes abreviações são usadas neste artigo:
- RHS = lado direito da expressão
- LHS = lado esquerdo da expressão
Os operadores com um sufixo _cs
diferenciam maiúsculas de minúsculas.
Operador | Descrição | Diferencia maiúsculas de minúsculas | Exemplo (suspende true ) |
---|---|---|---|
== |
Igual a | Sim | "aBc" == "aBc" |
!= |
Não é igual a | Sim | "abc" != "ABC" |
=~ |
Igual a | Não | "abc" =~ "ABC" |
!~ |
Não é igual a | Não | "aBc" !~ "xyz" |
contains |
RHS ocorre como uma subsequência do 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 do LHS | Sim | "FabriKam" contains_cs "Kam" |
!contains_cs |
RHS não ocorre em LHS | Sim | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS é uma subsequência de fechamento de LHS | Não | "Fabrikam" endswith "Kam" |
!endswith |
RHS não é uma subsequência de fechamento de LHS | Não | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS é uma subsequência de fechamento de LHS | Sim | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS não é uma subsequência de fechamento de LHS | Sim | "Fabrikam" !endswith_cs "brik" |
has |
O lado direito (RHS) é um termo completo no lado esquerdo (LHS) | Não | "North America" has "america" |
!has |
O RHS não é um termo completo no LHS | Não | "North America" !has "amer" |
has_all |
O mesmo que has , mas funciona em todos os elementos |
Não | "North and South America" has_all("south", "north") |
has_any |
O mesmo que has , mas funciona em qualquer um dos elementos |
Não | "North America" has_any("south", "north") |
has_cs |
O RHS é um termo completo no LHS | Sim | "North America" has_cs "America" |
!has_cs |
O RHS não é um termo completo no LHS | Sim | "North America" !has_cs "amer" |
hasprefix |
O RHS é um prefixo de termo no LHS | Não | "North America" hasprefix "ame" |
!hasprefix |
O RHS não é um prefixo de termo no LHS | Não | "North America" !hasprefix "mer" |
hasprefix_cs |
O RHS é um prefixo de termo no LHS | Sim | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
O RHS não é um prefixo de termo no LHS | Sim | "North America" !hasprefix_cs "CA" |
hassuffix |
O RHS é um sufixo de termo no LHS | Não | "North America" hassuffix "ica" |
!hassuffix |
O RHS não é um sufixo de termo no LHS | Não | "North America" !hassuffix "americ" |
hassuffix_cs |
O RHS é um sufixo de termo no LHS | Sim | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
O RHS não é um sufixo de termo no LHS | Sim | "North America" !hassuffix_cs "icA" |
in |
Igual a qualquer um dos elementos | Sim | "abc" in ("123", "345", "abc") |
!in |
Não equivale a qualquer um dos elementos | Sim | "bca" !in ("123", "345", "abc") |
in~ |
Igual a qualquer um dos elementos | Não | "Abc" in~ ("123", "345", "abc") |
!in~ |
Não equivale a qualquer um dos elementos | Não | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS contém uma correspondência para o RHS | Sim | "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 | Sim | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS não é uma subsequência inicial de LHS | Sim | "Fabrikam" !startswith_cs "fab" |
Dicas de desempenho
Para obter melhor desempenho, quando há dois operadores que fazem a mesma tarefa, use um que diferencie maiúsculas de 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 se há um símbolo ou uma palavra alfanumérica associada a caracteres não alfanuméricos ou o início ou fim de um campo, use has
ou in
.
has
funciona mais rápido que contains
, startswith
ou endswith
.
Para pesquisar endereços IPv4 ou seus prefixos, use um dos operadores especiais em endereços IPv4, que são otimizados para essa finalidade.
Para obter mais informações, confira as Melhores práticas para consulta.
Por exemplo, a primeira destas consultas será executada mais rapidamente:
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
Operadores em endereços IPv4
O grupo de operadores a seguir fornece pesquisa acelerada por índice em endereços IPv4 ou seus prefixos.
Operador | Descrição | Exemplo (suspende true ) |
---|---|---|
has_ipv4 | O LHS contém o endereço IPv4 representado pelo RHS | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | O LHS contém um endereço IPv4 que corresponde a um prefixo representado pelo RHS | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | O LHS contém um dos endereços IPv4 fornecidos pelo RHS | has_any_ipv4("Source address is 10.1.2.3:1234", dynamic(["10.1.2.3", "127.0.0.1"])) |
has_any_ipv4_prefix | O LHS contém um endereço IPv4 que corresponde a um dos prefixos fornecidos pelo RHS | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |