Dela via


sökoperator

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Hittar rader som matchar ett predikat i en uppsättning tabeller.

Omfånget för find-operatorn kan också vara korsdatabas 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"

Not

find operatorn är betydligt mindre effektiv än kolumnspecifik textfiltrering. När kolumnerna är kända rekommenderar vi att du använder där operatorn. 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(Tables)] wherePredicate [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

  • find Predikat [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs Beskrivning
ColumnName string Som standard innehåller utdata en kolumn med namnet source_ vars värden anger vilken källtabell som bidrog till varje rad. Om det anges används ColumnName i stället för source_. Om frågan refererar till tabeller från fler än en databas, inklusive standarddatabasen, har värdet för den här kolumnen ett tabellnamn som är kvalificerat för databasen efter jokerteckenmatchning. På samma sätt finns kluster och databas kvalifikationer 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 letar find i 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. Till exempel skulle E* bilda en union av alla tabeller i databasen vars namn börjar med E.
project-smart eller project string Om det inte anges används project-smart som standard. Mer information finns i information om utdataschemat.
  • 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 det anges används ColumnName i stället för source_.

  • Predikat: Ett booleanuttryck över kolumnerna i indatatabellerna Tabell [,Table, ...]. 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 hitta söker 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 har angetts med jokertecken. Till exempel skulle E* bilda en union av alla tabeller vars namn börjar med E.
  • project-smart | project: Om det inte anges används project-smart som standard. Mer information finns i information om utdataschemat.

Returnerar

Transformering av rader i Table [,Table, ...] för vilka Predikat är true. Raderna transformeras enligt utdataschema.

Utdataschema

source_ kolumn

find-operatorns utdata innehåller alltid en source_ kolumn med källtabellens namn. Kolumnen kan byta namn med 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är kolumnerna som visas i utdata:

  • Kolumner som visas explicit i predikatet.
  • Kolumner som är gemensamma för alla filtrerade tabeller.

Resten av kolumnerna packas i en egenskapspåse och visas i en extra pack 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 konstrueras från det ursprungliga kolumnnamnet och typen, avgränsat med ett understreck.

När du använder projectColumnName[: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 i motsvarande rader null.
  • När du anger en ColumnType- med en ColumnName-har den här kolumnen i "resultatet" den angivna typen och värdena omvandlas till den typen om det behövs. Gjutningen påverkar inte kolumntypen vid utvärdering av Predikat.
  • När pack_all() används packas alla kolumner, inklusive de projicerade kolumnerna, i en egenskapspåse och visas i en extra kolumn, som standard kolumn1. I egenskapsuppsättningen fungerar källkolumnnamnet som egenskapsnamn och kolumnens värde fungerar som egenskapsvärde.

Predikatsyntax

Operatorn find stöder en alternativ syntax för * has-termen och använder bara term, genomsöker en term i alla indatakolumner.

En sammanfattning av vissa filtreringsfunktioner finns i där operatorn.

Överväganden

  • Om project-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, finns det en motsvarande kolumn för varje typ i findresultat, enligt beskrivningen i union
  • När du använder projektsmartkan ändringar i predikatet, i källtabelluppsättningen eller i tabellschemat resultera i en ändring av utdataschemat. Om ett konstant resultatschema behövs använder du projekt i stället
  • find omfång kan inte innehålla funktioner. Om du vill inkludera en funktion i find-omfånget definierar du en låt -instruktionen med visa nyckelordet.

Prestandatips

  • Använd tabeller i stället för tabelluttryck. Om tabelluttryck faller sökoperatorn tillbaka till 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- till 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 find fungerar som en union.

Exempel

Exemplen i den här artikeln använder offentligt tillgängliga tabeller i hjälpkluster, till exempel tabellen StormEvents i databasen Samples.

Exemplen i den här artikeln använder offentligt tillgängliga tabeller, till exempel tabellen StormEvents i Väderanalys exempeldata.

Termsökning i alla tabeller

Frågan hittar alla rader från alla tabeller i den aktuella databasen där en kolumn innehåller ordet Hernandez. De resulterande posterna transformeras enligt utdataschema. Utdata innehåller rader från tabellen Customers och tabellen SalesTable i ContosoSales-databasen.

find "Hernandez"

utdata

Den här tabellen visar de tre första raderna i utdata.

källa_ packa_
Kunder {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Nordamerika","CustomerKey":5023,"Utbildning":"Partiell gymnasieskola","Förnamn":"Devin","Kön":"M","Efternamn":"Hernandez","MaritalStatus":"S","Ockupation":"Prästerlig","RegionCountryName":"Usa","StateProvinceName":"Washington"}
Kunder {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Nordamerika","CustomerKey":7814,"Utbildning":"Partiell högskola","Förnamn":"Kristy","Kön":"F","Efternamn":"Hernandez","MaritalStatus":"S","Ockupation":"Professional","RegionCountryName":"Usa","StateProvinceName":"Washington"}
Kunder {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Nordamerika","CustomerKey":7888,"Utbildning":"Partiell gymnasieskola","Förnamn":"Kari","Kön":"F","Efternamn":"Hernandez","MaritalStatus":"S","Ockupation":"Prästerlig","RegionCountryName":"Usa","StateProvinceName":"Washington"}
... ...

Termsökning i alla tabeller som matchar ett namnmönster

Frågan hittar alla rader från alla tabeller i den aktuella databasen vars namn börjar med Coch i vilken kolumn som helst innehåller ordet Hernandez. De resulterande posterna transformeras enligt utdataschema. Nu innehåller utdata endast poster från tabellen Customers.

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

utdata

Den här tabellen visar de tre första raderna i utdata.

källa_ packa_
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","deltagare":"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":"Onsdag, 26 maj\n08:30-09:30 GMT","kusto_affinity":"Fokuserad"}
ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Djupdykning i Azure Kusto-frågespråket. ","session_type":"Teater","ägare":"Jean Francois Berenguer","deltagare":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","nivå":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","deltagare":"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":"Onsdag, 26 maj\n08:30-09:30 GMT","kusto_affinity":"Fokuserad"}
... ...

Termsökning i klustret

Frågan hittar alla rader från alla tabeller i alla databaser i klustret där valfri kolumn innehåller ordet Kusto. Den här frågan är en fråga mellan databaser. De resulterande posterna transformeras enligt utdataschema.

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

utdata

Den här tabellen visar de tre första raderna i utdata.

källa_ packa_
database("Samples"). ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","deltagare":"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":"Onsdag, 26 maj\n08:30-09:30 GMT","kusto_affinity":"Fokuserad"}
database("Samples"). ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Djupdykning i Azure Kusto-frågespråket. ","session_type":"Teater","ägare":"Jean Francois Berenguer","deltagare":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","nivå":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","deltagare":"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":"Onsdag, 26 maj\n08:30-09:30 GMT","kusto_affinity":"Fokuserad"}
... ...

Termsökning 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 där alla kolumner innehåller ordet Kusto. De resulterande posterna transformeras enligt utdataschema.

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

utdata

Den här tabellen visar de tre första raderna i utdata.

källa_ packa_
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","deltagare":"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":"Onsdag, 26 maj\n08:30-09:30 GMT","kusto_affinity":"Fokuserad"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","deltagare":"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":"Onsdag, 26 maj\n08:30-09:30 GMT","kusto_affinity":"Fokuserad"}
ConferenceSessions {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","deltagare":"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":"Onsdag, 26 maj\n08:30-09:30 GMT","kusto_affinity":"Fokuserad"}
... ...

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 där alla kolumner innehåller ordet Kusto. De resulterande posterna transformeras enligt utdataschema.

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 utdataschema.

find "Kusto"

Exempel på find utdataresultat

Följande exempel visar hur find kan användas i 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, projekt gemensamma och ovanliga kolumner och packa resten

Frågan söker efter specifika poster i EventsTable1 och EventsTable2 baserat på en viss Session_Id och en Fel nivå. Sedan projiceras tre specifika kolumner: EventText, Versionoch EventNameoch packar alla andra återstående kolumner i ett dynamiskt objekt.

find in (EventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error' 
     project EventText, Version, EventName, pack_all()

utdata

källa_ EventText Version EventName packa_
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

Frågan söker efter poster som antingen har Version som "v1.0.0" eller EventName som "Event1", och sedan projiceras (väljer) fyra specifika kolumner: Session_Id, EventText, Versionoch EventName från dessa filtrerade resultat.

find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName

utdata

källa_ 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

Not

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

Den här frågan söker i databasen efter poster med en Session_Id som matchar "acbd207d-51aa-4df7-bfa7-be70eb68f04e". Den hämtar poster från alla tabeller och kolumner som innehåller den här specifika Session_Id.

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

utdata

källa_ Session_Id Nivå EventText packa_
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Information Viss text1 {"Version":"v1.0.0"}
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Fel Viss text 2 {"Version":"v1.0.0"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Information Annan text 2 {"EventName":"Event2"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Fel Annan text 3 {"EventName":"Event3"}

Returnera resultatet från varje rad som en egenskapsuppsättning

Den här frågan söker i databasen efter poster med angiven Session_Id och returnerar alla kolumner i dessa poster som ett enda dynamiskt objekt.

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()

utdata

källa_ packa_
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 fungerar som union

Operatorn find i Kusto kan ibland fungera som en union-operator, främst när den används för att söka i flera tabeller.

Använda ett icke-tabelluttryck som hitta operand

Frågan skapar först en vy som filtrerar EventsTable1 för att endast inkludera poster på felnivå. Sedan söker den i den här filtrerade vyn och tabellen EventsTable2 efter poster med en specifik Session_Id.

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

I det här exemplet skapar du 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 är (Level:string, Timestamp, ProcessId_string, ProcessId_int).

  • Följande fråga körs som union, men skapar ett annat resultatschema.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

Utdataresultatschemat är (Level:string, Timestamp, ProcessId_string)