Freigeben über


find-Operator

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Sucht Zeilen, die einem Prädikat in einer Reihe von Tabellen entsprechen.

Der Umfang des Bereichs find kann auch datenbankübergreifend oder clusterübergreifend sein.

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"

Hinweis

find Operator ist wesentlich weniger effizient als spaltenspezifische Textfilterung. Wann immer die Spalten bekannt sind, empfehlen wir die Verwendung des Where-Operators. find funktioniert nicht gut, wenn der Arbeitsbereich eine große Anzahl von Tabellen und Spalten enthält und das zu scannende Datenvolumen hoch ist und der Zeitraum der Abfrage hoch ist.

Syntax

  • find[withsource= ColumnName] [in( Tables)] where Prädikat [project-smart | project ColumnName[: ColumnType , ... ] [, pack_all()]]

  • findPrädikat [project-smart | project ColumnName[: ColumnType , ... ] [ ]], pack_all()

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung des Dataflows
ColumnName string Standardmäßig enthält die Ausgabe eine Spalte namens source_ , deren Werte angeben, welche Quelltabelle jede Zeile beigetragen hat. Wenn angegeben, wird ColumnName anstelle von source_ verwendet. Wenn die Abfrage tabellen aus mehreren Datenbanken einschließlich der Standarddatenbank referenziert, weist der Wert dieser Spalte einen Tabellennamen auf, der mit der Datenbank qualifiziert ist. Ebenso sind Cluster - und Datenbankqualifikationen im Wert vorhanden, wenn auf mehrere Cluster verwiesen wird.
Prädikat bool ✔️ Dieser boolesche Ausdruck wird für jede Zeile in jeder Eingabetabelle ausgewertet. Weitere Informationen finden Sie unter Prädikatsyntaxdetails.
Tabellen string Null- oder mehr durch Trennzeichen getrennte Tabellenverweise. Standardmäßig find werden alle Tabellen in der aktuellen Datenbank angezeigt. Verwenden Sie Folgendes:
1. Der Name einer Tabelle, z. B. Events
2. Ein Abfrageausdruck, z. B. (Events | where id==42)
3. Eine Gruppe von Tabellen, die mit einem Wildcard angegeben sind. Würde beispielsweise die Vereinigung aller Tabellen in der Datenbank bilden, E* deren Namen mit E.
project-smart oder project string Wenn nicht angegeben, project-smart wird standardmäßig verwendet. Weitere Informationen finden Sie unter Ausgabeschemadetails.
  • withsource=ColumnName: Optional. Standardmäßig enthält die Ausgabe eine Spalte namens source_ , deren Werte angeben, welche Quelltabelle jede Zeile beitrug. Wenn angegeben, wird ColumnName anstelle von source_ verwendet.

  • Prädikat: Ein boolean Ausdruck über den Spalten der Eingabetabellen Tabelle [, Tabelle, ...]. Sie wird für jede Zeile in jeder Eingabetabelle ausgewertet. Weitere Informationen finden Sie unter Prädikatsyntaxdetails.

  • Tabellen: Optional. Null- oder mehr durch Trennzeichen getrennte Tabellenverweise. Standardmäßig werden alle Tabellen durchsucht:

    • Der Name einer Tabelle, z. B. Events.
    • Ein Abfrageausdruck, z.B. (Events | where id==42).
    • Ein Satz von Tabellen, die mit einem Platzhalterzeichen angegeben sind. Würde beispielsweise die Vereinigung aller Tabellen bilden, E* deren Namen mit E.
  • project-smart | project: Wenn nicht angegeben project-smart , wird standardmäßig verwendet. Weitere Informationen finden Sie unter Ausgabeschemadetails.

Gibt zurück

Transformation von Zeilen in Tabelle [, Tabelle, ...] für das Prädikat ist true. Die Zeilen werden gemäß dem Ausgabeschema transformiert.

Ausgabeschema

spalte source_

Die Ausgabe des Suchoperators enthält immer eine source_ Spalte mit dem Quelltabellennamen. Die Spalte kann mit dem withsource Parameter umbenannt werden.

Ergebnisspalten

Quelltabellen, die keine Spalte enthalten, die von der Prädikatauswertung verwendet werden, werden herausgefiltert.

Wenn Sie die Spalten verwenden project-smart, die in der Ausgabe angezeigt werden, lautet folgendes:

  • Spalten, die explizit im Prädikat angezeigt werden.
  • Spalten, die allen gefilterten Tabellen gemeinsam sind.

Die restlichen Spalten werden in einen Eigenschaftenbehälter verpackt und in einer zusätzlichen pack Spalte angezeigt. Eine Spalte, auf die explizit vom Prädikat verwiesen wird und in mehreren Tabellen mit mehreren Typen angezeigt wird, weist für jeden solchen Typ eine andere Spalte im Ergebnisschema auf. Jede der Spaltennamen wird aus dem ursprünglichen Spaltennamen und -typ erstellt, getrennt durch einen Unterstrich.

