Operadores de cadeiasString operators

Kusto oferece uma variedade de operadores de consulta para pesquisar tipos de dados de cadeias.Kusto offers a variety of query operators for searching string data types. O artigo que se segue descreve como os termos de cadeia são indexados, lista os operadores de consulta de cordas e dá dicas para otimizar o desempenho.The following article describes how string terms are indexed, lists the string query operators, and gives tips for optimizing performance.

Compreender termos de cordasUnderstanding string terms

Kusto indexa todas as colunas, incluindo colunas de tipo string .Kusto indexes all columns, including columns of type string. Vários índices são construídos para tais colunas, dependendo dos dados reais.Multiple indexes are built for such columns, depending on the actual data. Estes índices não estão diretamente expostos, mas são utilizados em consultas com os string operadores que têm has como parte do seu nome, tais has !has como, . . . . hasprefix !hasprefix .These indexes aren't directly exposed, but are used in queries with the string operators that have has as part of their name, such as has, !has, hasprefix, !hasprefix. A semântica destes operadores é ditada pela forma como a coluna é codificada.The semantics of these operators are dictated by the way the column is encoded. Em vez de fazerem uma correspondência de sub-adamento "simples", estes operadores correspondem aos termos.Instead of doing a "plain" substring match, these operators match terms.

Qual é o termo?What is a term?

Por padrão, cada string valor é dividido em sequências máximas de caracteres alfanuméricos ASCII, e cada uma dessas sequências é transformada num termo.By default, each string value is broken into maximal sequences of ASCII alphanumeric characters, and each of those sequences is made into a term. Por exemplo, nos string seguintes termos Kusto WilliamGates3rd são, e os seguintes sublíncos: ad67d136 , , , . . . c1db 4f9f 88ef d94f3b6b0b5a .For example, in the following string, the terms are Kusto, WilliamGates3rd, and the following substrings: ad67d136, c1db, 4f9f, 88ef, d94f3b6b0b5a.

Kusto:  ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;;WilliamGates3rd

Kusto constrói um índice de termo composto por todos os termos que são quatro caracteres ou mais, e este índice é usado por , e assim por has !has diante.Kusto builds a term index consisting of all terms that are four characters or more, and this index is used by has, !has, and so on. Se a consulta procurar um termo menor que quatro caracteres, ou usar um contains operador, Kusto voltará a digitalizar os valores na coluna se não conseguir determinar uma correspondência.If the query looks for a term that is smaller than four characters, or uses a contains operator, Kusto will revert to scanning the values in the column if it can't determine a match. Este método é muito mais lento do que olhar para o termo no índice de termo.This method is much slower than looking up the term in the term index.

Operadores em cordasOperators on strings

Nota

As seguintes abreviaturas são utilizadas na tabela abaixo:The following abbreviations are used in the table below:

  • RHS = lado direito da expressãoRHS = right hand side of the expression
  • LHS = lado esquerdo da expressãoLHS = left hand side of the expression

Os operadores com um _cs sufixo são sensíveis a casos.Operators with an _cs suffix are case sensitive.

