Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 stringvýrazech jsou Kustovýrazy , KustoExplorerQueryRuna 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 hasje například , !hasa 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ů.
Zatímco Explorer je podřetěžce KustoExplorerQueryRun, "KustoExplorerQueryRun" has "Explorer" vrátí false, zatímco "KustoExplorerQueryRun" contains "Explorer" vrátí true. Je to jemné, ale chování je způsobeno skutečností, že has je založený na termínech.
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, startswithnebo 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."])) |