Delen via


operator zoeken

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel-

Hiermee vindt u rijen die overeenkomen met een predicaat in een set tabellen.

Het bereik van de operator find kan ook meerdere databases of clusters zijn.

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"

Notitie

find operator is aanzienlijk minder efficiënt dan het filteren van kolomspecifieke tekst. Wanneer de kolommen bekend zijn, raden we u aan de te gebruiken waar de operator. find werkt niet goed wanneer de werkruimte een groot aantal tabellen en kolommen bevat en het gegevensvolume dat wordt gescand hoog is en het tijdsbereik van de query hoog is.

Syntaxis

  • find [withsource= ColumnName] [in(Tables)] wherePrediccate [project-smart | projectColumnName[:ColumnType, ... ] ] [,pack_all()]]

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

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
ColumnName- string De uitvoer bevat standaard een kolom met de naam source_ waarvan de waarden aangeven welke brontabel aan elke rij heeft bijgedragen. Indien opgegeven, wordt ColumnName gebruikt in plaats van source_. Als de query naar tabellen uit meer dan één database verwijst, inclusief de standaarddatabase, heeft de waarde van deze kolom een tabelnaam die is gekwalificeerd met de database. Op dezelfde manier cluster en database kwalificaties aanwezig zijn in de waarde als er naar meer dan één cluster wordt verwezen.
predicaat bool ✔️ Deze Boole-expressie wordt geëvalueerd voor elke rij in elke invoertabel. Zie predicaatsyntaxisdetailsvoor meer informatie.
tabellen string Nul of meer door komma's gescheiden tabelverwijzingen. Standaard ziet find in alle tabellen in de huidige database. U kunt het volgende gebruiken:
1. De naam van een tabel, zoals Events
2. Een query-expressie, zoals (Events | where id==42)
3. Een set tabellen die zijn opgegeven met een jokerteken. E* zou bijvoorbeeld de samenvoeging vormen van alle tabellen in de database waarvan de namen beginnen met E.
project-smart of project string Als dit niet is opgegeven, wordt project-smart standaard gebruikt. Zie details van het uitvoerschemavoor meer informatie.
  • withsource= ColumnName: Optioneel. De uitvoer bevat standaard een kolom met de naam source_ waarvan de waarden aangeven welke brontabel elke rij heeft bijgedragen. Indien opgegeven, wordt ColumnName gebruikt in plaats van source_.

  • predicaat predicaat: een booleanexpressie boven de kolommen van de invoertabellen Tabel [,Tabel, ...]. Deze wordt geëvalueerd voor elke rij in elke invoertabel. Zie predicaatsyntaxisdetailsvoor meer informatie.

  • tabellen: optioneel. Nul of meer door komma's gescheiden tabelverwijzingen. Standaard zoekt in alle tabellen naar:

    • De naam van een tabel, zoals Events
    • Een query-expressie, zoals (Events | where id==42)
    • Een set tabellen die zijn opgegeven met een jokerteken. E* zou bijvoorbeeld de samenvoeging vormen van alle tabellen waarvan de namen beginnen met E.
  • project-smart | project: als project-smart niet is opgegeven, wordt standaard gebruikt. Zie details van het uitvoerschemavoor meer informatie.

Retourneert

Transformatie van rijen in Tabel [,Tabel, ...] waarvoor predicaat is true. De rijen worden getransformeerd volgens het uitvoerschema.

Uitvoerschema

source_ kolom

De uitvoer van de find-operator bevat altijd een source_ kolom met de naam van de brontabel. De naam van de kolom kan worden gewijzigd met behulp van de parameter withsource.

kolommen met resultaten

Brontabellen die geen kolom bevatten die door de predicaatsevaluatie worden gebruikt, worden uitgefilterd.

Wanneer u project-smartgebruikt, zijn de kolommen die in de uitvoer worden weergegeven:

  • Kolommen die expliciet worden weergegeven in het predicaat.
  • Kolommen die gebruikelijk zijn voor alle gefilterde tabellen.

De rest van de kolommen wordt verpakt in een eigenschappentas en wordt weergegeven in een extra pack kolom. Een kolom waarnaar expliciet wordt verwezen door het predicaat en wordt weergegeven in meerdere tabellen met meerdere typen, heeft een andere kolom in het resultaatschema voor elk dergelijk type. Elk van de kolomnamen wordt samengesteld op basis van de oorspronkelijke kolomnaam en het type, gescheiden door een onderstrepingsteken.

