GitHub GitHub: 線上編輯

字串運算子

KQL 提供各種查詢運算子來搜尋字串資料類型。 下列文章說明如何檢索字串術語、列出字串查詢運算子,以及提供最佳化效能的提示。

瞭解字串術語

KQL 會檢索所有直欄,包括 string類型的直欄。 視實際資料而定,會針對這類直欄建置多個索引。 這些索引不會直接公開,但會在查詢中使用其名稱含有 hasstring 運算子 (例如 has!hashasprefix!hasprefix)。 這些運算子的語意是由直欄編碼的方式來指定。 這些運算子會比對 terms,而不是執行 "plain" 子字串比對。

什麼是術語?

依預設,每一個 string 值會分成 ASCII 英數字元的最大序列,且每一個序列會分成一個術語。 例如,在下列 string中,術語為 KQLKQLExplorerQueryRun及下列子字串: ad67d136c1db4f9f88efd94f3b6b0b5a

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

KQL 會建置一個術語索引,其中包含 三個字元或以上的所有術語, has!has等之類的字串運算子會使用這個索引。 如果查詢尋找的術語小於三個字元,或使用 contains 運算子,則查詢將回復為掃描直欄中的值。 掃描比查閱術語索引中的術語慢得多。

字串上的運算子

下表使用下列縮寫:

  • RHS = 表示式的右側
  • LHS = 表示式左側

具有 _cs 字尾的運算子會區分大小寫。

目前僅 ASCII 文字支援不區分大小寫的運算子。 對於非 ASCII 比較,請使用 tolower () 函數。

運算子 說明 區分大小寫 範例 (生產 true)
== 等於 True "aBc" == "aBc"
!= 不等於 True "abc" != "ABC"
=~ 等於 "abc" =~ "ABC"
!~ 不等於 "aBc" !~ "xyz"
contains RHS 作為 LHS 的子序列出現 "FabriKam" contains "BRik"
!contains RHS 未出現在 LHS 中 "Fabrikam" !contains "xyz"
contains_cs RHS 作為 LHS 的子序列出現 True "FabriKam" contains_cs "Kam"
!contains_cs RHS 未出現在 LHS 中 True "Fabrikam" !contains_cs "Kam"
endswith RHS 是 LHS 的結束子序列 "Fabrikam" endswith "Kam"
!endswith RHS 不是 LHS 的結束子序列 "Fabrikam" !endswith "brik"
endswith_cs RHS 是 LHS 的結束子序列 True "Fabrikam" endswith_cs "kam"
!endswith_cs RHS 不是 LHS 的結束子序列 True "Fabrikam" !endswith_cs "brik"
has 右側 (RHS) 是左側 (LHS) 中的完整術語 "North America" has "america"
!has 在 LHS 中, RHS 不是完整術語 "North America" !has "amer"
has_all has 相同,但適用於所有元素 "North and South America" has_all("south", "north")
has_any has 相同,但適用於任何元素 "North America" has_any("south", "north")
has_cs RHS 是 LHS 中的一個完整術語 True "North America" has_cs "America"
!has_cs 在 LHS 中, RHS 不是完整術語 True "North America" !has_cs "amer"
hasprefix RHS 是 LHS 中的術語字首 "North America" hasprefix "ame"
!hasprefix RHS 不是 LHS 中的術語字首 "North America" !hasprefix "mer"
hasprefix_cs RHS 是 LHS 中的術語字首 True "North America" hasprefix_cs "Ame"
!hasprefix_cs RHS 不是 LHS 中的術語字首 True "North America" !hasprefix_cs "CA"
hassuffix RHS 是 LHS 中的術語字尾 "North America" hassuffix "ica"
!hassuffix RHS 不是 LHS 中的術語字尾 "North America" !hassuffix "americ"
hassuffix_cs RHS 是 LHS 中的術語字尾 True "North America" hassuffix_cs "ica"
!hassuffix_cs RHS 不是 LHS 中的術語字尾 True "North America" !hassuffix_cs "icA"
in 等於其中一個元素 True "abc" in ("123", "345", "abc")
!in 不等於任何元素 True "bca" !in ("123", "345", "abc")
in~ 等於任何元素 "Abc" in~ ("123", "345", "abc")
!in~ 不等於任何元素 "bCa" !in~ ("123", "345", "ABC")
matches regex LHS 包含 RHS 的相符項 True "Fabrikam" matches regex "b.*k"
startswith RHS 是 LHS 的起始子序列 "Fabrikam" startswith "fab"
!startswith RHS 不是 LHS 的起始子序列 "Fabrikam" !startswith "kam"
startswith_cs RHS 是 LHS 的起始子序列 True "Fabrikam" startswith_cs "Fab"
!startswith_cs RHS 不是 LHS 的起始子序列 True "Fabrikam" !startswith_cs "fab"

包含 has 搜尋已編製索引的 詞彙 (包含三個以上字元,而不是子字串相符項) 的所有運算子。 術語是透過將字串分解成 ASCII 英數字元序列來建立。 請參閱 瞭解字串術語

效能提示

為了獲得更好的效能,當有兩個操作員執行相同的作業時,請使用區分大小寫的運算子。 例如:

  • 使用 ==,不使用 =~
  • 使用 in,不使用 in~
  • 使用 hassuffix_cs,不使用 hassuffix

為了更快的結果,如果您要測試是否存在由非英數字元連結的符號或英數單字,或欄位的開頭或結尾,請使用 hasinhas 的運作速度比 containsstartswithendswith更快。