Operadores de cadeia de caracteres
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 sobre termos de cadeia de caracteres
Kusto indexa todas as colunas, incluindo 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 são usados em consultas com os operadores de string
que têm has
como parte de seu nome, como has
, !has
, hasprefix
, !hasprefix
. A semântica destes operadores é ditada pela forma como a coluna é codificada. Em vez de fazer uma correspondência de substring "simples", esses operadores correspondem termos.
O que é um termo?
Por padrão, cada valor de string
é dividido em sequências máximas de caracteres alfanuméricos, e cada uma dessas sequências é transformada em um termo.
Por exemplo, no 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
Kusto constrói um índice de termos que consiste em todos os termos que são 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
, a consulta será revertida para a verificação dos valores na coluna. A digitalização é muito mais lenta do que procurar o termo no índice de termos.
Embora Explorer
seja uma subseqüência de KustoExplorerQueryRun
, "KustoExplorerQueryRun" has "Explorer"
retornará false
enquanto "KustoExplorerQueryRun" contains "Explorer"
retornará true
. Isso é sutil, mas o comportamento se deve ao fato de que has
é baseado em termos.
Operadores em strings
As seguintes abreviaturas 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 | Case-Sensitive | Exemplo (rendimentos true ) |
---|---|---|---|
== |
Igual | Sim | "aBc" == "aBc" |
!= |
Não é igual | Sim | "abc" != "ABC" |
=~ |
Igual | Não | "abc" =~ "ABC" |
!~ |
Não é igual | Não | "aBc" !~ "xyz" |
contains |
A RHS ocorre como uma subsequência da LHS | Não | "FabriKam" contains "BRik" |
!contains |
A RHS não ocorre na LHS | Não | "Fabrikam" !contains "xyz" |
contains_cs |
A RHS ocorre como uma subsequência da LHS | Sim | "FabriKam" contains_cs "Kam" |
!contains_cs |
A RHS não ocorre na LHS | Sim | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS é uma subseqüência de fechamento de LHS | Não | "Fabrikam" endswith "Kam" |
!endswith |
RHS não é uma subseqüência de fechamento de LHS | Não | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS é uma subseqüência de fechamento de LHS | Sim | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS não é uma subseqüência de fechamento de LHS | Sim | "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 |
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 |
RHS é um termo inteiro em LHS | Sim | "North America" has_cs "America" |
!has_cs |
RHS não é um termo completo em LHS | Sim | "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 em LHS | Não | "North America" !hasprefix "mer" |
hasprefix_cs |
RHS é um prefixo de termo em LHS | Sim | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
RHS não é um prefixo de termo em LHS | Sim | "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 | Sim | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
RHS não é um sufixo de termo em LHS | Sim | "North America" !hassuffix_cs "icA" |
in |
Igual a qualquer um dos elementos | Sim | "abc" in ("123", "345", "abc") |
!in |
Não é igual a nenhum 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 é igual a nenhum dos elementos | Não | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS contém uma correspondência para 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 subseqüê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 subseqüência inicial de LHS | Sim | "Fabrikam" !startswith_cs "fab" |
Dicas de desempenho
Para um melhor desempenho, quando houver dois operadores que façam a mesma tarefa, use o que diferencia 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 a presença de um símbolo ou palavra alfanumérica vinculada por caracteres não alfanuméricos ou o início ou o fim de um campo, use has
ou in
.
has
funciona mais rápido do que contains
, startswith
ou endswith
.
Para procurar endereços IPv4 ou seus prefixos, use um dos operadores de especiais em endereços IPv4, que são otimizados para esta finalidade.
Para obter mais informações, consulte Práticas recomendadas de consulta.
Por exemplo, a primeira dessas 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 (rendimentos true ) |
---|---|---|
has_ipv4 | LHS contém endereço IPv4 representado por RHS | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | LHS contém um endereço IPv4 que corresponde a um prefixo representado por RHS | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | LHS contém um dos endereços IPv4 fornecidos pela 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 | 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."])) |