Wanneer u projectColumnName[:ColumnType, ... ] [,pack_all()]:

  • De resultatentabel bevat de kolommen die zijn opgegeven in de lijst. Als een brontabel geen bepaalde kolom bevat, zijn de waarden in de bijbehorende rijen null.
  • Wanneer u een ColumnType- met een ColumnName-opgeeft, heeft deze kolom in het resultaat het opgegeven type en worden de waarden indien nodig naar dat type geconverteerd. Het casten heeft geen effect op het kolomtype bij het evalueren van het predicaat predicaat.
  • Wanneer pack_all() wordt gebruikt, worden alle kolommen, inclusief de geprojecteerde kolommen, in een eigenschappentas verpakt en weergegeven in een extra kolom, standaard 'kolom1'. In de eigenschapsverzameling fungeert de naam van de bronkolom als de naam van de eigenschap en fungeert de waarde van de kolom als de eigenschapswaarde.

Predicaatsyntaxis

De operator find ondersteunt een alternatieve syntaxis voor de * has term en zoekt met behulp van termeen term in alle invoerkolommen.

Zie waar operatorvoor een samenvatting van sommige filterfuncties.

Overwegingen

  • Als de project component verwijst naar een kolom die in meerdere tabellen wordt weergegeven en meerdere typen heeft, moet een type deze kolomverwijzing in de projectcomponent volgen
  • Als een kolom in meerdere tabellen wordt weergegeven en meerdere typen heeft en project-smart wordt gebruikt, is er een overeenkomende kolom voor elk type in het resultaat van de find, zoals beschreven in samenvoegings-
  • Wanneer u project smartgebruikt, kunnen wijzigingen in het predicaat, in de set brontabellen of in het tabellenschema leiden tot een wijziging in het uitvoerschema. Als er een constant resultaatschema nodig is, gebruikt u in plaats daarvan project
  • find bereik kan geen functiesbevatten. Als u een functie wilt opnemen in het find bereik, definieert u een let-instructie met trefwoordweergave.

Tips voor prestaties

  • Gebruik tabellen in plaats van tabellaire expressies. Als een tabellaire expressie wordt weergegeven, valt de zoekoperator terug op een union query die kan leiden tot verminderde prestaties.
  • Als een kolom die in meerdere tabellen wordt weergegeven en meerdere typen heeft, deel uitmaakt van de projectcomponent, geeft u de voorkeur aan het toevoegen van een ColumnType- aan de projectcomponent over het wijzigen van de tabel voordat u deze doorgeeft aan find.
  • Voeg tijdfilters toe aan het predicaat. Gebruik een datum/tijd-kolomwaarde of ingestion_time().
  • Zoeken in specifieke kolommen in plaats van een zoekopdracht in volledige tekst.
  • Het is beter om niet te verwijzen naar kolommen die in meerdere tabellen worden weergegeven en meerdere typen hebben. Als het predicaat geldig is bij het omzetten van een dergelijk kolomtype voor meer dan één type, valt de query terug op samenvoeging. Zie bijvoorbeeld voorbeelden van gevallen waarin find fungeert als een samenvoegings-.

Voorbeelden

In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt in de Help-cluster, zoals de StormEvents tabel in de Voorbeelden database.

In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt, zoals de tabel StormEvents in de weather analytics voorbeeldgegevens.

Termenzoekactie in alle tabellen

De query vindt alle rijen uit alle tabellen in de huidige database waarin een kolom het woord Hernandezbevat. De resulterende records worden getransformeerd volgens het uitvoerschema. De uitvoer bevat rijen uit de Customers tabel en de SalesTable tabel van de ContosoSales-database.

find "Hernandez"

uitvoer

In deze tabel ziet u de eerste drie rijen van de uitvoer.