OperadorOperator DescriçãoDescription Case-SensitiveCase-Sensitive Exemplo true (rendimentos)Example (yields true)
== Igual aEquals SimYes "aBc" == "aBc"
!= Não é igualNot equals SimYes "abc" != "ABC"
=~ Igual aEquals NãoNo "abc" =~ "ABC"
!~ Não é igualNot equals NãoNo "aBc" !~ "xyz"
has O lado direito (RHS) é um termo inteiro no lado esquerdo (LHS)Right-hand-side (RHS) is a whole term in left-hand-side (LHS) NãoNo "North America" has "america"
!has RHS não é um termo completo em LHSRHS isn't a full term in LHS NãoNo "North America" !has "amer"
has_any O mesmo has que, mas funciona em qualquer um dos elementosSame as has but works on any of the elements NãoNo "North America" has_any("south", "north")
has_cs RHS é um termo inteiro em LHSRHS is a whole term in LHS SimYes "North America" has_cs "America"
!has_cs RHS não é um termo completo em LHSRHS isn't a full term in LHS SimYes "North America" !has_cs "amer"
hasprefix RHS é um prefixo de termo em LHSRHS is a term prefix in LHS NãoNo "North America" hasprefix "ame"
!hasprefix RHS não é um prefixo de termo em LHSRHS isn't a term prefix in LHS NãoNo "North America" !hasprefix "mer"
hasprefix_cs RHS é um prefixo de termo em LHSRHS is a term prefix in LHS SimYes "North America" hasprefix_cs "Ame"
!hasprefix_cs RHS não é um prefixo de termo em LHSRHS isn't a term prefix in LHS SimYes "North America" !hasprefix_cs "CA"
hassuffix RHS é um sufixo de termo em LHSRHS is a term suffix in LHS NãoNo "North America" hassuffix "ica"
!hassuffix RHS não é um sufixo de termo em LHSRHS isn't a term suffix in LHS NãoNo "North America" !hassuffix "americ"
hassuffix_cs RHS é um sufixo de termo em LHSRHS is a term suffix in LHS SimYes "North America" hassuffix_cs "ica"
!hassuffix_cs RHS não é um sufixo de termo em LHSRHS isn't a term suffix in LHS SimYes "North America" !hassuffix_cs "icA"
contains O RHS ocorre como uma subsequência de LHSRHS occurs as a subsequence of LHS NãoNo "FabriKam" contains "BRik"
!contains O RHS não ocorre no LHSRHS doesn't occur in LHS NãoNo "Fabrikam" !contains "xyz"
contains_cs O RHS ocorre como uma subsequência de LHSRHS occurs as a subsequence of LHS SimYes "FabriKam" contains_cs "Kam"
!contains_cs O RHS não ocorre no LHSRHS doesn't occur in LHS SimYes "Fabrikam" !contains_cs "Kam"
startswith RHS é uma subsequância inicial de LHSRHS is an initial subsequence of LHS NãoNo "Fabrikam" startswith "fab"
!startswith RhS não é uma subsequância inicial de LHSRHS isn't an initial subsequence of LHS NãoNo "Fabrikam" !startswith "kam"
startswith_cs RHS é uma subsequância inicial de LHSRHS is an initial subsequence of LHS SimYes "Fabrikam" startswith_cs "Fab"
!startswith_cs RhS não é uma subsequância inicial de LHSRHS isn't an initial subsequence of LHS SimYes "Fabrikam" !startswith_cs "fab"
endswith RHS é uma subsequência de encerramento de LHSRHS is a closing subsequence of LHS NãoNo "Fabrikam" endswith "Kam"
!endswith RhS não é uma sub-equestão de encerramento de LHSRHS isn't a closing subsequence of LHS NãoNo "Fabrikam" !endswith "brik"
endswith_cs RHS é uma subsequência de encerramento de LHSRHS is a closing subsequence of LHS SimYes "Fabrikam" endswith_cs "kam"
!endswith_cs RhS não é uma sub-equestão de encerramento de LHSRHS isn't a closing subsequence of LHS SimYes "Fabrikam" !endswith_cs "brik"
matches regex LHS contém uma correspondência para RHSLHS contains a match for RHS SimYes "Fabrikam" matches regex "b.*k"
in É igual a um dos elementosEquals to one of the elements SimYes "abc" in ("123", "345", "abc")
!in Não é igual a nenhum dos elementosNot equals to any of the elements SimYes "bca" !in ("123", "345", "abc")
in~ É igual a um dos elementosEquals to one of the elements NãoNo "abc" in~ ("123", "345", "ABC")
!in~ Não é igual a nenhum dos elementosNot equals to any of the elements NãoNo "bca" !in~ ("123", "345", "ABC")

Dica

Todos os operadores que has contenham pesquisa em termos indexados de quatro ou mais caracteres, e não em partidas de sub-adstring.All operators containing has search on indexed terms of four or more characters, and not on substring matches. Um termo é criado separando a cadeia em sequências de caracteres alfanuméricos ASCII.A term is created by breaking up the string into sequences of ASCII alphanumeric characters. Consulte os termos de cadeia de compreensão.See understanding string terms.

Sugestões de desempenhoPerformance tips

Para um melhor desempenho, quando houver dois operadores que fazem a mesma tarefa, utilize o caso sensível à caixa.For better performance, when there are two operators that do the same task, use the case-sensitive one. Por exemplo:For example:

  • em vez de =~ , usar ==instead of =~, use ==
  • em vez de in~ , usar ininstead of in~, use in
  • em vez de contains , usar contains_csinstead of contains, use contains_cs

Para obter resultados mais rápidos, se estiver a testar a presença de um símbolo ou palavra alfanumérica que esteja vinculado por caracteres não alfanuméricos, ou o início ou a extremidade de um campo, use has ou in .For faster results, if you're testing for the presence of a symbol or alphanumeric word that is bound by non-alphanumeric characters, or the start or end of a field, use has or in. has funciona mais rápido contains startswith que, , ou endswith . .has works faster than contains, startswith, or endswith.

Por exemplo, a primeira destas consultas será mais rápida:For example, the first of these queries will run faster:

EventLog | where continent has "North" | count;
EventLog | where continent contains "nor" | count