適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft 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"
注
find 演算子は、列固有のテキスト フィルター処理よりも実質的に効率が低くなります。 列がわかっている場合は常に、 where 演算子を使用することをお勧めします。 ワークスペースに多数のテーブルと列が含まれており、スキャン対象のデータ 量が多く、クエリの時間範囲が長い場合、find はうまく機能しません。
構文
find[withsource= ColumnName] [in(Tables)]wherePredicate [project-smart|projectColumnName[:ColumnType,... ][,pack_all()]]findPredicate [project-smart|projectColumnName[:ColumnType,... ][,pack_all()]]
構文規則について詳しく知る。
パラメーター
| 件名 | タイプ | 必須 | 説明 |
|---|---|---|---|
| [ColumnName] | string |
既定では、出力には source_ という名前の列が含まれ、その値は各行に関係するソース テーブルを示します。 指定した場合、source_の代わりに columnName 使用されます。 ワイルドカード照合の後、クエリが既定のデータベースを含む複数のデータベースのテーブルを参照する場合、この列の値にはデータベースで修飾されたテーブル名が含まれます。 同様に クラスター と データベース 修飾は、複数のクラスターが参照されている場合に値に存在します。 | |
| 述語 | bool |
✔️ | このブール式は、各入力テーブルの各行に対して評価されます。 詳細については、述語構文の詳細を参照してください。 |
| テーブル | string |
0 個以上のコンマ区切りテーブル参照。 既定では、find は現在のデータベース内のすべてのテーブルを検索します。 使用できるもの:1. テーブルの名前 (例: Events2. クエリ式 (例: (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 になります。
- ColumnNameで ColumnType を指定すると、"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が共用体 として機能するケースの例参照してください。
例
一般的な例
次の例では、現在のデータベース内のすべてのテーブルから、任意の列に Hernandez という単語が含まれるすべての行を検索します。 結果のレコードは、出力スキーマに従って変換されます。 出力には、Customers テーブルの行と、SalesTable データベースのContosoSales テーブルが含まれます。
find "Hernandez"
出力
次の表は、出力の最初の 3 行を示しています。
| 源_ | パック_ |
|---|---|
| 顧客 | {"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 行を示しています。
| 源_ | パック_ |
|---|---|
| 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 行を示しています。
| 源_ | パック_ |
|---|---|
| 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 行を示しています。
| 源_ | パック_ |
|---|---|
| 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 出力結果の例
これら 2 つのテーブルの内容が以下であると想定します。
EventsTable1
| Session_Id | レベル | イベントテキスト | バージョン |
|---|---|---|---|
| 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 | レベル | イベントテキスト | イベント名 |
|---|---|---|---|
| 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 の特定のレコードを検索します。 次に、EventText、Version、EventNameの 3 つの特定の列を射影し、残りの列をすべて動的オブジェクトにパックします。
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
出力
| 源_ | イベントテキスト | バージョン | イベント名 | パック_ |
|---|---|---|---|---|
| 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_Id、 EventText、 Version、 EventName の 4 つの特定の列をプロジェクト (選択) します。
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
出力
| 源_ | Session_Id | イベントテキスト | バージョン | イベント名 |
|---|---|---|---|---|
| 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' 述語でフィルター処理されます。
次の例では、"acbd207d-51aa-4df7-bfa7-be70eb68f04e" と一致する Session_Id を持つレコードをデータベースで検索します。 この特定の Session_Idを含むすべてのテーブルと列からレコードを取得します。
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
出力
| 源_ | Session_Id | レベル | イベントテキスト | パック_ |
|---|---|---|---|---|
| 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()
出力
| 源_ | パック_ |
|---|---|
| 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"} |
findが共用体として機能する場合の例
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'
次の例では、異なる型の複数のテーブルに列が表示される場合に、 find 演算子を union として機能させる方法を示します。 この場合、 ProcessId 列は Table1 と Table2 の両方に存在しますが、型は異なります。
この例では、次を実行して 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)