bron_ inpakken_
Klanten {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Noord-Amerika","CustomerKey":5023,"Education":"Partial High School","FirstName":"Devin"," Geslacht":"M","Achternaam":"Hernandez","MaritalStatus":"S","Bezetting":"Clerical","RegionCountryName":"Verenigde Staten","StateProvinceName":"Washington"}
Klanten {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Noord-Amerika","CustomerKey":7814,"Education":"Partial College","FirstName":"Kristy"," Geslacht":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"}
Klanten {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"Noord-Amerika","CustomerKey":7888,"Education":"Partial High School","FirstName":"Kari"," Geslacht":"F","Achternaam":"Hernandez","MaritalStatus":"S","Bezetting":"Clerical","RegionCountryName":"Verenigde Staten","StateProvinceName":"Washington"}
... ...

Term opzoeken in alle tabellen die overeenkomen met een naampatroon

Met de query worden alle rijen uit alle tabellen in de huidige database gevonden waarvan de naam begint met Cen waarin een kolom het woord Hernandezbevat. De resulterende records worden getransformeerd volgens het uitvoerschema. De uitvoer bevat nu alleen records uit de Customers tabel.

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

uitvoer

In deze tabel ziet u de eerste drie rijen van de uitvoer.

bron_ inpakken_
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.0000000Z","duration":60,"time_and_duration":"Woensdag, 26 mei\n8:30 - 9:30 UUR GMT","kusto_affinity":"Focused"}
ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Deep dive into the Azure Kusto query language. ","session_type":"Theater","owner":"Jean François Berenguer","deelnemers":""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.0000000Z","duration":60,"time_and_duration":"Woensdag, 26 mei\n8:30 - 9:30 UUR GMT","kusto_affinity":"Focused"}
... ...

Termzoekactie in het cluster

De query zoekt alle rijen uit alle tabellen in alle databases in het cluster waarin een kolom het woord Kustobevat. Deze query is een query voor meerdere databases. De resulterende records worden getransformeerd volgens het uitvoerschema.

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

uitvoer

In deze tabel ziet u de eerste drie rijen van de uitvoer.

bron_ inpakken_
database("Voorbeelden"). 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.0000000Z","duration":60,"time_and_duration":"Woensdag, 26 mei\n8:30 - 9:30 UUR GMT","kusto_affinity":"Focused"}
database("Voorbeelden"). ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Deep dive into the Azure Kusto query language. ","session_type":"Theater","owner":"Jean François Berenguer","deelnemers":""URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":"""starttime":null,"duration":null,"time_and_duration":"","kusto_affinity":"Focused"}
database("Voorbeelden"). 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.0000000Z","duration":60,"time_and_duration":"Woensdag, 26 mei\n8:30 - 9:30 UUR GMT","kusto_affinity":"Focused"}
... ...

Termzoekactie die overeenkomt met een naampatroon in het cluster

De query zoekt alle rijen uit alle tabellen waarvan de naam begint met K in alle databases waarvan de naam begint met B en waarin een kolom het woord Kustobevat. De resulterende records worden getransformeerd volgens het uitvoerschema.

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

uitvoer

In deze tabel ziet u de eerste drie rijen van de uitvoer.

bron_ inpakken_
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.0000000Z","duration":60,"time_and_duration":"Woensdag, 26 mei\n8:30 - 9:30 UUR 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.0000000Z","duration":60,"time_and_duration":"Woensdag, 26 mei\n8:30 - 9:30 UUR 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.0000000Z","duration":60,"time_and_duration":"Woensdag, 26 mei\n8:30 - 9:30 UUR GMT","kusto_affinity":"Focused"}
... ...

Termenzoekactie in verschillende clusters

De query zoekt alle rijen uit alle tabellen waarvan de naam begint met K in alle databases waarvan de naam begint met B en waarin een kolom het woord Kustobevat. De resulterende records worden getransformeerd volgens het uitvoerschema.

find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"

Termenzoekactie in alle tabellen

De query zoekt alle rijen uit alle tabellen waarin een kolom het woord Kustobevat. De resulterende records worden getransformeerd volgens het uitvoerschema.

find "Kusto"

Voorbeelden van find uitvoerresultaten

In de volgende voorbeelden ziet u hoe find kan worden gebruikt in twee tabellen: EventsTable1 en EventsTable2. Stel dat we de volgende inhoud van deze twee tabellen hebben:

EventsTable1

Session_Id Niveau EventText Versie
acbd207d-51aa-4df7-bfa7-be70eb68f04e Informatie Sommige tekst1 v1.0.0
acbd207d-51aa-4df7-bfa7-be70eb68f04e Fout Sommige tekst2 v1.0.0
28b8e46e-3c31-43cf-83cb-48921c3986fc Fout Sommige tekst3 v1.0.1
8f057b11-3281-45c3-a856-05ebb18a3c59 Informatie Sommige tekst4 v1.1.0

EventsTable2

Session_Id Niveau EventText EventName
f7d5f95f-f580-4ea6-830b-5776c8d64fdd Informatie Andere tekst1 Gebeurtenis1
acbd207d-51aa-4df7-bfa7-be70eb68f04e Informatie Andere tekst2 Gebeurtenis2
acbd207d-51aa-4df7-bfa7-be70eb68f04e Fout Andere tekst3 Gebeurtenis3
15eaeab5-8576-4b58-8fc6-478f75d8fee4 Fout Andere tekst4 Gebeurtenis4

Zoeken in gemeenschappelijke kolommen, algemene en ongebruikelijke kolommen en de rest inpakken

De query zoekt naar specifieke records in EventsTable1 en EventsTable2 op basis van een bepaalde Session_Id en een fout niveau. Vervolgens worden drie specifieke kolommen geprojecteert: EventText, versionen EventNameen worden alle overige resterende kolommen in een dynamisch object verpakt.

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

uitvoer

bron_ EventText Versie EventName inpakken_
EventsTable1 Sommige tekst2 v1.0.0 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}
EventsTable2 Andere tekst3 Gebeurtenis3 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}

Zoeken in algemene en ongebruikelijke kolommen

Met de query wordt gezocht naar records met versie als v1.0.0 of EventName als 'Event1' en wordt vervolgens vier specifieke kolommen geprojecteerd(selecteert): Session_Id, EventText, Versionen EventName uit die gefilterde resultaten.

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

uitvoer

bron_ Session_Id EventText Versie EventName
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Sommige tekst1 v1.0.0
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Sommige tekst2 v1.0.0
EventsTable2 f7d5f95f-f580-4ea6-830b-5776c8d64fdd Andere tekst1 Gebeurtenis1

Notitie

In de praktijk worden EventsTable1 rijen gefilterd met Version == 'v1.0.0' predicaat en EventsTable2 rijen gefilterd met EventName == 'Event1' predicaat.

Verkorte notatie gebruiken om te zoeken in alle tabellen in de huidige database

Met deze query wordt in de database gezocht naar records met een Session_Id die overeenkomt met 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'. Hiermee worden records opgehaald uit alle tabellen en kolommen die deze specifieke Session_Idbevatten.

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

uitvoer

bron_ Session_Id Niveau EventText inpakken_
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Informatie Sommige tekst1 {"Versie":"v1.0.0"}
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Fout Sommige tekst2 {"Versie":"v1.0.0"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Informatie Andere tekst2 {"EventName":"Event2"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Fout Andere tekst3 {"EventName":"Event3"}

De resultaten van elke rij retourneren als een eigenschapsverzameling

Deze query doorzoekt de database op records met de opgegeven Session_Id en retourneert alle kolommen van deze records als één dynamisch object.

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

uitvoer

bron_ inpakken_
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"}

Voorbeelden van gevallen waarin find fungeert als union

De operator find in Kusto kan soms fungeren als een union-operator, voornamelijk wanneer deze wordt gebruikt om in meerdere tabellen te zoeken.

Een niet-tabellaire expressie gebruiken als operand zoeken

De query maakt eerst een weergave die filtert EventsTable1 om alleen records op foutniveau op te nemen. Vervolgens wordt in deze gefilterde weergave en in de tabel EventsTable2 gezocht naar records met een specifieke Session_Id.

let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

Verwijzen naar een kolom die in meerdere tabellen wordt weergegeven en meerdere typen heeft

Maak voor dit voorbeeld twee tabellen door het volgende uit te voeren:

.create tables 
  Table1 (Level:string, Timestamp:datetime, ProcessId:string),
  Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
  • De volgende query wordt uitgevoerd als union.
find in (Table1, Table2) where ProcessId == 1001

Het uitvoerresultaatschema is (Level:string, Timestamp, ProcessId_string, ProcessId_int).

  • De volgende query wordt uitgevoerd als union, maar produceert een ander resultaatschema.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

Het uitvoerresultaatschema is (Level:string, Timestamp, ProcessId_string)