Bei Verwendung von project ColumnName[ : ColumnType , ... ] [, pack_all()]:

  • Die Ergebnistabelle enthält die in der Liste angegebenen Spalten. Wenn eine Quelltabelle keine bestimmte Spalte enthält, sind die Werte in den entsprechenden Zeilen null.
  • Wenn Sie einen ColumnType mit einem ColumnName angeben, hat diese Spalte im "Result" den angegebenen Typ, und die Werte werden bei Bedarf in diesen Typ umwandeln. Die Umwandlung wirkt sich beim Auswerten des Prädikats nicht auf den Spaltentyp aus.
  • Bei pack_all() Verwendung werden alle Spalten, einschließlich der projizierten Spalten, in einen Eigenschaftenbehälter gepackt und in einer zusätzlichen Spalte angezeigt, standardmäßig "Spalte1". Im Eigenschaftenbehälter dient der Name der Quellspalte als Eigenschaftsname, und der Wert der Spalte dient als Eigenschaftswert.

Prädikatsyntax

Der Suchoperator unterstützt eine alternative Syntax für den * has Ausdruck, und mit nur einem Ausdruck durchsucht einen Ausdruck über alle Eingabespalten.

Eine Zusammenfassung einiger Filterfunktionen finden Sie unter dem Operator.

Hinweise

  • Wenn die project Klausel auf eine Spalte verweist, die in mehreren Tabellen angezeigt wird und mehrere Typen aufweist, muss ein Typ diesem Spaltenverweis in der Projektklausel folgen.
  • Wenn eine Spalte in mehreren Tabellen angezeigt wird und mehrere Typen aufweist und project-smart verwendet wird, wird eine entsprechende Spalte für jeden Typ im Ergebnis " finds" vorhanden sein, wie in union beschrieben
  • Wenn Sie project-smart verwenden, können Änderungen im Prädikat, in der Menge der Quelltabellen oder im Tabellenschema zu einer Änderung des Ausgabeschemas führen. Wenn ein konstantes Ergebnisschema erforderlich ist, verwenden Sie stattdessen das Projekt.
  • findBereich kann keine Funktionen enthalten. Um eine Funktion in den Suchbereich einzuschließen, definieren Sie eine Let-Anweisung mit dem Schlüsselwort "View".

Leistungstipps

  • Verwenden Sie Tabellen im Gegensatz zu tabellarischen Ausdrücken. Wenn ein tabellarischer Ausdruck auftritt, greift der Suchoperator auf eine union Abfrage zurück, die zu einer beeinträchtigten Leistung führen kann.
  • Wenn eine Spalte, die in mehreren Tabellen angezeigt wird und mehrere Typen aufweist, Teil der Projektklausel ist, bevorzugen Sie das Hinzufügen eines ColumnType-Werts zur Projektklausel, um die Tabelle zu ändern, bevor Sie sie findan übergeben.
  • Fügen Sie dem Prädikat zeitbasierte Filter hinzu. Verwenden Sie einen Datetime-Spaltenwert oder ingestion_time().
  • Suchen Sie in bestimmten Spalten anstelle einer Volltextsuche.
  • Es ist besser, nicht auf Spalten zu verweisen, die in mehreren Tabellen angezeigt werden und über mehrere Typen verfügen. Wenn das Prädikat beim Auflösen eines solchen Spaltentyps für mehrere Typen gültig ist, wird die Abfrage auf union zurückfallen. Beispiele für Fälle, in denen die Suche als Vereinigung fungiert.

Beispiele

Ausdruckssuche in allen Tabellen in der aktuellen Datenbank

Die Abfrage findet alle Zeilen aus allen Tabellen in der aktuellen Datenbank, in der jede Spalte das Wort Hernandezenthält. Die resultierenden Datensätze werden gemäß dem Ausgabeschema transformiert. Die Ausgabe enthält Zeilen aus der Customers Tabelle und die SalesTable Tabelle der ContosoSales Datenbank.

find "Hernandez"

Ausdruckssuche in allen Tabellen, die einem Namensmuster in der aktuellen Datenbank entsprechen

Die Abfrage findet alle Zeilen aus allen Tabellen in der aktuellen Datenbank, deren Name mit Cdem Wort beginnt, und in dem jede Spalte das Wort Hernandezenthält. Die resultierenden Datensätze werden gemäß dem Ausgabeschema transformiert. Jetzt enthält die Ausgabe nur Datensätze aus der Customers Tabelle.

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

Ausdruckssuche in allen Tabellen in allen Datenbanken im Cluster

Die Abfrage findet alle Zeilen aus allen Tabellen in allen Datenbanken, in denen jede Spalte das Wort Kustoenthält. Diese Abfrage ist eine datenbankübergreifende Abfrage. Die resultierenden Datensätze werden gemäß dem Ausgabeschema transformiert.

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

Ausdruckssuche in allen Tabellen und Datenbanken, die einem Namensmuster im Cluster entsprechen

Die Abfrage findet alle Zeilen aus allen Tabellen, deren Name mit K allen Datenbanken beginnt, deren Name mit B und in der spalte das Wort Kustoenthält. Die resultierenden Datensätze werden gemäß dem Ausgabeschema transformiert.

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

Ausdruckssuche in mehreren Clustern

Die Abfrage findet alle Zeilen aus allen Tabellen, deren Name mit K allen Datenbanken beginnt, deren Name mit B und in der spalte das Wort Kustoenthält. Die resultierenden Datensätze werden gemäß dem Ausgabeschema transformiert.

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

Ausdruckssuche in allen Tabellen

Die Abfrage findet alle Zeilen aus allen Tabellen, in denen jede Spalte das Wort Kustoenthält. Die resultierenden Datensätze werden gemäß dem Ausgabeschema transformiert.

find "Kusto"

Beispiele für find Ausgabeergebnisse

Die folgenden Beispiele zeigen, wie find sie über zwei Tabellen verwendet werden können: EventsTable1 und EventsTable2. Gehen Sie davon aus, dass wir den nächsten Inhalt dieser beiden Tabellen haben:

EventsTable1

Session_Id Ebene EventText Version
acbd207d-51aa-4df7-bfa7-be70eb68f04e Informationen Some Text1 v1.0.0
acbd207d-51aa-4df7-bfa7-be70eb68f04e Fehler Some Text2 v1.0.0
28b8e46e-3c31-43cf-83cb-48921c3986fc Fehler Some Text3 v1.0.1
8f057b11-3281-45c3-a856-05ebb18a3c59 Informationen Some Text4 1\.1.0

EventsTable2

Session_Id Ebene EventText EventName
f7d5f95f-f580-4ea6-830b-5776c8d64fdd Informationen Anderer Text1 Ereignis1
acbd207d-51aa-4df7-bfa7-be70eb68f04e Informationen Anderer Text2 Ereignis2
acbd207d-51aa-4df7-bfa7-be70eb68f04e Fehler Anderer Text3 Ereignis3
15eaeab5-8576-4b58-8fc6-478f75d8fee4 Fehler Anderer Text4 Ereignis4

Suchen sie in allgemeinen Spalten, projektieren Sie häufig verwendete und ungewöhnliche Spalten, und packen Sie den Rest.

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

Output

Quelle_ EventText Version EventName packen_
EventsTable1 Some Text2 v1.0.0 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}
EventsTable2 Anderer Text3 Ereignis3 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}

Suchen in häufigen und ungewöhnlichen Spalten

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

Output

Quelle_ Session_Id EventText Version EventName
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Some Text1 v1.0.0
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Some Text2 v1.0.0
EventsTable2 f7d5f95f-f580-4ea6-830b-5776c8d64fdd Anderer Text1 Ereignis1

Hinweis: In der Praxis werden EventsTable1-Zeilen mit Version == 'v1.0.0' Prädikat gefiltert, und EventsTable2-Zeilen werden mit EventName == 'Event1' Prädikat gefiltert.

Verwenden Sie abgekürzte Schreibweise, um in allen Tabellen in der aktuellen Datenbank zu suchen.

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

Output

Quelle_ Session_Id Ebene EventText packen_
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Informationen Some Text1 {"Version":"v1.0.0"}
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Fehler Some Text2 {"Version":"v1.0.0"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Informationen Anderer Text2 {"EventName":"Event2"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Fehler Anderer Text3 {"EventName":"Event3"}

Zurückgeben der Ergebnisse aus jeder Zeile als Eigenschaftenbehälter

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

Output

Quelle_ packen_
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"}

Beispiele für Fälle, in denen find dies der Fall sein wird union

Verwenden eines nicht tabellarischen Ausdrucks als "Operand suchen"

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

Verweisen auf eine Spalte, die in mehreren Tabellen angezeigt wird und mehrere Typen aufweist

Gehen Sie davon aus, dass wir zwei Tabellen erstellt haben, indem Sie folgendes ausführen:

.create tables 
  Table1 (Level:string, Timestamp:datetime, ProcessId:string),
  Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
  • Die folgende Abfrage wird als union.
find in (Table1, Table2) where ProcessId == 1001

Das Ausgabeergebnisschema lautet (Level:string, Timestamp, ProcessId_string, ProcessId_int).

  • Die folgende Abfrage wird auch als unionausgeführt, erzeugt jedoch ein anderes Ergebnisschema.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

Das Ausgabeergebnisschema lautet (Level:string, Timestamp, ProcessId_string)