Řetězcové operátory
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
dotazovací jazyk Kusto (KQL) nabízí různé operátory dotazů pro vyhledávání datových typů řetězců. Následující článek popisuje, jak jsou řetězcové termíny indexovány, uvádí operátory řetězcových dotazů a poskytuje tipy pro optimalizaci výkonu.
Principy řetězcových termínů
Kusto indexuje všechny sloupce včetně sloupců typu string
. Pro tyto sloupce je vytvořeno více indexů v závislosti na skutečných datech. Tyto indexy nejsou přímo vystaveny, ale používají se v dotazech s string
operátory, které mají has
jako součást jejich názvu, například has
, !has
, hasprefix
!hasprefix
. Sémantika těchto operátorů je diktována způsobem, jakým je sloupec kódován. Místo toho, aby se shodovaly "prosté" podřetězece, tyto operátory odpovídají termíny.
Co je termín?
Ve výchozím nastavení se každá string
hodnota rozdělí do maximálních sekvencí alfanumerických znaků a každá z těchto sekvencí se vytvoří do termínu.
Například v následujících string
výrazech jsou Kusto
výrazy , KustoExplorerQueryRun
a následující podřetěžce: ad67d136
, c1db
, 4f9f
, , 88ef
. d94f3b6b0b5a
.
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
Kusto vytvoří index termínů, který se skládá ze všech termínů, které jsou tři znaky nebo více, a tento index se používá řetězcovými operátory, jako has
je například , !has
a tak dále. Pokud dotaz hledá termín, který je menší než tři znaky nebo používá contains
operátor, dotaz se vrátí ke kontrole hodnot ve sloupci. Prohledávání je mnohem pomalejší než vyhledávání termínu v indexu termínů.
Operátory v řetězcích
V tomto článku se používají následující zkratky:
- RHS = pravá strana výrazu
- LHS = levá strana výrazu
Operátory s příponou _cs
rozlišují malá a velká písmena.
Operátor | Popis | Rozlišovat malá a velká písmena | Příklad (výnosy true ) |
---|---|---|---|
== |
Je rovno | Ano | "aBc" == "aBc" |
!= |
Nerovná se | Ano | "abc" != "ABC" |
=~ |
Je rovno | No | "abc" =~ "ABC" |
!~ |
Nerovná se | No | "aBc" !~ "xyz" |
contains |
RHS se vyskytuje jako dílčí sekvence LHS | No | "FabriKam" contains "BRik" |
!contains |
V LHS nedojde k RHS | No | "Fabrikam" !contains "xyz" |
contains_cs |
RHS se vyskytuje jako dílčí sekvence LHS | Ano | "FabriKam" contains_cs "Kam" |
!contains_cs |
V LHS nedojde k RHS | Ano | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS je závěrečnou dílčí sekvencí LHS. | No | "Fabrikam" endswith "Kam" |
!endswith |
RHS není závěrečnou dílčí sekvencí LHS. | No | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS je závěrečnou dílčí sekvencí LHS. | Ano | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS není závěrečnou dílčí sekvencí LHS. | Ano | "Fabrikam" !endswith_cs "brik" |
has |
Pravá strana (RHS) je celý termín na levé straně (LHS). | No | "North America" has "america" |
!has |
RHS není úplný termín v LHS | No | "North America" !has "amer" |
has_all |
Stejné jako has u všech prvků, ale funguje na všech prvech |
No | "North and South America" has_all("south", "north") |
has_any |
Stejné jako has u některého z prvků funguje |
No | "North America" has_any("south", "north") |
has_cs |
RHS je celý termín v LHS | Ano | "North America" has_cs "America" |
!has_cs |
RHS není úplný termín v LHS | Ano | "North America" !has_cs "amer" |
hasprefix |
RHS je předpona termínu v LHS. | No | "North America" hasprefix "ame" |
!hasprefix |
RHS není předpona termínu v LHS | No | "North America" !hasprefix "mer" |
hasprefix_cs |
RHS je předpona termínu v LHS. | Ano | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
RHS není předpona termínu v LHS | Ano | "North America" !hasprefix_cs "CA" |
hassuffix |
RHS je přípona termínu v LHS. | No | "North America" hassuffix "ica" |
!hassuffix |
RHS není přípona termínu v LHS | No | "North America" !hassuffix "americ" |
hassuffix_cs |
RHS je přípona termínu v LHS. | Ano | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
RHS není přípona termínu v LHS | Ano | "North America" !hassuffix_cs "icA" |
in |
Rovná se některému z prvků. | Ano | "abc" in ("123", "345", "abc") |
!in |
Nerovná se žádnému z prvků. | Ano | "bca" !in ("123", "345", "abc") |
in~ |
Rovná se některému z prvků. | No | "Abc" in~ ("123", "345", "abc") |
!in~ |
Nerovná se žádnému z prvků. | No | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS obsahuje shodu pro RHS. | Ano | "Fabrikam" matches regex "b.*k" |
startswith |
RHS je počáteční dílčí sekvence LHS. | No | "Fabrikam" startswith "fab" |
!startswith |
RHS není počáteční dílčí sekvencí LHS. | No | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS je počáteční dílčí sekvence LHS. | Ano | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS není počáteční dílčí sekvencí LHS. | Ano | "Fabrikam" !startswith_cs "fab" |
Tipy týkající se výkonu
Pokud existují dva operátory, které provádějí stejnou úlohu, pro zajištění lepšího výkonu použijte jeden operátor s rozlišováním velkých a malých písmen. Příklad:
- Použít
==
, ne=~
- Použít
in
, nein~
- Použít
hassuffix_cs
, nehassuffix
Pokud chcete zrychlit výsledky, testujete přítomnost symbolu nebo alfanumerického slova vázaného nealnumerickými znaky nebo počátečním nebo koncovým polem, použijte has
nebo in
.
has
funguje rychleji než contains
, startswith
nebo endswith
.
Pokud chcete vyhledat adresy IPv4 nebo jejich předpony, použijte jeden ze speciálních operátorů na adresách IPv4, které jsou optimalizované pro tento účel.
Další informace najdete v tématu Osvědčené postupy pro dotazy.
Například první z těchto dotazů bude rychlejší:
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
Operátory na adresách IPv4
Následující skupina operátorů poskytuje akcelerované vyhledávání indexů na adresách IPv4 nebo jejich předponách.
Operátor | Popis | Příklad (výnosy true ) |
---|---|---|
has_ipv4 | LHS obsahuje adresu IPv4 reprezentovanou RHS. | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | LHS obsahuje adresu IPv4, která odpovídá předponě reprezentované RHS. | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | LHS obsahuje jednu z IPv4 adres poskytovaných 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 obsahuje adresu IPv4, která odpovídá jedné z předpon poskytovaných RHS. | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |