次の方法で共有


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)] wherePredicate [project-smart | projectColumnName[:ColumnType, ... ][,pack_all()]]

  • find Predicate [project-smart | projectColumnName[: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 使用されます。

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

  • テーブル: 省略可能。 0 個以上のコンマ区切りテーブル参照。 既定では、すべてのテーブル 検索 検索します。

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

返品

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

出力スキーマ

source_ 列

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

結果列

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

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

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

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

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

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

述語の構文

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

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

考慮 事項

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

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

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

この記事の例では、Samples データベースの StormEvents テーブルなど、ヘルプ クラスターので一般公開されているテーブルを使用します。

この記事の例では、Weather Analytics サンプル データStormEvents テーブルなど、一般公開されているテーブルを使用します。

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

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

find "Hernandez"

出力

次の表は、出力の最初の 3 行を示しています。

source_ pack_
顧客 {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":5023,"Education":"Partial High School","FirstName":"Devin","Gender":"M","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"}
顧客 {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7814,"Education":"Partial College","FirstName":"Kristy","Gender":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"}
顧客 {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7888,"Education":"Partial High School","FirstName":"Kari","Gender":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"}
... ...

名前パターンに一致するすべてのテーブルの用語参照

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

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

出力

次の表は、出力の最初の 3 行を示しています。

source_ pack_
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":Wednesday, 5 月 26 日\n午前 8 時 30 分から午前 9 時 30 分 GMT"、"kusto_affinity":"Focused"}
ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Azure Kusto クエリ言語の詳細。 ","session_type":"Theater","owner":"Jean Francois Berenguer","participants":","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":","starttime":null,"duration":null,"time_and_duration":","kusto_affinity":"Focused"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":Wednesday, 5 月 26 日\n午前 8 時 30 分から午前 9 時 30 分 GMT"、"kusto_affinity":"Focused"}
... ...

クラスター全体の用語参照

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

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

出力

次の表は、出力の最初の 3 行を示しています。

source_ pack_
database("Samples")。ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":Wednesday, 5 月 26 日\n午前 8 時 30 分から午前 9 時 30 分 GMT"、"kusto_affinity":"Focused"}
database("Samples")。ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Azure Kusto クエリ言語の詳細。 ","session_type":"Theater","owner":"Jean Francois Berenguer","participants":","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":","starttime":null,"duration":null,"time_and_duration":","kusto_affinity":"Focused"}
database("Samples")。ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":Wednesday, 5 月 26 日\n午前 8 時 30 分から午前 9 時 30 分 GMT"、"kusto_affinity":"Focused"}
... ...

クラスター内の名前パターンに一致する用語参照

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

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

出力

次の表は、出力の最初の 3 行を示しています。

source_ pack_
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":Wednesday, 5 月 26 日\n午前 8 時 30 分から午前 9 時 30 分 GMT"、"kusto_affinity":"Focused"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":Wednesday, 5 月 26 日\n午前 8 時 30 分から午前 9 時 30 分 GMT"、"kusto_affinity":"Focused"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":Wednesday, 5 月 26 日\n午前 8 時 30 分から午前 9 時 30 分 GMT"、"kusto_affinity":"Focused"}
... ...

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

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

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

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

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

find "Kusto"

find 出力結果の例

次の例は、findEventsTable2 の 2 つのテーブルで を使用する方法を示しています。 これら 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

共通列、プロジェクト共通列、および一般的でない列を検索し、残りの列をパックする

このクエリでは、特定の Session_Idエラー レベルに基づいて、EventsTable1 および EventsTable2 内の特定のレコードが検索されます。 次に、EventTextVersionEventNameの 3 つの特定の列を射影し、残りの列をすべて動的オブジェクトにパックします。

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"}

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

このクエリでは、バージョン 'v1.0.0' または EventName を 'Event1' として レコードを検索し、フィルター処理された結果から Session_IdEventTextバージョンEventName の 4 つの特定の列を投影 (選択) します。

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

Note

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

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

このクエリは、"acbd207d-51aa-4df7-bfa7-be70eb68f04e" と一致する Session_Id を持つレコードをデータベースで検索します。 この特定の Session_Idを含むすべてのテーブルと列からレコードを取得します。

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"}

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

このクエリは、指定した Session_Id を持つレコードをデータベースで検索し、それらのレコードのすべての列を 1 つの動的オブジェクトとして返します。

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 として機能する場合の例

Kusto の find 演算子は、主に複数のテーブルを検索するために使用される場合に、union 演算子のように動作する場合があります。

検索オペランドとして表形式以外の式を使用する

最初に、エラー レベルのレコードのみを含むように EventsTable1 フィルター処理するビューが作成されます。 次に、このフィルター処理されたビューと EventsTable2 テーブル内で、特定の Session_Idを持つレコードを検索します。

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)