Строковые операторы
язык запросов Kusto (KQL) предлагает различные операторы запросов для поиска строковых типов данных. В следующей статье описывается индексирование строковых терминов, приводится список строковых операторов запроса и даются советы по оптимизации производительности.
Общие сведения о строковых терминах
Kusto индексирует все столбцы, включая столбцы типа string
. В зависимости от фактических данных для таких столбцов создается несколько индексов. Эти индексы не предоставляются напрямую. Они используются в запросах с операторами string
, в имени которых содержится has
, например has
, !has
, hasprefix
, !hasprefix
. Семантика этих операторов определяется способом кодирования столбца. Вместо того чтобы выполнять "обычное" сопоставление подстроки, эти операторы сопоставляют термины.
Что такое термин?
По умолчанию каждое string
значение разбивается на максимальные последовательности буквенно-цифровых символов, и каждая из этих последовательностей преобразуется в термин.
Например, в следующем операторе string
терминами являются Kusto
, KustoExplorerQueryRun
и следующие подстроки: ad67d136
, c1db
, 4f9f
, 88ef
, d94f3b6b0b5a
.
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
Kusto создает индекс терминов, состоящий из всех терминов, которые составляют три или более символов, и этот индекс используется has
, !has
и т. д. Если запрос ищет термин, который содержит менее трех символов или использует оператор contains
, запрос продолжит проверять значения в столбце. Проверка выполняется намного медленнее, чем поиск термина в индексе терминов.
Примечание
В EngineV2 термин состоит из четырех или более символов.
Операторы в строках
В этой статье используются следующие сокращения:
- ПЧ = правая часть выражения
- ЛЧ = левая часть выражения
Операторы с суффиксом _cs
учитывают регистр.
Оператор | Описание | С учетом регистра | Пример (при true ) |
---|---|---|---|
== |
Равно | Да | "aBc" == "aBc" |
!= |
Не равно | Да | "abc" != "ABC" |
=~ |
Равно | Нет | "abc" =~ "ABC" |
!~ |
Не равно | Нет | "aBc" !~ "xyz" |
contains |
RHS возникает как последовательность LHS | Нет | "FabriKam" contains "BRik" |
!contains |
RHS не возникает в LHS | Нет | "Fabrikam" !contains "xyz" |
contains_cs |
RHS возникает как последовательность LHS | Да | "FabriKam" contains_cs "Kam" |
!contains_cs |
RHS не возникает в LHS | Да | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS является закрывающей последовательностью LHS | Нет | "Fabrikam" endswith "Kam" |
!endswith |
RHS не является закрывающей последовательностью LHS | Нет | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS является закрывающей последовательностью LHS | Да | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS не является закрывающей последовательностью LHS | Да | "Fabrikam" !endswith_cs "brik" |
has |
Правая часть представляет собой все слово в левой части | Нет | "North America" has "america" |
!has |
ПЧ не является полным термином в ЛЧ | Нет | "North America" !has "amer" |
has_all |
Аналогичен has , но работает со всеми элементами |
Нет | "North and South America" has_all("south", "north") |
has_any |
Аналогичен has , но работает с любыми элементами |
Нет | "North America" has_any("south", "north") |
has_cs |
ПЧ представляет целый термин в ЛЧ | Да | "North America" has_cs "America" |
!has_cs |
ПЧ не является полным термином в ЛЧ | Да | "North America" !has_cs "amer" |
hasprefix |
ПЧ является префиксом термина в ЛЧ | Нет | "North America" hasprefix "ame" |
!hasprefix |
ПЧ не является префиксом термина в ЛЧ | Нет | "North America" !hasprefix "mer" |
hasprefix_cs |
ПЧ является префиксом термина в ЛЧ | Да | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
ПЧ не является префиксом термина в ЛЧ | Да | "North America" !hasprefix_cs "CA" |
hassuffix |
ПЧ является суффиксом термина в ЛЧ | Нет | "North America" hassuffix "ica" |
!hassuffix |
ПЧ не является суффиксом термина в ЛЧ | Нет | "North America" !hassuffix "americ" |
hassuffix_cs |
ПЧ является суффиксом термина в ЛЧ | Да | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
ПЧ не является суффиксом термина в ЛЧ | Да | "North America" !hassuffix_cs "icA" |
in |
Равно любому из элементов | Да | "abc" in ("123", "345", "abc") |
!in |
Не соответствует одному из элементов | Да | "bca" !in ("123", "345", "abc") |
in~ |
Равно любому из элементов | Нет | "Abc" in~ ("123", "345", "abc") |
!in~ |
Не соответствует одному из элементов | Нет | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS содержит совпадение для RHS | Да | "Fabrikam" matches regex "b.*k" |
startswith |
RHS является начальной последовательностью LHS | Нет | "Fabrikam" startswith "fab" |
!startswith |
RHS не является начальной последовательностью LHS | Нет | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS является начальной последовательностью LHS | Да | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS не является начальной последовательностью LHS | Да | "Fabrikam" !startswith_cs "fab" |
Советы по улучшению производительности
Для повышения производительности при наличии двух операторов, которые выполняют одну и ту же задачу, используйте тот, который учитывает регистр. Пример:
- Используйте
==
, не=~
- Используйте
in
, неin~
- Используйте
hassuffix_cs
, неhassuffix
Для ускорения результатов при тестировании на наличие символа или буквенно-цифрового слова, которое связано с символами, отличными от алфавитных символов, или в начале или в конце поля используйте has
или in
.
has
выполняется быстрее, чем contains
, startswith
или endswith
.
Для поиска IPv4-адресов или их префиксов используйте один из специальных операторов для IPv4-адресов, оптимизированных для этой цели.
Дополнительные сведения см. в рекомендациях по запросам.
Например, первый из этих запросов будет выполняться быстрее:
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
Операторы на IPv4-адресах
Следующая группа операторов обеспечивает ускоренный поиск по индексам по IPv4-адресам или их префиксам.
Оператор | Описание | Пример (при true ) |
---|---|---|
has_ipv4 | LHS содержит IPv4-адрес, представленный RHS | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | LHS содержит IPv4-адрес, соответствующий префиксу, представленному RHS. | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | LHS содержит один из IPv4-адресов, предоставляемых 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 содержит IPv4-адрес, соответствующий одному из префиксов, предоставляемых RHS. | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по