GitHubContribute in GitHub: オンラインでの編集

ストリング演算子

KQL には、ストリング・データ・タイプを検索するためのさまざまな照会演算子が用意されています。 以下の記事では、ストリング用語の索引付け方法、ストリング照会演算子のリスト、およびパフォーマンスを最適化するためのヒントについて説明します。

ストリング用語について

KQL は、タイプ stringの列を含むすべての列に索引を付けます。 実際のデータに応じて、そのような列に対して複数の索引が作成されます。 これらの索引は直接公開されませんが、名前の一部に has が含まれる string 演算子 ( has!hashasprefix!hasprefixなど) を使用した照会で使用されます。 これらの演算子のセマンティクスは、列のエンコード方法によって決定されます。 「プレーン」サブストリング・マッチングを実行する代わりに、これらの演算子は termsと一致します。

用語とは何ですか?

デフォルトでは、各 string 値は ASCII 英数字の最大シーケンスに分割され、それらのシーケンスはそれぞれ 1 つの用語になります。 例えば、 stringでは、用語は KQLKQLExplorerQueryRun、およびサブストリング ad67d136c1db4f9f88efd94f3b6b0b5aの各です。

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 は、 containsstartswith、または endswithよりも速く動作します。