尋找運算子
尋找符合一組數據表之述詞的數據列。
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)
]where
Predicate [project-smart
|project
ColumnName[:
ColumnType,
... ][,
pack_all()
]]find
述詞 [ ColumnName[project-smart
|project
:
ColumnType,
... ] [,
pack_all()
]]
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
ColumnName | string |
根據預設,輸出會包含名為 source_ 的數據行,其值會指出哪個源數據表貢獻給每個數據列。 如果指定,則會使用 ColumnName,而不是使用 source_。 在通配符比對之後,如果查詢參考來自多個資料庫的數據表,包括預設資料庫,則此數據行的值具有與資料庫限定的數據表名稱。 同樣地,如果參考多個叢集,叢集 和 資料庫 限定性會出現在值中。 | |
謂語 | bool |
✔️ | 此布爾表達式會針對每個輸入數據表中的每個數據列進行評估。 如需詳細資訊,請參閱 述詞語法詳細數據。 |
表格 | string |
零個或多個逗號分隔數據表參考。 根據預設,find 在目前資料庫中的所有數據表中尋找。 您可以使用:1.數據表的名稱,例如 Events 2. 查詢表示式,例如 (Events | where id==42) 3.使用通配符指定的一組數據表。 例如, E* 會形成資料庫中所有名稱開頭 E 為 之數據表的聯集。 |
|
project-smart 或 project |
string |
如果未指定,預設會使用 project-smart 。 如需詳細資訊,請參閱 輸出架構詳細數據。 |
withsource=
ColumnName:選擇性。 根據預設,輸出會包含名為 source_ 的數據行,其值會指出哪個源數據表貢獻了每個數據列。 如果指定,則會使用 ColumnName,而不是使用 source_。述詞:
boolean
輸入數據表 [,
, ...] 資料行的表達式。它會針對每個輸入數據表中的每個數據列進行評估。 如需詳細資訊,請參閱 述詞語法詳細數據。數據表:選擇性。 零個或多個逗號分隔數據表參考。 根據預設,尋找 搜尋所有數據表:
- 數據表的名稱,例如
Events
- 查詢表達式,例如
(Events | where id==42)
- 以通配符指定的一組數據表。 例如,
E*
會形成名稱開頭E
為 的所有數據表聯集。
- 數據表的名稱,例如
project-smart
|project
:如果未指定project-smart
預設使用。 如需詳細資訊,請參閱 輸出架構詳細數據。
傳回
Table [,
, ...] 中的數據列轉換,其中述詞為 true
。 數據列會根據 輸出架構進行轉換。
輸出結構描述
source_數據行
find
運算子輸出一律包含源數據表名稱 source_ 數據行。 您可以使用 參數來重新 withsource
命名資料行。
results 數據行
篩選掉不包含述詞評估使用之任何數據行的源數據表。
當您使用 project-smart
時,輸出中顯示的數據列如下:
- 明確出現在述詞中的數據行。
- 所有篩選數據表通用的數據行。
其餘的數據行會封裝在屬性包中,並出現在額外的 pack
數據行中。
述詞明確參考的數據行,並出現在具有多個類型的多個數據表中,每個這類類型的結果架構中都有不同的數據行。 每個數據行名稱都是從原始數據行名稱和類型建構,並以底線分隔。
使用 project
ColumnName[ :
ColumnType,
... ] [,
pack_all()
]:
- 結果數據表包含清單中指定的數據行。 如果源數據表未包含特定數據行,對應數據列中的值會是 Null。
- 當您使用 ColumnName指定 ColumnType 時,“result” 中的這個數據行具有指定的類型,而且值會視需要轉換成該類型。 評估 述詞時,轉換對數據行類型沒有影響。
- 使用
pack_all()
時,所有數據行,包括投影的數據行,都會封裝到屬性包中,並預設會顯示在額外的數據行 'column1'。 在屬性包中,源數據行名稱會做為屬性名稱,而數據行的值則做為屬性值。
述詞語法
find
運算符支援 * has
字詞的替代語法,而且只要使用 字詞,即可搜尋所有輸入數據行的字詞。
如需某些篩選函式的摘要,請參閱 where 運算符。
考慮
-
project
如果 子句參考出現在多個數據表中的數據行,而且有多個類型,則類型必須遵循專案子句中的這個數據行參考 - 如果數據行出現在多個數據表中,且有多個類型和
project-smart
正在使用中,則find
結果中的每個類型都有對應的數據行,如 等位 - 當您使用 項目智慧型手機時,述詞、源數據表集或數據表架構中的變更可能會導致輸出架構變更。 如果需要常數結果架構,請改用專案
-
find
scope 不能包含 函式。 若要在find
範圍中包含函式,請使用 view 關鍵詞定義 let 語句。
效能祕訣
- 使用 數據表 , 而不是表格式表達式。
如果表格式表達式,find 運算子會回復為
union
可能導致效能降低的查詢。 - 如果出現在多個資料表且具有多個類型的數據行是專案子句的一部分,則偏好將 ColumnType 加入至專案子句,而不是先修改資料表,再將它傳遞至
find
。 - 將以時間為基礎的篩選新增至述詞。 使用 datetime 資料行值或 ingestion_time()。
- 在特定數據行中搜尋,而不是全文搜索。
- 最好不要參考出現在多個數據表且有多個類型的數據行。 如果解析多個類型的這類數據行類型時,述詞有效,則查詢會回復為等位。
例如,請參閱 範例,其中
find
做為等位。
範例
本文中的範例會使用 說明叢集中公開可用的數據表,例如 Samples 資料庫中的
StormEvents
數據表。
本文中的範例會使用公開可用的數據表,例如天氣分析中的
StormEvents
數據表,範例數據。
所有數據表的字詞查閱
查詢會從目前資料庫中的所有數據表中尋找所有數據列,其中任何數據行都包含 這個字 Hernandez
。 產生的記錄會根據 輸出架構進行轉換。 輸出包含數據表 Customers
的數據列和 SalesTable
資料庫的數據表 ContosoSales
。
find "Hernandez"
輸出
下表顯示輸出的前三個數據列。
源_ | 包_ |
---|---|
客戶 | {“CityName”:“Ballard”,“CompanyName”:“NULL”,“ContinentName”:“North America”,“CustomerKey”:5023,“Education”:“Partial High School”,“FirstName”:“Devin”,“Gender”:“M”,“LastName”:“Hernandez”,“MaritalStatus”:“S”,“職業”:“Clerical”,“RegionCountryName”:“美國”,“StateProvinceName”:“Washington”} |
客戶 | {“CityName”:“Ballard”,“CompanyName”:“NULL”,“ContinentName”:“North America”,“CustomerKey”:7814,“Education”:“Partial College”,“FirstName”:“Kristy”,“Gender”:“F”,“LastName”:“Hernandez”,“MaritalStatus”:“S”,“職業”:“Professional”,“RegionCountryName”:“美國”,“StateProvinceName”:“Washington”} |
客戶 | {“CityName”:“Ballard”,“CompanyName”:“NULL”,“ContinentName”:“North America”,“CustomerKey”:7888,“Education”:“Partial High School”,“FirstName”:“Kari”,“Gender”:“F”,“LastName”:“Hernandez”,“MaritalStatus”:“S”,“職業”:“Clerical”,“RegionCountryName”:“美國”,“StateProvinceName”:“Washington”} |
... | ... |
所有符合名稱模式之數據表的詞彙查閱
此查詢會從名稱開頭 C
為 的目前資料庫中所有數據表中尋找所有數據列,而其中任何數據行都包含 這個字 Hernandez
。 產生的記錄會根據 輸出架構進行轉換。 現在,輸出只會包含數據表中的 Customers
記錄。
find in (C*) where * has "Hernandez"
輸出
下表顯示輸出的前三個數據列。
源_ | 包_ |
---|---|
ConferenceSessions | {“conference”:“Build 2021”,“sessionid”:“CON-PRT103”,“session_title”:“Roundtable: Advanced Kusto 查詢語言主題”,“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.0000000Z“,”duration“:60,”time_and_duration“:”Wednesday, 5 月 26 日\n上午 8:30 - 格林尼治標準時間上午 9:30“,”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 查詢語言主題”,“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.0000000Z“,”duration“:60,”time_and_duration“:”Wednesday, 5 月 26 日\n上午 8:30 - 格林尼治標準時間上午 9:30“,”kusto_affinity“:”Focused“} |
... | ... |
整個叢集的詞彙查閱
此查詢會從叢集中所有資料庫中的所有資料表中尋找所有資料列,其中任何資料列都包含單字 Kusto
。
此查詢是 跨資料庫 查詢。
產生的記錄會根據 輸出架構進行轉換。
find in (database('*').*) where * has "Kusto"
輸出
下表顯示輸出的前三個數據列。
源_ | 包_ |
---|---|
database(“Samples”)。ConferenceSessions | {“conference”:“Build 2021”,“sessionid”:“CON-PRT103”,“session_title”:“Roundtable: Advanced Kusto 查詢語言主題”,“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.0000000Z“,”duration“:60,”time_and_duration“:”Wednesday, 5 月 26 日\n上午 8:30 - 格林尼治標準時間上午 9:30“,”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 查詢語言主題”,“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.0000000Z“,”duration“:60,”time_and_duration“:”Wednesday, 5 月 26 日\n上午 8:30 - 格林尼治標準時間上午 9:30“,”kusto_affinity“:”Focused“} |
... | ... |
符合叢集中名稱模式的詞彙查閱
此查詢會從名稱開頭 K
的所有資料庫中,尋找所有數據表的所有數據列,其名稱開頭 B
為 ,且其中任何數據行都包含這個字 Kusto
。
產生的記錄會根據 輸出架構進行轉換。
find in (database("S*").C*) where * has "Kusto"
輸出
下表顯示輸出的前三個數據列。
源_ | 包_ |
---|---|
ConferenceSessions | {“conference”:“Build 2021”,“sessionid”:“CON-PRT103”,“session_title”:“Roundtable: Advanced Kusto 查詢語言主題”,“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.0000000Z“,”duration“:60,”time_and_duration“:”Wednesday, 5 月 26 日\n上午 8:30 - 格林尼治標準時間上午 9:30“,”kusto_affinity“:”Focused“} |
ConferenceSessions | {“conference”:“Build 2021”,“sessionid”:“CON-PRT103”,“session_title”:“Roundtable: Advanced Kusto 查詢語言主題”,“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.0000000Z“,”duration“:60,”time_and_duration“:”Wednesday, 5 月 26 日\n上午 8:30 - 格林尼治標準時間上午 9:30“,”kusto_affinity“:”Focused“} |
ConferenceSessions | {“conference”:“Build 2021”,“sessionid”:“CON-PRT103”,“session_title”:“Roundtable: Advanced Kusto 查詢語言主題”,“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.0000000Z“,”duration“:60,”time_and_duration“:”Wednesday, 5 月 26 日\n上午 8:30 - 格林尼治標準時間上午 9:30“,”kusto_affinity“:”Focused“} |
... | ... |
數個叢集中的詞彙查閱
此查詢會從名稱開頭 K
的所有資料庫中,尋找所有數據表的所有數據列,其名稱開頭 B
為 ,且其中任何數據行都包含這個字 Kusto
。
產生的記錄會根據 輸出架構進行轉換。
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
輸出結果的 find
範例
下列範例示範如何使用 find
兩個數據表: EventsTable1 和 EventsTable2。
假設我們有這兩個數據表的下一個內容:
EventsTable1
Session_Id | 層級 | EventText | 版本 |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | 資訊 | 部分文字1 | v1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | 錯誤 | 部分文字2 | v1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | 錯誤 | 部分文字3 | v1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | 資訊 | 部分文字4 | v1.1.0 |
EventsTable2
Session_Id | 層級 | EventText | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | 資訊 | 其他文字1 | Event1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | 資訊 | 其他文字2 | Event2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | 錯誤 | 其他文字3 | Event3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | 錯誤 | 其他文字4 | Event4 |
搜尋一般數據行、專案通用和不常見數據行,並包裝其餘數據行
查詢會根據指定的 Session_Id 和 錯誤 層級,搜尋 EventsTable1 和 EventsTable2 中的特定記錄。 然後它會投影三個特定數據行:EventText、Version和 EventName,並將所有其他剩餘的數據行封裝成動態物件。
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
輸出
源_ | EventText | 版本 | EventName | 包_ |
---|---|---|---|---|
EventsTable1 | 部分文字2 | v1.0.0 | {“Session_Id”:“acbd207d-51aa-4df7-bfa7-be70eb68f04e”, “Level”:“Error”} | |
EventsTable2 | 其他文字3 | Event3 | {“Session_Id”:“acbd207d-51aa-4df7-bfa7-be70eb68f04e”, “Level”:“Error”} |
在一般和不常見數據行中搜尋
查詢會搜尋 Version 為 'v1.0.0' 或 EventName 為 'Event1' 的記錄,然後會投影四個特定數據行:Session_Id、EventText、Version,以及從篩選結果 EventName。
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
輸出
源_ | Session_Id | EventText | 版本 | EventName |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | 部分文字1 | v1.0.0 | |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | 部分文字2 | v1.0.0 | |
EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | 其他文字1 | 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 | 層級 | EventText | 包_ |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | 資訊 | 部分文字1 | {“Version”:“v1.0.0”} |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | 錯誤 | 部分文字2 | {“Version”:“v1.0.0”} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | 資訊 | 其他文字2 | {“EventName”:“Event2”} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | 錯誤 | 其他文字3 | {“EventName”:“Event3”} |
以屬性包的形式傳回每個數據列的結果
此查詢會以指定的 Session_Id 搜尋資料庫是否有記錄,並將這些記錄的所有數據行當做單一動態物件傳回。
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
作為 union
的案例範例
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'
參考出現在多個數據表中的數據行,並具有多個類型
在此範例中,執行 來建立兩個數據表:
.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、timestamp、ProcessId_string、ProcessId_int)。
- 下列查詢會以
union
執行,但會產生不同的結果架構。
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
輸出結果架構是 (Level:string、Timestamp、ProcessId_string)