Sztringoperátorok

Kusto lekérdezésnyelv (KQL) különböző lekérdezési operátorokat kínál a sztring adattípusok kereséséhez. A következő cikk ismerteti a sztringkifejezések indexelését, felsorolja a sztringlekérdezési operátorokat, és tippeket ad a teljesítmény optimalizálásához.

A sztringkifejezések ismertetése

A Kusto az összes oszlopot indexeli, beleértve a típusú stringoszlopokat is. Az ilyen oszlopokhoz a tényleges adatoktól függően több index is készül. Ezek az indexek nem érhetők el közvetlenül, hanem olyan operátorokkal való lekérdezésekben használatosak, amelyek has a string nevük részét képezik, például has, !has, hasprefix, !hasprefix. Ezeknek az operátoroknak a szemantikáját az oszlop kódolásának módja határozza meg. Ahelyett, hogy "egyszerű" részsztring-egyezést végeznek, ezek az operátorok megegyeznek a kifejezésekkel.

Mi az a kifejezés?

Alapértelmezés szerint minden string érték alfanumerikus karakterek maximális sorozatára van felosztva, és ezek mindegyike kifejezéssé alakul.

A következőben stringpéldául a kifejezések Kustoa következők: , KustoExplorerQueryRun, és a következő részsztringek: ad67d136, c1db, 4f9f, 88ef. d94f3b6b0b5a

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

A Kusto létrehoz egy kifejezésindexet, amely az összes olyan kifejezésből áll, amely három vagy több karakterből áll, és ezt az indexet olyan sztringoperátorok használják, mint hasa , !hasés így tovább. Ha a lekérdezés három karakternél kisebb kifejezést keres, vagy operátort contains használ, akkor a lekérdezés visszaáll az oszlop értékeinek vizsgálatához. A vizsgálat sokkal lassabb, mint a kifejezés keresése az indexben.

Megjegyzés

A EngineV2-ben egy kifejezés négy vagy több karakterből áll.

Operátorok sztringeken

Ebben a cikkben a következő rövidítéseket használjuk:

  • RHS = a kifejezés jobb oldala
  • LHS = a kifejezés bal oldala

Az utótaggal rendelkező _cs operátorok megkülönböztetik a kis- és nagybetűket.

Operátor Leírás Case-Sensitive Példa (hozamok true)
== Egyenlő Igen "aBc" == "aBc"
!= Nem egyenlő Yes "abc" != "ABC"
=~ Egyenlő Nem "abc" =~ "ABC"
!~ Nem egyenlő Nem "aBc" !~ "xyz"
contains Az RHS az LHS alhálózataként fordul elő Nem "FabriKam" contains "BRik"
!contains Az RHS nem fordul elő az LHS-ben Nem "Fabrikam" !contains "xyz"
contains_cs Az RHS az LHS alhálózataként fordul elő Igen "FabriKam" contains_cs "Kam"
!contains_cs Az RHS nem fordul elő az LHS-ben Yes "Fabrikam" !contains_cs "Kam"
endswith Az RHS az LHS záró részlekérdezése Nem "Fabrikam" endswith "Kam"
!endswith Az RHS nem az LHS záró részlekérdezése Nem "Fabrikam" !endswith "brik"
endswith_cs Az RHS az LHS záró részlekérdezése Igen "Fabrikam" endswith_cs "kam"
!endswith_cs Az RHS nem az LHS záró részlekérdezése Yes "Fabrikam" !endswith_cs "brik"
has A jobb oldali (RHS) egy teljes kifejezés a bal oldalon (LHS) Nem "North America" has "america"
!has Az RHS nem teljes kifejezés az LHS-ben Nem "North America" !has "amer"
has_all Ugyanaz, mint az has összes elemen Nem "North and South America" has_all("south", "north")
has_any Ugyanaz, mint az has elemek bármelyikén Nem "North America" has_any("south", "north")
has_cs Az RHS egy teljes kifejezés az LHS-ben Igen "North America" has_cs "America"
!has_cs Az RHS nem teljes kifejezés az LHS-ben Yes "North America" !has_cs "amer"
hasprefix Az RHS egy kifejezéselőtag az LHS-ben Nem "North America" hasprefix "ame"
!hasprefix Az RHS nem kifejezéselőtag az LHS-ben Nem "North America" !hasprefix "mer"
hasprefix_cs Az RHS egy kifejezéselőtag az LHS-ben Igen "North America" hasprefix_cs "Ame"
!hasprefix_cs Az RHS nem kifejezéselőtag az LHS-ben Yes "North America" !hasprefix_cs "CA"
hassuffix Az RHS egy kifejezés utótagja az LHS-ben Nem "North America" hassuffix "ica"
!hassuffix Az RHS nem kifejezés-utótag az LHS-ben Nem "North America" !hassuffix "americ"
hassuffix_cs Az RHS egy kifejezés utótagja az LHS-ben Yes "North America" hassuffix_cs "ica"
!hassuffix_cs Az RHS nem kifejezés-utótag az LHS-ben Igen "North America" !hassuffix_cs "icA"
in Az elemek bármelyikével egyenlő Yes "abc" in ("123", "345", "abc")
!in Nem egyenlő egyetlen elemével sem Igen "bca" !in ("123", "345", "abc")
in~ Az elemek bármelyikével egyenlő Nem "Abc" in~ ("123", "345", "abc")
!in~ Nem egyenlő egyetlen elemével sem Nem "bCa" !in~ ("123", "345", "ABC")
matches regex Az LHS egyezést tartalmaz az RHS-hez Yes "Fabrikam" matches regex "b.*k"
startswith Az RHS az LHS kezdeti alhálózata Nem "Fabrikam" startswith "fab"
!startswith Az RHS nem az LHS kezdeti alhálózata Nem "Fabrikam" !startswith "kam"
startswith_cs Az RHS az LHS kezdeti alhálózata Yes "Fabrikam" startswith_cs "Fab"
!startswith_cs Az RHS nem az LHS kezdeti alhálózata Igen "Fabrikam" !startswith_cs "fab"

Teljesítménnyel kapcsolatos tippek

A jobb teljesítmény érdekében, ha két operátor hajtja végre ugyanazt a feladatot, használja a kis- és nagybetűket megkülönböztető operátort. Például:

  • Használja a ==, nem =~
  • Használja a in, nem in~
  • Használja a hassuffix_cs, nem hassuffix

A gyorsabb eredmény érdekében, ha nem alfanumerikus karakterek által kötött szimbólumot vagy alfanumerikus szót, illetve egy mező kezdetét vagy végét teszteli, használja has a vagy ina parancsot. has gyorsabban működik, mint containsa , startswithvagy endswith.

Az IPv4-címek vagy azok előtagjainak kereséséhez használja az IPv4-címek egyik speciális operátorát, amely erre a célra van optimalizálva.

További információ: Ajánlott lekérdezési eljárások.

Az első lekérdezés például gyorsabban fog futni:

StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count

IPv4-címek operátorai

Az operátorok alábbi csoportja indexgyors keresést biztosít az IPv4-címeken vagy azok előtagjaikon.

Operátor Leírás Példa (hozamok true)
has_ipv4 Az LHS az RHS által képviselt IPv4-címet tartalmazza has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3")
has_ipv4_prefix Az LHS egy olyan IPv4-címet tartalmaz, amely megfelel az RHS által képviselt előtagnak has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.")
has_any_ipv4 Az LHS az RHS által biztosított IPv4-címeket tartalmazza has_any_ipv4("Source address is 10.1.2.3:1234", dynamic(["10.1.2.3", "127.0.0.1"]))
has_any_ipv4_prefix Az LHS egy olyan IPv4-címet tartalmaz, amely megfelel az RHS által biztosított előtagok egyikének has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."]))