次の方法で共有


find 演算子

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft Sentinel

テーブルのセットで述語が一致する行を見つけます。

find のスコープは、データベース間またはクラスター間にすることもできます。

find in (Table1, Table2, Table3) where Fruit=="apple"

find in (database('*').*) where Fruit == "apple"

find in (cluster('cluster_name').database('MyDB*').*) where Fruit == "apple"
find in (Table1, Table2, Table3) where Fruit=="apple"

Note

find 演算子は、列固有のテキスト フィルター処理よりも実質的に効率が低くなります。 列がわかっている場合は常に、 where 演算子を使用することをお勧めします。 find は、ワークスペースに多数のテーブルと列が含まれており、スキャン対象のデータ ボリュームが高く、クエリの時間範囲が長い場合は、うまく機能しません。

構文

  • find [withsource= ColumnName] [in (Tables)] where Predicate [project-smart | project ColumnName[: ColumnType , ... ][, pack_all()]]

  • findPredicate [project-smart | project ColumnName[: ColumnType , ... ] [, pack_all()]]

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 説明
[ColumnName] string 既定では、各行の基になっているソース テーブルを示す値が格納された source_ という列が出力に含まれます。 指定した場合、source_ の代わりに ColumnName が使用されます。 ワイルドカード照合の後、クエリが既定のデータベースを含む複数のデータベースのテーブルを参照する場合、この列の値はデータベースで修飾されたテーブル名になります。 同じように、複数のクラスターが参照される場合、値には ''クラスター'' と ''データベース の修飾が含まれます。
Predicate bool ✔️ このブール式は、各入力テーブルの各行に対して評価されます。 詳細については、述語構文の詳細を参照してください。
テーブル string 0 個以上のコンマ区切りテーブル参照。 既定では、 find は現在のデータベース内のすべてのテーブルを検索します。 使用できるもの:
1. テーブルの名前 (例: Events
2. クエリ式 (例: (Events | where id==42)
3. ワイルドカードで指定された一連のテーブル。 たとえば、E* を使用すると、名前が E で始まるデータベース内のすべてのテーブルのユニオンが形成されます。
project-smart または project string 指定しない場合、 project-smart は既定で使用されます。 詳細については、出力スキーマの詳細を参照してください。
  • withsource=ColumnName: 省略可能。 既定では、各行の基になっているソース テーブルを示す値が格納された source_ という列が出力に含まれます。 指定した場合、source_ の代わりに ColumnName が使用されます。

  • 述語: 入力テーブル Table [, Table, ...] の列に対するboolean 。これは、各入力テーブルの各行に対して評価されます。 詳細については、述語構文の詳細を参照してください。

  • テーブル: 省略可能。 0 個以上のコンマ区切りテーブル参照。 既定では、find で、以下について、すべてのテーブルが検索されます。

    • Events などのテーブルの名前
    • クエリ式 ( (Events | where id==42)
    • ワイルドカードで指定されたテーブルのセット。 たとえば、E* を使用すると、名前が E で始まるすべてのテーブルのユニオンが形成されます。
  • project-smart | project: 指定しない場合、project-smart が既定で使用されます。 詳細については、出力スキーマの詳細を参照してください。

返品

Table Predicatetrueされている [, Table, ...] 内の行の変換。 行は、出力スキーマに従って変換されます。

出力スキーマ

source_ 列

find 演算子の出力には、ソース テーブル名を含む source_ 列が常に含まれます。 列の名前は、withsource パラメーターを使用して変更できます。

結果列

述語の評価で使用される列を含まないソース テーブルは、フィルターで除外されます。

project-smartを使用すると、出力に表示される列は次のようになります。

  • 述語で明示的に示されている列。
  • すべてのフィルター処理されたテーブルに共通の列。

残りの列はプロパティ バッグにパックされ、追加の pack 列に表示されます。 述語によって明示的に参照され、複数の型がある複数のテーブルに表示される列の場合、そのような型ごとに結果スキーマに異なる列が示されます。 各列名は、アンダースコアで区切られた元の列名と型で構成されます。

project ColumnName[: ColumnType , ... ] [, pack_all()]:

  • 結果テーブルには、リストに指定された列が含まれます。 ソース テーブルに特定の列が含まれていない場合、対応する行の値は null になります。
  • ColumnNameColumnType を指定すると、"結果" のこの列の型は指定されたものとなり、必要に応じてその型に値がキャストされます。 Predicate を評価するときに、キャストが列の型に影響することはありません。
  • pack_all()を使用すると、投影列を含むすべての列がプロパティ バッグにパックされ、既定では "column1" という追加の列に表示されます。 プロパティ バッグでは、ソース列名がプロパティ名として機能し、列の値がプロパティ値として機能します。

述語の構文

find 演算子では、* has 用語の代替構文がサポートされます。また、''用語'' のみを使用して、すべての入力列全体で用語を検索します。

いくつかのフィルター処理関数の概要については、「where 演算子」を参照してください。

メモ

  • 複数のテーブルにあり、複数の型を持つ列が project 句で参照されている場合、型は project 句のこの列参照に従う必要があります
  • 1 つの列が複数のテーブルにあり、複数の型を持ち、project-smart が使用されている場合は、find の結果の型ごとに対応する列が示されます (union に関するページを参照)
  • project-smart を使用すると、述語、ソース テーブル セット、またはテーブル スキーマの変更によって、出力スキーマが変更される可能性があります。 定数の結果スキーマが必要な場合は、代わりに project を使用してください
  • find スコープに関数を含めることはできません。 find スコープに関数を含めるには、view キーワードを使用して let ステートメントを定義します。

パフォーマンスに関するヒント

  • 表形式の式ではなく、テーブルを使用します。 表形式の式の場合、find 演算子は、パフォーマンスが低下する可能性がある union クエリに戻されます。
  • 複数のテーブルにあり、複数の型を持つ列が project 句の一部である場合は、find に渡す前に、テーブルを変更するよりも project 句に ColumnType を追加することを優先してください。
  • 時間ベースのフィルターを述語に追加します。 datetime 列の値または ingestion_time() を使用します。
  • フル テキスト検索ではなく、特定の列を検索します。
  • 複数のテーブルにあり、複数の型を持つ列を参照しないことをお勧めします。 複数の型に対してそのような列の型を解決するときに述語が有効である場合、クエリは union に戻されます。 例については、find が union として機能する場合の例を参照してください。

現在のデータベース内のすべてのテーブルに対する用語検索

クエリでは、いずれかの列に Hernandez という単語が含まれている、現在のデータベース内のすべてのテーブルからすべての行を検索します。 結果のレコードは、出力スキーマに従って変換されます。 出力には、Customers テーブルの行と、ContosoSales データベースのSalesTable テーブルが含まれます。

find "Hernandez"

現在のデータベースの名前パターンに一致するすべてのテーブルに対する用語検索

クエリでは、名前が C で始まり、いずれかの列に Hernandez という単語が含まれている、現在のデータベース内のすべてのテーブルからすべての行を検索します。 結果のレコードは、出力スキーマに従って変換されます。 出力には、 Customers テーブルのレコードのみが含まれるようになりました。

find in (C*) where * has "Hernandez"

クラスター内のすべてのデータベースのすべてのテーブルに対する用語検索

クエリでは、いずれかの列に Kusto という単語が含まれている、データベース内のすべてのテーブルからすべての行を検索します。 このクエリは、データベース間クエリです。 結果のレコードは、出力スキーマに従って変換されます。

find in (database('*').*) where * has "Kusto"

クラスター内の名前パターンに一致するすべてのテーブルとデータベースに対する用語参照

クエリでは、名前が B で始まり、いずれかの列に Kusto という単語が含まれる、すべてのデータベース内の名前が K で始まるすべてのテーブルからすべての行を検索します。 結果のレコードは、出力スキーマに従って変換されます。

find in (database("S*").C*) where * has "Kusto"

複数のクラスターでの用語検索

クエリでは、名前が B で始まり、いずれかの列に Kusto という単語が含まれる、すべてのデータベース内の名前が K で始まるすべてのテーブルからすべての行を検索します。 結果のレコードは、出力スキーマに従って変換されます。

find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"

すべてのテーブルに対する用語検索

クエリでは、いずれかの列に Kusto という単語が含まれている、すべてのテーブルからすべての行を検索します。 結果のレコードは、出力スキーマに従って変換されます。

find "Kusto"

find 出力結果の例

次の例は、EventsTable1EventsTable2 の 2 つのテーブルで find を使用する方法を示しています。 これら 2 つのテーブルの内容が以下であると想定します。

EventsTable1

Session_Id Level EventText バージョン
acbd207d-51aa-4df7-bfa7-be70eb68f04e 情報 何らかの Text1 v1.0.0
acbd207d-51aa-4df7-bfa7-be70eb68f04e エラー 何らかの Text2 v1.0.0
28b8e46e-3c31-43cf-83cb-48921c3986fc エラー 何らかの Text3 v1.0.1
8f057b11-3281-45c3-a856-05ebb18a3c59 情報 何らかの Text4 v1.1.0

EventsTable2

Session_Id Level EventText EventName
f7d5f95f-f580-4ea6-830b-5776c8d64fdd 情報 その他の何らかの Text1 Event1
acbd207d-51aa-4df7-bfa7-be70eb68f04e 情報 その他の何らかの Text2 Event2
acbd207d-51aa-4df7-bfa7-be70eb68f04e エラー その他の何らかの Text3 Event3
15eaeab5-8576-4b58-8fc6-478f75d8fee4 エラー その他の何らかの Text4 Event4

一般的な列で検索し、一般的および一般的でない列を投影し、残りはパックする

find in (EventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error' 
     project EventText, Version, EventName, pack_all()

出力

source_ EventText バージョン EventName pack_
EventsTable1 何らかの Text2 v1.0.0 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}
EventsTable2 その他の何らかの Text3 Event3 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}

一般的および一般的でない列で検索する

find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName

出力

source_ Session_Id EventText バージョン EventName
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e 何らかの Text1 v1.0.0
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e 何らかの Text2 v1.0.0
EventsTable2 f7d5f95f-f580-4ea6-830b-5776c8d64fdd その他の何らかの Text1 Event1

注: 実際には、、EventsTable1 行は Version == 'v1.0.0' 述語でフィルター処理され、EventsTable2 行は EventName == 'Event1' 述語でフィルター処理されます。

省略表記を使用して、現在のデータベース内のすべてのテーブルを検索する

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

出力

source_ Session_Id Level EventText pack_
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e 情報 何らかの Text1 {"Version":"v1.0.0"}
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e エラー 何らかの Text2 {"Version":"v1.0.0"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e 情報 その他の何らかの Text2 {"EventName":"Event2"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e エラー その他の何らかの Text3 {"EventName":"Event3"}

各行の結果をプロパティ バッグとして返す

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()

出力

source_ pack_
EventsTable1 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"}
EventsTable1 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"}
EventsTable2 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"}
EventsTable2 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Other Text3", "EventName":"Event3"}

findunion として機能する場合の例

find オペランドとしての表形式以外の式の使用

let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

複数のテーブルにあり、複数の型を持つ列の参照

以下を実行して 2 つのテーブルを作成したとします。

.create tables 
  Table1 (Level:string, Timestamp:datetime, ProcessId:string),
  Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
  • 次のクエリは union として実行されます。
find in (Table1, Table2) where ProcessId == 1001

出力結果スキーマは (Level:string, Timestamp, ProcessId_string, ProcessId_int) になります。

  • 次のクエリも union として実行されますが、異なる結果スキーマが生成されます。
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

出力結果スキーマは (Level:string, Timestamp, ProcessId_string) になります