find 演算子
適用対象: ✅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"
Note
find
演算子は、列固有のテキスト フィルター処理よりも実質的に効率が低くなります。 列がわかっている場合は常に、 where 演算子を使用することをお勧めします。 find
は、ワークスペースに多数のテーブルと列が含まれており、スキャン対象のデータ ボリュームが高く、クエリの時間範囲が長い場合は、うまく機能しません。
構文
find
[withsource
= ColumnName] [in
(
Tables)
]where
Predicate [project-smart
|project
ColumnName[:
ColumnType,
... ][,
pack_all()
]]find
Predicate [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 Predicate がtrue
されている [,
Table, ...] 内の行の変換。 行は、出力スキーマに従って変換されます。
出力スキーマ
source_ 列
find 演算子の出力には、ソース テーブル名を含む source_ 列が常に含まれます。 列の名前は、withsource
パラメーターを使用して変更できます。
結果列
述語の評価で使用される列を含まないソース テーブルは、フィルターで除外されます。
project-smart
を使用すると、出力に表示される列は次のようになります。
- 述語で明示的に示されている列。
- すべてのフィルター処理されたテーブルに共通の列。
残りの列はプロパティ バッグにパックされ、追加の pack
列に表示されます。
述語によって明示的に参照され、複数の型がある複数のテーブルに表示される列の場合、そのような型ごとに結果スキーマに異なる列が示されます。 各列名は、アンダースコアで区切られた元の列名と型で構成されます。
project
ColumnName[:
ColumnType ,
... ] [,
pack_all()
]:
- 結果テーブルには、リストに指定された列が含まれます。 ソース テーブルに特定の列が含まれていない場合、対応する行の値は null になります。
- ColumnName で ColumnType を指定すると、"結果" のこの列の型は指定されたものとなり、必要に応じてその型に値がキャストされます。 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
出力結果の例
次の例は、EventsTable1 と EventsTable2 の 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"} |
find
が union
として機能する場合の例
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) になります