find-operatorn
Söker efter rader som matchar ett predikat i en uppsättning tabeller.
Omfånget för find
kan också vara korsdatabaser eller korskluster.
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"
Anteckning
find
operatorn är betydligt mindre effektiv än kolumnspecifik textfiltrering. När kolumnerna är kända rekommenderar vi att du använder operatorn where. find
fungerar inte bra när arbetsytan innehåller ett stort antal tabeller och kolumner och datavolymen som genomsöks är hög och tidsintervallet för frågan är högt.
Syntax
find
[withsource
= ColumnName] [in
(
Tabeller)
]where
Predikat [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
Predikat [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Obligatorisk | Beskrivning |
---|---|---|---|
Columnname | string |
Som standard innehåller utdata en kolumn med namnet source_ vars värden anger vilken källtabell som har bidragit med varje rad. Om detta anges används ColumnName i stället för source_. Om frågan refererar till tabeller från fler än en databas, inklusive standarddatabasen, efter jokerteckenmatchning har värdet för den här kolumnen ett tabellnamn som är kvalificerat med databasen. På samma sätt finns kluster- och databaskvalifikationer i värdet om fler än ett kluster refereras till. | |
Predikat | bool |
✔️ | Det här booleska uttrycket utvärderas för varje rad i varje indatatabell. Mer information finns i information om predikatsyntax. |
Tabeller | string |
Noll eller fler kommaavgränsade tabellreferenser. Som standard find visas alla tabeller i den aktuella databasen. Du kan använda:1. Namnet på en tabell, till exempel Events 2. Ett frågeuttryck, till exempel (Events | where id==42) 3. En uppsättning tabeller som anges med jokertecken. Skulle till exempel E* bilda en union av alla tabeller i databasen vars namn börjar med E . |
|
project-smart eller project |
string |
Om inget anges project-smart används som standard. Mer information finns i information om output-schema. |
withsource=
ColumnName: Valfritt. Som standard innehåller utdata en kolumn med namnet source_ vars värden anger vilken källtabell som bidrog med varje rad. Om detta anges används ColumnName i stället för source_.Predikat: Ett
boolean
uttryck över kolumnerna i indatatabellerna Tabell [,
Tabell, ...]. Den utvärderas för varje rad i varje indatatabell. Mer information finns i information om predikatsyntax.Tabeller: Valfritt. Noll eller fler kommaavgränsade tabellreferenser. Som standard söker find i alla tabeller efter:
- Namnet på en tabell, till exempel
Events
- Ett frågeuttryck, till exempel
(Events | where id==42)
- En uppsättning tabeller som anges med jokertecken. Skulle till exempel
E*
bilda en union av alla tabeller vars namn börjar medE
.
- Namnet på en tabell, till exempel
project-smart
|project
: Om inget angesproject-smart
används som standard. Mer information finns i information om output-schema.
Returer
Transformering av rader i tabell [,
Tabell, ...] för vilka Predikat är true
. Raderna transformeras enligt utdataschemat.
Utdataschema
source_ kolumn
Sökoperatorns utdata innehåller alltid en source_ kolumn med källtabellens namn. Kolumnen kan byta namn med hjälp av parametern withsource
.
resultatkolumner
Källtabeller som inte innehåller någon kolumn som används av predikatutvärderingen filtreras bort.
När du använder project-smart
blir kolumnerna som visas i utdata:
- Kolumner som uttryckligen visas i predikatet.
- Kolumner som är gemensamma för alla filtrerade tabeller.
Resten av kolumnerna packas i en egenskapsuppsättning och visas i ytterligare pack
en kolumn.
En kolumn som uttryckligen refereras till av predikatet och som visas i flera tabeller med flera typer, har en annan kolumn i resultatschemat för varje sådan typ. Vart och ett av kolumnnamnen skapas från det ursprungliga kolumnnamnet och typen, avgränsade med ett understreck.
När du använder project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]:
- Resultattabellen innehåller de kolumner som anges i listan. Om en källtabell inte innehåller en viss kolumn är värdena på motsvarande rader null.
- När du anger en ColumnType med ett ColumnName kommer den här kolumnen i "result" att ha den angivna typen och värdena kommer att omvandlas till den typen om det behövs. Omvandlingen påverkar inte kolumntypen vid utvärdering av predikatet.
- När
pack_all()
används packas alla kolumner, inklusive de projicerade kolumnerna, i en egenskapsuppsättning och visas i ytterligare en kolumn, som standard kolumn1. I egenskapsuppsättningen fungerar källkolumnnamnet som egenskapsnamn och kolumnens värde fungerar som egenskapsvärde.
Predikatsyntax
Find-operatorn stöder en alternativ syntax för * has
termen, och med bara term söker en term i alla indatakolumner.
En sammanfattning av vissa filtreringsfunktioner finns i var operatorn finns.
Kommentarer
project
Om satsen refererar till en kolumn som visas i flera tabeller och har flera typer, måste en typ följa den här kolumnreferensen i projektsatsen- Om en kolumn visas i flera tabeller och har flera typer och
project-smart
används, kommer det att finnas en motsvarande kolumn för varje typ i resultatet, enligt beskrivningenfind
i union - När du använder projektsmart kan ändringar i predikatet, i källtabelluppsättningen eller i tabellschemat resultera i en ändring av utdataschemat. Om du behöver ett konstant resultatschema använder du projektet i stället
find
omfånget kan inte innehålla funktioner. Om du vill inkludera en funktion i sökomfånget definierar du en let-instruktion med visa nyckelord.
Prestandatips
- Använd tabeller i stället för tabelluttryck.
Om tabelluttrycket returnerar find-operatorn en
union
fråga som kan resultera i försämrad prestanda. - Om en kolumn som visas i flera tabeller och har flera typer, är en del av projektsatsen, föredrar du att lägga till en ColumnType i projektsatsen framför att ändra tabellen innan den skickas till
find
. - Lägg till tidsbaserade filter i predikatet. Använd ett datetime-kolumnvärde eller ingestion_time().
- Sök i specifika kolumner i stället för en fulltextsökning.
- Det är bättre att inte referera till kolumner som visas i flera tabeller och har flera typer. Om predikatet är giltigt när du löser typen av sådana kolumner för mer än en typ återgår frågan till union. Se till exempel exempel på fall där fynd fungerar som en union.
Exempel
Termsökning i alla tabeller i den aktuella databasen
Frågan hittar alla rader från alla tabeller i den aktuella databasen där valfri kolumn innehåller ordet Hernandez
. De resulterande posterna transformeras enligt utdataschemat. Utdata innehåller rader från Customers
tabellen och SalesTable
tabellen i ContosoSales
databasen.
find "Hernandez"
Termsökning i alla tabeller som matchar ett namnmönster i den aktuella databasen
Frågan hittar alla rader från alla tabeller i den aktuella databasen vars namn börjar med C
och i vilken kolumn som helst innehåller ordet Hernandez
. De resulterande posterna transformeras enligt utdataschemat. Nu innehåller utdata bara poster från Customers
tabellen.
find in (C*) where * has "Hernandez"
Termsökning i alla tabeller i alla databaser i klustret
Frågan hittar alla rader från alla tabeller i alla databaser där en kolumn innehåller ordet Kusto
.
Den här frågan är en fråga mellan databaser .
De resulterande posterna transformeras enligt utdataschemat.
find in (database('*').*) where * has "Kusto"
Termsökning i alla tabeller och databaser som matchar ett namnmönster i klustret
Frågan hittar alla rader från alla tabeller vars namn börjar med K
i alla databaser vars namn börjar med B
och i vilka kolumner som helst innehåller ordet Kusto
.
De resulterande posterna transformeras enligt utdataschemat.
find in (database("S*").C*) where * has "Kusto"
Termsökning i flera kluster
Frågan hittar alla rader från alla tabeller vars namn börjar med K
i alla databaser vars namn börjar med B
och i vilka kolumner som helst innehåller ordet Kusto
.
De resulterande posterna transformeras enligt utdataschemat.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
Termsökning i alla tabeller
Frågan hittar alla rader från alla tabeller där en kolumn innehåller ordet Kusto
.
De resulterande posterna transformeras enligt utdataschemat.
find "Kusto"
Exempel på find
utdataresultat
Följande exempel visar hur find
du kan användas över två tabeller: EventsTable1 och EventsTable2.
Anta att vi har nästa innehåll i dessa två tabeller:
EventsTable1
Session_Id | Nivå | EventText | Version |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Information | Viss text1 | v1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Fel | Viss text 2 | v1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | Fel | Viss text 3 | v1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | Information | Viss text 4 | v1.1.0 |
EventsTable2
Session_Id | Nivå | EventText | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Information | Viss annan text1 | Händelse 1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Information | Annan text 2 | Händelse 2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Fel | Annan text 3 | Händelse 3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Fel | Annan text 4 | Händelse 4 |
Sök i vanliga kolumner, projicera vanliga och ovanliga kolumner och packa resten
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Resultat
Källkod_ | EventText | Version | EventName | Pack_ |
---|---|---|---|---|
EventsTable1 | Viss text 2 | v1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
EventsTable2 | Annan text 3 | Händelse 3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
Sök i vanliga och ovanliga kolumner
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Resultat
Källkod_ | Session_Id | EventText | Version | EventName |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Viss text1 | v1.0.0 | |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Viss text 2 | v1.0.0 | |
EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Viss annan text1 | Händelse 1 |
Obs! I praktiken filtreras EventsTable1-rader med Version == 'v1.0.0'
predikat och EventsTable2-rader filtreras med EventName == 'Event1'
predikat.
Använd förkortad notation för att söka i alla tabeller i den aktuella databasen
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Resultat
Källkod_ | Session_Id | Nivå | EventText | Pack_ |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Information | Viss text1 | {"Version":"v1.0.0"} |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Fel | Viss text2 | {"Version":"v1.0.0"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Information | Viss annan text2 | {"EventName":"Event2"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Fel | Annan text 3 | {"EventName":"Event3"} |
Returnera resultaten från varje rad som en egenskapsuppsättning
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Resultat
Källkod_ | 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"} |
Exempel på fall där find
kommer att fungera som union
Använda ett icke-tabelluttryck som sökoperand
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Referera till en kolumn som visas i flera tabeller och har flera typer
Anta att vi har skapat två tabeller genom att köra:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- Följande fråga körs som
union
.
find in (Table1, Table2) where ProcessId == 1001
Utdataresultatschemat blir (Level:string, Timestamp, ProcessId_string, ProcessId_int).
- Följande fråga körs också som
union
, men genererar ett annat resultatschema.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Utdataresultatschemat blir (Level:string, Timestamp, ProcessId_string)
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för