Operadores de cadeias
Linguagem de Pesquisa Kusto (KQL) oferece vários operadores de consulta para procurar tipos de dados de cadeias. O artigo seguinte descreve como os termos de cadeia são indexados, lista os operadores de consulta de cadeia e dá sugestões para otimizar o desempenho.
Compreender os termos da cadeia
O Kusto indexa todas as colunas, incluindo colunas do tipo string
. São criados vários índices para essas colunas, consoante os dados reais. Estes índices não são expostos diretamente, mas são utilizados em consultas com os string
operadores que têm has
como parte do respetivo 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 subcadeia "simples", estes operadores correspondem aos termos.
O que é um termo?
Por predefinição, cada string
valor é dividido em sequências máximas de carateres alfanuméricos e cada uma dessas sequências é transformada num termo.
Por exemplo, nos seguintes string
, os termos são Kusto
, KustoExplorerQueryRun
e as seguintes subcadeias: 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 que são três carateres ou mais e este índice é utilizado por operadores de cadeia, como has
, !has
e assim sucessivamente. Se a consulta procurar um termo com menos de três carateres ou utilizar um contains
operador, a consulta reverterá para a análise dos valores na coluna. A análise é muito mais lenta do que procurar o termo no índice de termos.
Nota
Em EngineV2, um termo consiste em quatro ou mais carateres.
Operadores em cadeias
As seguintes abreviaturas são utilizadas neste artigo:
- RHS = lado direito da expressão
- LHS = lado esquerdo da expressão
Os operadores com sufixo _cs
são sensíveis a maiúsculas e minúsculas.
Operador | Descrição | Case-Sensitive | Exemplo (rendimentos true ) |
---|---|---|---|
== |
Igual a | Yes | "aBc" == "aBc" |
!= |
Não é igual a | Yes | "abc" != "ABC" |
=~ |
Igual a | No | "abc" =~ "ABC" |
!~ |
Não é igual a | No | "aBc" !~ "xyz" |
contains |
O RHS ocorre como uma subsecção do LHS | No | "FabriKam" contains "BRik" |
!contains |
O RHS não ocorre no LHS | No | "Fabrikam" !contains "xyz" |
contains_cs |
O RHS ocorre como uma subsecção do LHS | Yes | "FabriKam" contains_cs "Kam" |
!contains_cs |
O RHS não ocorre no LHS | Yes | "Fabrikam" !contains_cs "Kam" |
endswith |
O RHS é uma subsecção de fecho do LHS | No | "Fabrikam" endswith "Kam" |
!endswith |
O RHS não é uma subsecção de fecho do LHS | No | "Fabrikam" !endswith "brik" |
endswith_cs |
O RHS é uma subsecção de fecho do LHS | Yes | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
O RHS não é uma subsecção de fecho do LHS | Yes | "Fabrikam" !endswith_cs "brik" |
has |
O lado direito (RHS) é um termo completo no lado esquerdo (LHS) | No | "North America" has "america" |
!has |
O RHS não é um termo completo no LHS | No | "North America" !has "amer" |
has_all |
O mesmo que has funciona em todos os elementos |
No | "North and South America" has_all("south", "north") |
has_any |
O mesmo que has , mas funciona em qualquer um dos elementos |
No | "North America" has_any("south", "north") |
has_cs |
RHS é um termo completo no LHS | Yes | "North America" has_cs "America" |
!has_cs |
O RHS não é um termo completo no LHS | Yes | "North America" !has_cs "amer" |
hasprefix |
RHS é um prefixo de termo no LHS | No | "North America" hasprefix "ame" |
!hasprefix |
RHS não é um prefixo de termo no LHS | No | "North America" !hasprefix "mer" |
hasprefix_cs |
RHS é um prefixo de termo no LHS | Yes | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
RHS não é um prefixo de termo no LHS | Yes | "North America" !hasprefix_cs "CA" |
hassuffix |
RHS é um termo sufixo no LHS | No | "North America" hassuffix "ica" |
!hassuffix |
RHS não é um termo sufixo no LHS | No | "North America" !hassuffix "americ" |
hassuffix_cs |
RHS é um termo sufixo no LHS | Yes | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
RHS não é um termo sufixo no LHS | Yes | "North America" !hassuffix_cs "icA" |
in |
É igual a qualquer um dos elementos | Yes | "abc" in ("123", "345", "abc") |
!in |
Não é igual a nenhum dos elementos | Yes | "bca" !in ("123", "345", "abc") |
in~ |
É igual a qualquer um dos elementos | No | "Abc" in~ ("123", "345", "abc") |
!in~ |
Não é igual a nenhum dos elementos | No | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS contém uma correspondência para RHS | Yes | "Fabrikam" matches regex "b.*k" |
startswith |
O RHS é uma subsecção inicial do LHS | No | "Fabrikam" startswith "fab" |
!startswith |
O RHS não é uma subsecção inicial do LHS | No | "Fabrikam" !startswith "kam" |
startswith_cs |
O RHS é uma subsecção inicial do LHS | Yes | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
O RHS não é uma subsecção inicial do LHS | Yes | "Fabrikam" !startswith_cs "fab" |
Sugestões de desempenho
Para um melhor desempenho, quando existem dois operadores que fazem a mesma tarefa, utilize o sensível às maiúsculas e minúsculas. Por exemplo:
- Utilizar
==
, não=~
- Utilizar
in
, nãoin~
- Utilizar
hassuffix_cs
, nãohassuffix
Para obter resultados mais rápidos, se estiver a testar a presença de um símbolo ou palavra alfanumérica vinculada por carateres não alfanuméricos ou o início ou fim de um campo, utilize has
ou in
.
has
funciona mais rapidamente do que contains
, startswith
ou endswith
.
Para procurar endereços IPv4 ou respetivos prefixos, utilize um dos operadores especiais em endereços IPv4, que estão otimizados para esta finalidade.
Para obter mais informações, veja Melhores práticas de 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 seguinte grupo de operadores fornece pesquisa acelerada por índices em endereços IPv4 ou nos respetivos prefixos.
Operador | Descrição | Exemplo (rendimentos 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 | 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 | 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."])) |
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários