Freigeben über


find-Operator

Gilt für: ✅Microsoft Fabric

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

Der Umfang des find Operators 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)] wherePrä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 Typ Erforderlich Beschreibung des Dataflows
"ColumnName" string Standardmäßig enthält die Ausgabe eine Spalte namens source_, deren Werte angeben, welche Quelltabelle zu jeder Zeile beigetragen hat. Wenn angegeben, wird ColumnName- anstelle von source_verwendet. Wenn die Abfrage tabellen aus mehr als einer Datenbank einschließlich der Standarddatenbank referenziert, weist der Wert dieser Spalte einen Tabellennamen auf, der mit der Datenbank qualifiziert ist. Ebenso sind Cluster- und Datenbank Qualifikationen 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 sucht 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 beispielsweise die Vereinigung aller Tabellen in der Datenbank bilden, E* deren Namen mit E.
project-smart oder project string Wenn nicht angegeben, wird project-smart 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 beigetragen hat. Wenn angegeben, wird ColumnName- anstelle von source_verwendet.

  • Prädikat: Ein booleanAusdruck ü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 suchen 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 E.
  • project-smart | project: Wenn nicht angegeben, wird standardmäßig project-smart verwendet. Weitere Informationen finden Sie unter Ausgabeschemadetails.

Gibt zurück

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

Ausgabeschema

spalte source_

Die ausgabe des find Operators enthält immer eine source_ Spalte mit dem Quelltabellennamen. Die Spalte kann mit dem withsource Parameter umbenannt werden.

Ergebnisspalten

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

Wenn Sie project-smartverwenden, sind die spalten, die in der Ausgabe angezeigt werden:

  • 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 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, weist diese Spalte im "Ergebnis" den angegebenen Typ auf, und die Werte werden bei Bedarf in diesen Typ umgegossen. Die Umwandlung wirkt sich nicht auf den Spaltentyp aus, wenn das Prädikatausgewertet wird.
  • 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 "Spalte1". Im Eigenschaftenbehälter dient der Name der Quellspalte als Eigenschaftsname, und der Wert der Spalte dient als Eigenschaftswert.

Prädikatsyntax

Der find-Operator unterstützt eine alternative Syntax für den * has Ausdruck und durchsucht nur Ausdruckeinen Begriff über alle Eingabespalten.

Eine Zusammenfassung einiger Filterfunktionen finden Sie unter dem Operator.

Betrachtungen

  • 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, gibt es eine entsprechende Spalte für jeden Typ im Ergebnis des find, wie in Union
  • Wenn Sie projektbasiertenverwenden, können Änderungen im Prädikat, im Satz 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 bereich find einzuschließen, definieren Sie eine let-Anweisung mit Ansicht-Schlüsselwort.

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 gültig ist, wenn ein solcher Spaltentyp für mehrere Typen aufgelöst wird, wird die Abfrage wieder auf Union zurückgestellt. Beispiele für Fälle, in denen find als Union fungiert, finden Sie unterBeispielen.

Beispiele

Allgemeine Beispiele

Im folgenden Beispiel werden alle Zeilen aus allen Tabellen in der aktuellen Datenbank gefunden, in denen 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"

Ausgabe

Diese Tabelle zeigt die ersten drei Zeilen der Ausgabe an.

