find-Operator
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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()
]]find
Prä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 mitE
.
- Der Name einer Tabelle, z. B.
project-smart
|project
: Wenn nicht angegebenproject-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 "find
s" 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.
find
Bereich 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
find
an ü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 Hernandez
enthä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 C
dem Wort beginnt, und in dem jede Spalte das Wort Hernandez
enthä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 Kusto
enthä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 Kusto
enthä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 Kusto
enthä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 Kusto
enthä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
union
ausgefü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)