find-Operator

Sucht Zeilen, die mit einem Prädikat in einer Gruppe von Tabellen übereinstimmen.

Der Bereich von find kann auch datenbank- 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 die spaltenspezifische Textfilterung. Wenn die Spalten bekannt sind, empfiehlt es sich, den Where-Operator zu verwenden. find funktioniert nicht gut, wenn der Arbeitsbereich eine große Anzahl von Tabellen und Spalten enthält und das zu überprüfende Datenvolumen hoch und der Zeitbereich der Abfrage hoch ist.

Syntax

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

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

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ Erforderlich BESCHREIBUNG
ColumnName string Standardmäßig enthält die Ausgabe eine Spalte namens source_ deren Werte angeben, welche Quelltabelle die einzelnen Zeilen beigetragen hat. Wenn angegeben, wird ColumnName anstelle von source_ verwendet. Wenn die Abfrage nach dem Abgleich mit einem Wildcard auf Tabellen aus mehreren Datenbanken verweist, einschließlich der Standarddatenbank, 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.
Predicate 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. Sucht standardmäßig find in allen Tabellen in der aktuellen Datenbank. 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 z. B. die Union aller Tabellen in der Datenbank bilden, E* deren Namen mit Ebeginnen.
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 die einzelnen Zeilen beigetragen hat. Wenn angegeben, wird ColumnName anstelle von source_ verwendet.

  • Prädikat: Ein booleanAusdruck über den Spalten der Eingabetabellen Table [,Table, ...]. 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 durchsucht find alle Tabellen nach:

    • 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 Ebeginnen.
  • 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 die prädikat ist true. Die Zeilen werden gemäß dem Ausgabeschema transformiert.

Ausgabeschema

source_ Spalte

Die Ausgabe des Suchoperators enthält immer eine source_ Spalte mit dem Namen der Quelltabelle. Die Spalte kann mithilfe des withsource -Parameters umbenannt werden.

Ergebnisspalten

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

Wenn Sie verwenden project-smart, werden die Spalten, die in der Ausgabe angezeigt werden, wie folgt aussehen:

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

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

Bei Verwendung von projectColumnName[: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, enthält diese Spalte im "result" den angegebenen Typ, und die Werte werden bei Bedarf in diesen Typ umgewandelt. Die Umwandlung hat keine Auswirkungen auf den Spaltentyp beim Auswerten des Prädikats.
  • Wenn pack_all() verwendet wird, werden alle Spalten, einschließlich der projizierten Spalten, in einen Eigenschaftenbehälter gepackt und in einer zusätzlichen Spalte angezeigt, standardmäßig "column1". Im Eigenschaftenbehälter dient der Name der Quellspalte als Eigenschaftsname und der Wert der Spalte als Eigenschaftswert.

Prädikatsyntax

Der Find-Operator unterstützt eine alternative Syntax für den * has Begriff und durchsucht mit just term einen Begriff in allen Eingabespalten.

Eine Zusammenfassung einiger Filterfunktionen finden Sie unter Where-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 project-Klausel folgen.
  • Wenn eine Spalte in mehreren Tabellen angezeigt wird und mehrere Typen aufweist und project-smart verwendet wird, gibt es eine entsprechende Spalte für jeden Typ im Ergebnis des findErgebnisses, wie unter union beschrieben.
  • Wenn Sie project-smart verwenden, können Änderungen im Prädikat, im Quelltabellensatz oder im Tabellenschema zu einer Änderung des Ausgabeschemas führen. Wenn ein konstantes Ergebnisschema erforderlich ist, verwenden Sie stattdessen project .
  • find der -Bereich kann keine Funktionen enthalten. Um eine Funktion in den Suchbereich einzuschließen, definieren Sie eine let-Anweisung mit Ansicht Schlüsselwort (keyword).

Leistungstipps

  • Verwenden Sie Tabellen im Gegensatz zu tabellarischen Ausdrücken. Beim tabellarischen Ausdruck greift der Find-Operator auf eine Abfrage zurück, die zu einer union Leistungsbeeinträchtigung führen kann.
  • Wenn eine Spalte, die in mehreren Tabellen angezeigt wird und mehrere Typen aufweist, Teil der project-Klausel ist, sollten Sie es vorziehen, der Project-Klausel einen ColumnType hinzuzufügen, bevor Sie die Tabelle ändern, bevor Sie sie an findü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 mehrere Typen aufweisen. Wenn das Prädikat beim Auflösen eines solchen Spaltentyps für mehr als einen Typ gültig ist, wird für die Abfrage ein Fallback auf union ausgeführt. Sehen Sie sich beispielsweise Beispiele für Fälle an, in denen find als Vereinigung fungiert.

Beispiele

Begriffssuche für alle Tabellen in der aktuellen Datenbank

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

find "Hernandez"

Begriffssuche für alle Tabellen, die einem Namensmuster in der aktuellen Datenbank entsprechen

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

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

Begriffssuche für alle 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 entsprechend dem Ausgabeschema transformiert.

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

Begriffssuche für alle Tabellen und Datenbanken, die einem Namensmuster im Cluster entsprechen

Die Abfrage sucht alle Zeilen aus allen Tabellen, deren Name mit K beginnt, in allen Datenbanken, deren Name mit B beginnt, und in denen jede Spalte das Wort Kustoenthält. Die resultierenden Datensätze werden entsprechend dem Ausgabeschema transformiert.

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

Begriffssuche in mehreren Clustern

Die Abfrage sucht alle Zeilen aus allen Tabellen, deren Name mit K beginnt, in allen Datenbanken, deren Name mit B beginnt, und in denen jede Spalte das Wort Kustoenthält. Die resultierenden Datensätze werden entsprechend dem Ausgabeschema transformiert.

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

Begriffssuche für alle Tabellen

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

find "Kusto"

Beispiele für find Ausgabeergebnisse

In den folgenden Beispielen wird gezeigt, wie find über zwei Tabellen hinweg verwendet werden kann: EventsTable1 und EventsTable2. Angenommen, wir haben den nächsten Inhalt dieser beiden Tabellen:

EventsTable1

Session_id Ebene EventText Version
acbd207d-51aa-4df7-bfa7-be70eb68f04e Information 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 Information Some Text4 1\.1.0

EventsTable2

Session_id Ebene EventText EventName
f7d5f95f-f580-4ea6-830b-5776c8d64fdd Information Anderer Text1 Event1
acbd207d-51aa-4df7-bfa7-be70eb68f04e Information Anderer Text2 Event2
acbd207d-51aa-4df7-bfa7-be70eb68f04e Fehler Anderer Text3 Event3
15eaeab5-8576-4b58-8fc6-478f75d8fee4 Fehler Anderer Text4 Event4

Suchen sie in allgemeinen Spalten, projektieren Sie allgemeine 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()

Ausgabe

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

Suchen in allgemeinen und ungewöhnlichen Spalten

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

Ausgabe

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 Event1

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

Verwenden sie abgekürzte Notation, um alle Tabellen in der aktuellen Datenbank zu durchsuchen.

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

Ausgabe

Quelle_ Session_id Ebene EventText Pack_
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Information 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 Information 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()

Ausgabe

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

Beispiele für Fälle, in denen find als union

Verwenden eines nicht tabellarischen Ausdrucks als Find-Operand

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

Angenommen, wir haben zwei Tabellen erstellt, 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 unionausgeführt.
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)