Dize işleçleri

Kusto Sorgu Dili (KQL), dize veri türlerini aramak için çeşitli sorgu işleçleri sunar. Aşağıdaki makalede dize terimlerinin dizine nasıl eklendiği açıklanır, dize sorgu işleçleri listelenir ve performansı iyileştirmeye yönelik ipuçları verilmektedir.

Dize terimlerini anlama

Kusto, türünde stringsütunlar da dahil olmak üzere tüm sütunları dizine alır. Gerçek verilere bağlı olarak bu tür sütunlar için birden çok dizin oluşturulur. Bu dizinler doğrudan kullanıma sunulmaz, ancak adlarının hasbir parçası olan , !has, , hasprefix!hasprefixgibi işleçlerle stringhas sorgularda kullanılır. Bu işleçlerin semantiği, sütunun kodlama şekline göre dikte edilir. Bu işleçler , "düz" alt dize eşleştirmesi yapmak yerine terimleri eşleştirir.

Terim nedir?

Varsayılan olarak, her string değer alfasayısal karakterlerin en üst düzey dizilerine ayrılır ve bu dizilerin her biri bir terime dönüştürülür.

Örneğin, aşağıdaki stringiçinde terimler Kusto, KustoExplorerQueryRunve şu alt dizelerdir: ad67d136, c1db, 4f9f, 88ef, . d94f3b6b0b5a

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

Kusto, üç veya daha fazla karakterden oluşan tüm terimlerden oluşan bir terim dizini oluşturur ve bu dizin , !hasgibi hasdize işleçleri tarafından kullanılır. Sorgu üç karakterden küçük bir terim ararsa veya işleç contains kullanırsa, sorgu sütundaki değerleri taramaya geri döner. Tarama, terim dizininde terimi aramaktan çok daha yavaştır.

Not

EngineV2'de bir terim dört veya daha fazla karakterden oluşur.

Dizelerdeki işleçler

Bu makalede aşağıdaki kısaltmalar kullanılır:

  • RHS = ifadenin sağ tarafı
  • LHS = ifadenin sol tarafı

Soneki olan _cs işleçler büyük/küçük harfe duyarlıdır.

İşleç Açıklama Case-Sensitive Örnek (ödemeler true)
== Eşittir Yes "aBc" == "aBc"
!= Eşit değil Yes "abc" != "ABC"
=~ Eşittir Hayır "abc" =~ "ABC"
!~ Eşit değil Hayır "aBc" !~ "xyz"
contains RHS, LHS'nin alt dizileri olarak gerçekleşir Hayır "FabriKam" contains "BRik"
!contains RHS LHS'de oluşmaz Hayır "Fabrikam" !contains "xyz"
contains_cs RHS, LHS'nin alt dizileri olarak gerçekleşir Yes "FabriKam" contains_cs "Kam"
!contains_cs RHS LHS'de oluşmaz Yes "Fabrikam" !contains_cs "Kam"
endswith RHS, LHS'nin kapanış alt dizidir Hayır "Fabrikam" endswith "Kam"
!endswith RHS, LHS'nin kapanış alt dizilerinden biri değildir Hayır "Fabrikam" !endswith "brik"
endswith_cs RHS, LHS'nin kapanış alt dizidir Yes "Fabrikam" endswith_cs "kam"
!endswith_cs RHS, LHS'nin kapanış alt dizilerinden biri değildir Yes "Fabrikam" !endswith_cs "brik"
has Sağ taraf (RHS), sol taraftaki (LHS) tam bir terimdir Hayır "North America" has "america"
!has RHS, LHS'de tam bir terim değildir Hayır "North America" !has "amer"
has_all has Aynı ama tüm öğeler üzerinde çalışır Hayır "North and South America" has_all("south", "north")
has_any has Aynı ama herhangi bir öğe üzerinde çalışır Hayır "North America" has_any("south", "north")
has_cs RHS, LHS'de tam bir terimdir Yes "North America" has_cs "America"
!has_cs RHS, LHS'de tam bir terim değildir Yes "North America" !has_cs "amer"
hasprefix RHS, LHS'de bir terim ön ekidir Hayır "North America" hasprefix "ame"
!hasprefix RHS, LHS'de bir terim ön eki değildir Hayır "North America" !hasprefix "mer"
hasprefix_cs RHS, LHS'de bir terim ön ekidir Yes "North America" hasprefix_cs "Ame"
!hasprefix_cs RHS, LHS'de bir terim ön eki değildir Yes "North America" !hasprefix_cs "CA"
hassuffix RHS, LHS'de bir terim sonekidir Hayır "North America" hassuffix "ica"
!hassuffix RHS, LHS'de terim soneki değildir Hayır "North America" !hassuffix "americ"
hassuffix_cs RHS, LHS'de bir terim sonekidir Yes "North America" hassuffix_cs "ica"
!hassuffix_cs RHS, LHS'de terim soneki değildir Yes "North America" !hassuffix_cs "icA"
in Öğelerden herhangi birine eşittir Yes "abc" in ("123", "345", "abc")
!in Öğelerden hiçbirine eşit değildir Yes "bca" !in ("123", "345", "abc")
in~ Öğelerden herhangi birine eşittir Hayır "Abc" in~ ("123", "345", "abc")
!in~ Öğelerden hiçbirine eşit değildir Hayır "bCa" !in~ ("123", "345", "ABC")
matches regex LHS, RHS için bir eşleşme içeriyor Yes "Fabrikam" matches regex "b.*k"
startswith RHS, LHS'nin ilk alt dizilerinden biri Hayır "Fabrikam" startswith "fab"
!startswith RHS, LHS'nin ilk alt dizilerinden biri değildir Hayır "Fabrikam" !startswith "kam"
startswith_cs RHS, LHS'nin ilk alt dizilerinden biri Yes "Fabrikam" startswith_cs "Fab"
!startswith_cs RHS, LHS'nin ilk alt dizilerinden biri değildir Yes "Fabrikam" !startswith_cs "fab"

Performans ipuçları

Daha iyi performans için, aynı görevi yerine getiren iki işleç olduğunda büyük/küçük harfe duyarlı olanı kullanın. Örnek:

  • kullanma ==, kullanma =~
  • kullanma in, kullanma in~
  • kullanma hassuffix_cs, kullanma hassuffix

Daha hızlı sonuçlar için, alfasayısal olmayan karakterlerle bağlı bir simge veya alfasayısal sözcük olup olmadığını test ediyorsanız veya kullanın hasin. has, startswithveya endswithdeğerinden containsdaha hızlı çalışır.

IPv4 adreslerini veya ön eklerini aramak için, IPv4 adreslerinde bu amaç için iyileştirilmiş özel işleçlerden birini kullanın.

Daha fazla bilgi için bkz . En iyi sorgu yöntemleri.

Örneğin, bu sorgulardan ilki daha hızlı çalışır:

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

IPv4 adreslerindeki işleçler

Aşağıdaki işleç grubu IPv4 adreslerinde veya ön eklerinde dizin hızlandırılmış arama sağlar.

İşleç Açıklama Örnek (ödemeler true)
has_ipv4 LHS, RHS tarafından temsil edilen IPv4 adresini içerir has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3")
has_ipv4_prefix LHS, RHS tarafından temsil edilen ön ekle eşleşen bir IPv4 adresi içerir has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.")
has_any_ipv4 LHS, RHS tarafından sağlanan IPv4 adreslerinden birini içerir 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, RHS tarafından sağlanan ön eklerden biriyle eşleşen bir IPv4 adresi içerir has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."]))