Řetězcové operátory
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 se indexují termíny řetězců, uvádí operátory řetězcových dotazů a nabízí tipy pro optimalizaci výkonu.
Principy termínů řetězců
Kusto indexuje všechny sloupce, včetně sloupců typu string
. Pro tyto sloupce se vytváří více indexů v závislosti na skutečných datech. Tyto indexy nejsou přímo zveřejněné, ale používají se v dotazech s string
operátory, které mají has
jako součást názvu, například has
, !has
, hasprefix
, . !hasprefix
Sémantika těchto operátorů je určena způsobem kódování sloupce. Místo prosté shody podřetězece se tyto operátory shodují s termíny.
Co je termín?
Ve výchozím nastavení je každá string
hodnota rozdělena do maximálních sekvencí alfanumerických znaků a každá z těchto sekvencí je tvořena termínem.
Například v následujícím string
výrazu jsou Kusto
výrazy , KustoExplorerQueryRun
a následující podřetětě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é mají tři nebo více znaků, a tento index používají řetězcové operátory, jako has
jsou , !has
a tak dále. Pokud dotaz hledá termín, který je menší než tři znaky, nebo pokud 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ů.
Poznámka
Ve EngineV2 se termín skládá ze čtyř nebo více znaků.
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
U operátorů s příponou _cs
se rozlišují malá a velká písmena.
Operátor | Popis | Case-Sensitive | 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. | Ne | "FabriKam" contains "BRik" |
!contains |
RHS se v LHS nevyskytuje | Ne | "Fabrikam" !contains "xyz" |
contains_cs |
RHS se vyskytuje jako dílčí sekvence LHS. | Ano | "FabriKam" contains_cs "Kam" |
!contains_cs |
RHS se v LHS nevyskytuje | Ano | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS je uzavírací podsekvence LHS. | Ne | "Fabrikam" endswith "Kam" |
!endswith |
RHS není uzavírací podsekvence LHS | Ne | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS je uzavírací podsekvence LHS. | Ano | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS není uzavírací podsekvence LHS | Ano | "Fabrikam" !endswith_cs "brik" |
has |
Pravá strana (RHS) je celý výraz z levé strany (LHS). | Ne | "North America" has "america" |
!has |
RHS není úplný termín v LHS | Ne | "North America" !has "amer" |
has_all |
Stejné jako has , ale funguje u všech prvků. |
Ne | "North and South America" has_all("south", "north") |
has_any |
Stejné jako has , ale funguje u libovolného prvku. |
Ne | "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. | Ne | "North America" hasprefix "ame" |
!hasprefix |
RHS není předpona termínu v LHS | Ne | "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. | Ne | "North America" hassuffix "ica" |
!hassuffix |
RHS není přípona termínu v LHS | Ne | "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ů. | Ne | "Abc" in~ ("123", "345", "abc") |
!in~ |
Nerovná se žádnému z prvků. | Ne | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS obsahuje shodu pro RHS | Ano | "Fabrikam" matches regex "b.*k" |
startswith |
RHS je počáteční podsekvence LHS. | Ne | "Fabrikam" startswith "fab" |
!startswith |
RHS není počáteční podsekvence LHS | Ne | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS je počáteční podsekvence LHS. | Ano | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS není počáteční podsekvence LHS | Ano | "Fabrikam" !startswith_cs "fab" |
Tipy pro zvýšení výkonu
Pokud chcete zlepšit výkon, pokud existují dva operátory, které dělají stejnou úlohu, použijte operátor rozlišující malá a velká písmena. Příklad:
- Použít
==
, ne=~
- Použít
in
, nein~
- Použít
hassuffix_cs
, nehassuffix
Pokud testujete přítomnost symbolu nebo alfanumerického slova svázaného nealfanumerickými znaky nebo začátku nebo konce pole, pro zajištění rychlejších výsledků 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ů pro adresy IPv4, které jsou pro tento účel optimalizované.
Další informace najdete v tématu Osvědčené postupy pro dotazy.
Například první z těchto dotazů se spustí rychleji:
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
Operátory na IPv4 adresách
Následující skupina operátorů poskytuje indexované vyhledávání iPv4 adres nebo jejich předpon.
Operátor | Popis | Příklad (výnosy true ) |
---|---|---|
has_ipv4 | LHS obsahuje IPv4 adresu 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, které poskytuje 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 službou RHS. | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |
Váš názor
Odeslat a zobrazit názory pro