字串運算子
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
Kusto 查詢語言 (KQL) 提供各種查詢運算符來搜尋字串數據類型。 下列文章說明如何編製字串字詞的索引、列出字串查詢運算元,並提供優化效能的秘訣。
瞭解字串字詞
Kusto 會編制所有資料行的索引,包括 類型 string
的數據行。 根據實際數據,會針對這類數據行建置多個索引。 這些索引不會直接公開,但會用於具有string
其名稱一部分之運算符has
的查詢,例如 has
、!has
、、 hasprefix
!hasprefix
。 這些運算子的語意取決於數據行編碼的方式。 這些運算符會比對字詞,而不是執行「一般」子字串比對。
什麼是字詞?
根據預設,每個 string
值都會分成英數位元的最大序列,而且每個序列都會變成字詞。
例如,在下列string
中,字詞為Kusto
、 KustoExplorerQueryRun
和下列子字串:ad67d136
、、、c1db
、4f9f
88ef
、 d94f3b6b0b5a
。
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
Kusto 會建置字詞索引,其中包含三個字元以上的所有字詞,而且此索引是由字串運算符,例如 has
、 !has
等等使用。 如果查詢尋找小於三個字元的字詞,或使用 contains
運算符,則查詢會還原為掃描數據行中的值。 掃描速度比查閱字詞索引中的字詞慢得多。
字串上的運算符
本文使用下列縮寫:
- RHS = 表達式右側
- LHS = 表達式的左側
後綴為 _cs
區分大小寫的運算符。
Operator | 描述 | 區分大小寫 | 範例 (yields true ) |
---|---|---|---|
== |
等於 | Yes | "aBc" == "aBc" |
!= |
不等於 | Yes | "abc" != "ABC" |
=~ |
等於 | No | "abc" =~ "ABC" |
!~ |
不等於 | No | "aBc" !~ "xyz" |
contains |
RHS 會以 LHS 的子序列發生 | No | "FabriKam" contains "BRik" |
!contains |
RHS 不會發生在 LHS 中 | No | "Fabrikam" !contains "xyz" |
contains_cs |
RHS 會以 LHS 的子序列發生 | Yes | "FabriKam" contains_cs "Kam" |
!contains_cs |
RHS 不會發生在 LHS 中 | Yes | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS 是 LHS 的結尾子序列 | No | "Fabrikam" endswith "Kam" |
!endswith |
RHS 不是 LHS 的結尾子序列 | No | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS 是 LHS 的結尾子序列 | Yes | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS 不是 LHS 的結尾子序列 | Yes | "Fabrikam" !endswith_cs "brik" |
has |
右手邊 (RHS) 是左側的整個詞彙 (LHS) | No | "North America" has "america" |
!has |
RHS 在 LHS 中不是完整詞彙 | No | "North America" !has "amer" |
has_all |
與 has 相同,但適用於所有元素 |
No | "North and South America" has_all("south", "north") |
has_any |
與 has 相同,但適用於任何專案 |
No | "North America" has_any("south", "north") |
has_cs |
RHS 是 LHS 中的完整詞彙 | Yes | "North America" has_cs "America" |
!has_cs |
RHS 在 LHS 中不是完整詞彙 | Yes | "North America" !has_cs "amer" |
hasprefix |
RHS 是 LHS 中的字詞前置詞 | No | "North America" hasprefix "ame" |
!hasprefix |
RHS 不是 LHS 中的字詞前置詞 | No | "North America" !hasprefix "mer" |
hasprefix_cs |
RHS 是 LHS 中的字詞前置詞 | Yes | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
RHS 不是 LHS 中的字詞前置詞 | Yes | "North America" !hasprefix_cs "CA" |
hassuffix |
RHS 是 LHS 中的字詞後綴 | No | "North America" hassuffix "ica" |
!hassuffix |
RHS 不是 LHS 中的字詞後綴 | No | "North America" !hassuffix "americ" |
hassuffix_cs |
RHS 是 LHS 中的字詞後綴 | Yes | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
RHS 不是 LHS 中的字詞後綴 | Yes | "North America" !hassuffix_cs "icA" |
in |
等於任何專案 | Yes | "abc" in ("123", "345", "abc") |
!in |
不等於任何專案 | Yes | "bca" !in ("123", "345", "abc") |
in~ |
等於任何專案 | No | "Abc" in~ ("123", "345", "abc") |
!in~ |
不等於任何專案 | No | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS 包含 RHS 的相符專案 | Yes | "Fabrikam" matches regex "b.*k" |
startswith |
RHS 是 LHS 的初始子序列 | No | "Fabrikam" startswith "fab" |
!startswith |
RHS 不是 LHS 的初始子序列 | No | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS 是 LHS 的初始子序列 | Yes | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS 不是 LHS 的初始子序列 | Yes | "Fabrikam" !startswith_cs "fab" |
效能祕訣
為了提升效能,當有兩個運算符執行相同的工作時,請使用區分大小寫的運算符。 例如:
- 使用
==
,而非=~
- 使用
in
,而非in~
- 使用
hassuffix_cs
,而非hassuffix
為了取得更快的結果,如果您要測試是否有由非英數位元系結的符號或英數位元字,或是字段的開頭或結尾,請使用 has
或 in
。
has
的運作速度比 contains
、 startswith
或 endswith
快。
若要搜尋 IPv4 位址或其前置詞,請在 IPv4 位址上使用其中一個特殊運算符,其已針對此目的優化。
如需詳細資訊,請參閱 查詢最佳做法。
例如,這些查詢中的第一個會更快執行:
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
IPv4 位址上的運算符
下列運算符群組會在 IPv4 位址或其前置詞上提供索引加速搜尋。
Operator | 描述 | 範例 (yields true ) |
---|---|---|
has_ipv4 | LHS 包含 RHS 所代表的 IPv4 位址 | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | LHS 包含符合 RHS 所代表前置詞的 IPv4 位址 | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | LHS 包含 RHS 提供的其中一個 IPv4 位址 | 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 所提供其中一個前置詞的 IPv4 位址 | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |