ストリング演算子
KQL には、ストリング・データ・タイプを検索するためのさまざまな照会演算子が用意されています。 以下の記事では、ストリング用語の索引付け方法、ストリング照会演算子のリスト、およびパフォーマンスを最適化するためのヒントについて説明します。
ストリング用語について
KQL は、タイプ string
の列を含むすべての列に索引を付けます。 実際のデータに応じて、そのような列に対して複数の索引が作成されます。 これらの索引は直接公開されませんが、名前の一部に has
が含まれる string
演算子 ( has
、 !has
、 hasprefix
、 !hasprefix
など) を使用した照会で使用されます。 これらの演算子のセマンティクスは、列のエンコード方法によって決定されます。 「プレーン」サブストリング・マッチングを実行する代わりに、これらの演算子は termsと一致します。
用語とは何ですか?
デフォルトでは、各 string
値は ASCII 英数字の最大シーケンスに分割され、それらのシーケンスはそれぞれ 1 つの用語になります。 例えば、 string
では、用語は KQL
、 KQLExplorerQueryRun
、およびサブストリング ad67d136
、 c1db
、 4f9f
、 88ef
、 d94f3b6b0b5a
の各です。
KQL: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
KQL は、 3 文字以上のすべての用語で構成される用語索引を作成します。この索引は、 has
、 !has
などのストリング演算子で使用されます。 照会が 3 文字未満の用語を検索する場合、または contains
演算子を使用する場合、照会は列内の値のスキャンに戻ります。 スキャンは、用語索引で用語を検索するよりもはるかに遅くなります。
ストリングの演算子
以下の表では、以下の省略形を使用しています。
- RHS = 式の右側。
- LHS = 式の左側。
_cs
接尾部を持つ演算子には、大/小文字の区別があります。
大/小文字を区別しない演算子は、現在 ASCII テキストでのみサポートされています。 非 ASCII 比較の場合は、 tolower () 関数を使用します。
オペレーター | 説明 | 大文字と小文字を区別する | 例 ( true が生成されます) |
---|---|---|---|
== |
等しい | はい | "aBc" == "aBc" |
!= |
次と等しくない | はい | "abc" != "ABC" |
=~ |
等しい | いいえ | "abc" =~ "ABC" |
!~ |
次と等しくない | いいえ | "aBc" !~ "xyz" |
contains |
RHS は、LHS のサブシーケンスとして発生します。 | いいえ | "FabriKam" contains "BRik" |
!contains |
LHS で RHS が発生しない | いいえ | "Fabrikam" !contains "xyz" |
contains_cs |
RHS は、LHS のサブシーケンスとして発生します。 | はい | "FabriKam" contains_cs "Kam" |
!contains_cs |
LHS で RHS が発生しない | はい | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS は、LHS の終了サブシーケンスです。 | いいえ | "Fabrikam" endswith "Kam" |
!endswith |
RHS は LHS の終了サブシーケンスではありません | いいえ | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS は、LHS の終了サブシーケンスです。 | はい | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS は LHS の終了サブシーケンスではありません | はい | "Fabrikam" !endswith_cs "brik" |
has |
右側 (RHS) は、左側 (LHS) の全体を意味する用語です。 | いいえ | "North America" has "america" |
!has |
RHS は LHS では完全な用語ではありません | いいえ | "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 では用語全体です。 | はい | "North America" has_cs "America" |
!has_cs |
RHS は LHS では完全な用語ではありません | はい | "North America" !has_cs "amer" |
hasprefix |
RHS は、LHS では用語の接頭部です。 | いいえ | "North America" hasprefix "ame" |
!hasprefix |
LHS では RHS は用語の接頭部ではありません | いいえ | "North America" !hasprefix "mer" |
hasprefix_cs |
RHS は、LHS では用語の接頭部です。 | はい | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
LHS では RHS は用語の接頭部ではありません | はい | "North America" !hasprefix_cs "CA" |
hassuffix |
RHS は、LHS では用語の接尾部です。 | いいえ | "North America" hassuffix "ica" |
!hassuffix |
LHS では RHS は用語の接尾部ではありません | いいえ | "North America" !hassuffix "americ" |
hassuffix_cs |
RHS は、LHS では用語の接尾部です。 | はい | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
LHS では RHS は用語の接尾部ではありません | はい | "North America" !hassuffix_cs "icA" |
in |
いずれかの要素に等しい | はい | "abc" in ("123", "345", "abc") |
!in |
どの要素とも等しくない | はい | "bca" !in ("123", "345", "abc") |
in~ |
いずれかの要素に等しい | いいえ | "Abc" in~ ("123", "345", "abc") |
!in~ |
どの要素とも等しくない | いいえ | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
LHS には、RHS と一致するものが含まれています。 | はい | "Fabrikam" matches regex "b.*k" |
startswith |
RHS は、LHS の初期サブシーケンスです。 | いいえ | "Fabrikam" startswith "fab" |
!startswith |
RHS は LHS の初期サブシーケンスではありません | いいえ | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS は、LHS の初期サブシーケンスです。 | はい | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS は LHS の初期サブシーケンスではありません | はい | "Fabrikam" !startswith_cs "fab" |
サブストリング・マッチングではなく、3 文字以上の has
索引付き 用語の検索 を含むすべての演算子。 用語は、ストリングを ASCII 英数字のシーケンスに分割することによって作成されます。 ストリングの用語についてを参照してください。
パフォーマンスのヒント
パフォーマンスを向上させるために、同じタスクを実行するオペレーターが 2 人いる場合は、大/小文字を区別する 1 人を使用してください。 例:
=~
ではなく、==
を使用してください。in~
ではなく、in
を使用してください。hassuffix
ではなく、hassuffix_cs
を使用してください。
より迅速な結果を得るために、非英数字でバインドされたシンボルまたは英数字ワードの存在、あるいはフィールドの開始または終了をテストする場合は、 has
または in
を使用してください。 has
は、 contains
、 startswith
、または endswith
よりも速く動作します。