Aracılığıyla paylaş


Dize işleçleri

Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini Azure İzleyiciMicrosoft Sentinel

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 ekler. 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 , , !hasprefixgibi !hashashasprefixadlarının bir parçası olan has işleçlerle string yapılan sorgularda kullanılır. Bu işleçlerin semantiği, sütunun kodlama şekline göre dikte edilir. "Düz" alt dize eşleştirmesi yapmak yerine, bu işleçler 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 aşağıdaki 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.

Dizelerdeki işleçler

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

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

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

Operator Açıklama Büyük/Küçük Harfe Duyarlı Örnek (verimler 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 bir alt dizi olarak oluşur Hayır "FabriKam" contains "BRik"
!contains RHS LHS'de oluşmaz Hayır "Fabrikam" !contains "xyz"
contains_cs RHS, LHS'nin bir alt dizi olarak oluşur 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) tüm 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ı ancak tüm öğelerde çalışır Hayır "North and South America" has_all("south", "north")
has_any has Aynı ancak 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 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 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 bir 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 bir terim soneki değildir Yes "North America" !hassuffix_cs "icA"
in Öğelerden herhangi birine eşittir Yes "abc" in ("123", "345", "abc")
!in Öğelerin 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~ Öğelerin 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 dizisini oluşturur 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 dizisini oluşturur 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. Örneğin:

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

Daha hızlı sonuç almak için, alfasayısal olmayan karakterlerle bağlı bir simge veya alfasayısal sözcük olup olmadığını ya da bir alanın başlangıcını veya sonunu test ediyorsanız veya inkullanınhas. has, startswithveya endswithdeğerinden containsdaha hızlı çalışır.

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

Daha fazla bilgi için bkz . Sorgu en iyi 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.

Operator Açıklama Örnek (verimler 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."]))