Quelle_ packen_
Kundschaft {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":5023,"Education":"Partial High School","FirstName":"Devin","Gender ":"M","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"}
Kundschaft {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7814,"Education":"Partial College","FirstName":"Kristy","Kristy","Gender":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"}
Kundschaft {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7888,"Education":"Partial High School","FirstName":"Kari","Gender ":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"}
... ...

Im folgenden Beispiel werden alle Zeilen aus allen Tabellen in der aktuellen Datenbank gefunden, deren Name mit Cdem Wort beginnt und in dem eine 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"

Ausgabe

Diese Tabelle zeigt die ersten drei Zeilen der Ausgabe an.

Quelle_ packen_
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":"Mittwoch, 26. Mai\n8:30 - 9:30 UHR 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 Francois Berenguer","participants":"""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":"Mittwoch, 26. Mai\n8:30 - 9:30 UHR GMT","kusto_affinity":"Focused"}
... ...

Im folgenden Beispiel werden alle Zeilen aus allen Tabellen in allen Datenbanken im Cluster gefunden, 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"

Ausgabe

Diese Tabelle zeigt die ersten drei Zeilen der Ausgabe an.

Quelle_ packen_
database("Samples"). 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":"Mittwoch, 26. Mai\n8:30 - 9:30 UHR GMT","kusto_affinity":"Focused"}
database("Samples"). ConferenceSessions {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Deep dive into the Azure Kusto query language. ","session_type":"Theater","owner":"Jean Francois Berenguer","participants":"""url":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":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","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":"Mittwoch, 26. Mai\n8:30 - 9:30 UHR GMT","kusto_affinity":"Focused"}
... ...

Im folgenden Beispiel werden alle Zeilen aus allen Tabellen gefunden, 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"

Ausgabe

Diese Tabelle zeigt die ersten drei Zeilen der Ausgabe an.

Quelle_ packen_
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":"Mittwoch, 26. Mai\n8:30 - 9:30 UHR 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":"Mittwoch, 26. Mai\n8:30 - 9:30 UHR 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":"Mittwoch, 26. Mai\n8:30 - 9:30 UHR GMT","kusto_affinity":"Focused"}
... ...

Im folgenden Beispiel werden alle Zeilen aus allen Tabellen gefunden, 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"

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

find "Kusto"

Beispiele für find Ausgabeergebnisse

Gehen Sie davon aus, dass wir den nächsten Inhalt dieser beiden Tabellen haben:

EventsTable1

Session_Id Ebene EreignisText 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 EreignisText Ereignisname
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

Im folgenden Beispiel wird anhand eines bestimmten Session_Id und einer Fehlerstufe nach bestimmten Datensätzen in EventsTable1 und EventsTable2 gesucht. Anschließend werden drei bestimmte Spalten projiziert: EventText-, Versionund EventName-und alle anderen verbleibenden Spalten in ein dynamisches Objekt.

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

Ausgabe

Quelle_ EreignisText Version Ereignisname 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"}

Im folgenden Beispiel wird nach Datensätzen gesucht, die entweder "Version " als "v1.0.0" oder "EventName " als "Event1" aufweisen, und dann werden vier bestimmte Spalten markiert: Session_Id, EventText, Version und EventName aus diesen gefilterten Ergebnissen.

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

Ausgabe

Quelle_ Session_Id EreignisText Version Ereignisname
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.

Im folgenden Beispiel wird die Datenbank nach datensätzen mit einer Session_Id durchsucht, die mit "acbd207d-51aa-4df7-bfa7-be70eb68f04e" übereinstimmt. Es ruft Datensätze aus allen Tabellen und Spalten ab, die diese spezifische Session_Identhalten.

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

Ausgabe

Quelle_ Session_Id Ebene EreignisText 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"}

Im folgenden Beispiel wird die Datenbank nach Datensätzen mit der angegebenen Session_Id durchsucht und alle Spalten dieser Datensätze als einzelnes dynamisches Objekt zurückgegeben.

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

Ausgabe

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 sie als Vereinigung fungieren

Der find-Operator in Kusto kann manchmal wie ein union-Operator wirken, hauptsächlich wenn er zum Durchsuchen mehrerer Tabellen verwendet wird.

Im folgenden Beispiel wird zuerst eine Ansicht erstellt, die EventsTable1 so filtert, dass nur Datensätze auf Fehlerebene enthalten sind. Anschließend wird in dieser gefilterten Ansicht und in der Tabelle "EventsTable2" nach Datensätzen mit einem bestimmten Session_Idgesucht.

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

Die folgenden Beispiele veranschaulichen, wie der find Operator als union eine Spalte in mehreren Tabellen mit unterschiedlichen Typen angezeigt werden kann. In diesem Fall ist die ProcessId Spalte sowohl in Tabelle1 als auch in Tabelle2 vorhanden, jedoch mit unterschiedlichen Typen. Erstellen Sie in diesem Beispiel zwei Tabellen, 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 ist (Level:string, Timestamp, ProcessId_string, ProcessId_int).

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

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