SQL-Beispielabfragen

Dieses Dokument enthält Beispielabfragen für Logeinträge, die in Log-Buckets, die für die Verwendung von Loganalysen aktualisiert wurden. Für diese Buckets können Sie SQL-Abfragen über die Loganalysen in der Google Cloud Console. Weitere Beispiele finden Sie in der logging-analytics-samples und die security-analytics GitHub-Repositories.

In diesem Dokument werden weder SQL noch das Weiterleiten und Speichern von Logeinträgen beschrieben. Für Informationen zu diesen Themen finden Sie im Abschnitt Weitere Informationen.

Hinweise

  • So verwenden Sie die in diesem Dokument gezeigten Abfragen auf der Seite Loganalysen: Ersetzen Sie TABLE durch den Namen der Tabelle, zu der Ansicht hinzu, die Sie abfragen möchten. Der Tabellenname hat das Format project_ID.region.bucket_ID.view_ID Sie finden den Tabellennamen für eine auf der Seite Loganalysen ansehen die Standardabfrage für ein Log view listet den Tabellennamen in der FROM-Anweisung auf. Für wie Sie auf die Standardabfrage zugreifen, Siehe Logansicht abfragen.

  • Um die in diesem Dokument gezeigten Abfragen für die BigQuery Studio, ersetzen Sie TABLE durch den Pfad zur Tabelle im verknüpften Dataset. So können Sie beispielsweise die Ansicht _AllLogs des verknüpften Datasets mydataset abfragen. die sich im Projekt myproject befindet, legen Sie dieses Feld auf myproject.mydataset._AllLogs:

    Öffnen Sie in der Google Cloud Console die Seite BigQuery:

    Zu BigQuery Studio

    Sie können diese Seite auch über die Suchleiste finden.

  • So öffnen Sie die Seite Loganalysen:

    1. Rufen Sie in der Google Cloud Console die Seite Loganalysen auf:

      Zu Log Analytics

      Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift Monitoring ist.

    2. Optional: So ermitteln Sie das Tabellenschema für die Logansicht: in der Liste Logansichten nach der gewünschten Ansicht und wählen Sie Name der Ansicht.

    Das Schema für die Tabelle wird angezeigt. Über das Feld Filter bestimmte Felder zu finden. Sie können das Schema nicht ändern.

Logs filtern

SQL-Abfragen bestimmen, welche Zeilen der Tabelle verarbeitet werden sollen, und gruppieren und Aggregatvorgänge ausführen. Wenn keine Gruppierung und Aggregation enthält, enthält das Ergebnis der Abfrage die Zeilen, die vom Filtervorgang. Die Beispiele in diesem Abschnitt veranschaulichen die Filterung.

Nach Uhrzeit filtern

Zum Festlegen des Zeitraums für Ihre Abfrage sollten Sie die Zeitraumauswahl. Diese Auswahl wird automatisch verwendet, gibt in der WHERE-Klausel kein timestamp-Feld an. Um beispielsweise die Daten für die vergangene Woche anzuzeigen, wählen Sie Letzte 7 Tage die Zeitraumauswahl. Sie können auch den Zeitraum die Start- und Endzeit sowie die Uhrzeit für die Besichtigung und Zeitzonen zu ändern.

Wenn Sie in die WHERE-Klausel das Feld timestamp einfügen, gibt der Zeitraum wird nicht verwendet. Im folgenden Beispiel werden die Daten nach Mit der Funktion TIMESTAMP_SUB, mit der Sie ein Lookback-Window angeben können, Intervall aus der aktuellen Zeit:

WHERE
  timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

Weitere Informationen zum Filtern nach Zeit finden Sie unter Zeitfunktionen und Zeitstempelfunktionen.

Nach Ressource filtern

Fügen Sie die Einschränkung resource.type hinzu, um nach Ressource zu filtern.

Die folgende Abfrage liest beispielsweise die Daten der letzten Stunde und behält die Zeilen bei, deren Ressourcentyp gce_instance entspricht, und sortiert dann und bis zu 100 Einträge werden angezeigt:

SELECT
  timestamp, log_name, severity, json_payload, resource, labels
FROM
  `TABLE`
WHERE
  resource.type = "gce_instance"
ORDER BY timestamp ASC
LIMIT 100

Nach Schweregrad filtern

Sie können nach einem bestimmten Schweregrad filtern, z. B. mit einer Einschränkung wie severity = 'ERROR' Eine weitere Option ist die Verwendung der IN-Anweisung und geben eine Reihe gültiger Werte an.

Die folgende Abfrage liest beispielsweise die Daten der letzten Stunde und behält dann nur die Zeilen bei, die ein severity-Feld mit dem Wert entweder 'INFO' oder 'ERROR':

SELECT
  timestamp, log_name, severity, json_payload, resource, labels
FROM
  `TABLE`
WHERE
  severity IS NOT NULL AND
  severity IN ('INFO', 'ERROR')
ORDER BY timestamp ASC
LIMIT 100

Bei der vorherigen Abfrage wird nach dem Wert des Felds severity gefiltert. Sie können jedoch Sie können auch Abfragen schreiben, die nach dem numerischen Wert des Logschweregrads filtern. Wenn Sie beispielsweise die severity-Zeilen durch die folgenden Zeilen ersetzen, Die Abfrage gibt alle Logeinträge zurück, deren Schweregrad mindestens NOTICE ist:

  severity_number IS NOT NULL AND
  severity_number > 200

Informationen zu den Aufzählungswerten finden Sie unter LogSeverity

Nach Logname filtern

Um nach einem Lognamen zu filtern, können Sie eine Einschränkung für den Wert des log_name oder log_id. Das Feld log_name enthält die Ressource Pfad. Das bedeutet, dass dieses Feld Werte wie projects/myproject/logs/mylog enthält. Im Feld log_id wird nur der Logname gespeichert, z. B. mylog.

Die folgende Abfrage liest beispielsweise die Daten der letzten Stunde und behält die Zeilen bei, in denen der Wert im Feld log_id gleich cloudaudit.googleapis.com/data_access. Anschließend werden die Ergebnisse:

SELECT
  timestamp, log_id, severity, json_payload, resource, labels
FROM
  `TABLE`
WHERE
  log_id = "cloudaudit.googleapis.com/data_access"
ORDER BY timestamp ASC
LIMIT 100

Nach Ressourcenlabel filtern

Die meisten überwachten Ressourcendeskriptoren definieren Labels, die zur Identifizierung der zu einer bestimmten Ressource. Der Deskriptor für eine Compute Engine-Instanz enthält Labels für die Zone, die Projekt-ID und die Instanz-ID. Wenn der Parameter Protokolleintrag geschrieben wird, werden jedem Feld Werte zugewiesen. Folgendes ist Beispiel:

{
   type: "gce_instance"
   labels: {
      instance_id: "1234512345123451"
      project_id: "my-project"
      zone: "us-central1-f"
   }
}

Weil der Datentyp des Felds labels JSON ist, einschließlich einer Einschränkung wie resource.labels.zone = "us-centra1-f" in einer Abfrage führt zu einer Syntax Fehler. Um den Wert eines Felds mit dem Datentyp JSON abzurufen, verwenden Sie die Funktion JSON_VALUE

Mit der folgenden Abfrage werden beispielsweise die neuesten Daten gelesen und dann in denen die Ressource eine Compute Engine-Instanz ist, befindet sich in der Zone us-central1-f:

SELECT
  timestamp, log_name, severity, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
  `TABLE`
WHERE
  resource.type = "gce_instance" AND
  JSON_VALUE(resource.labels.zone) = "us-central1-f"
ORDER BY timestamp ASC
LIMIT 100

Informationen zu allen Funktionen, die JSON abrufen und transformieren können finden Sie unter JSON-Funktionen.

Nach HTTP-Anfrage filtern

Um die Tabelle so zu filtern, dass nur Zeilen angezeigt werden, die einer HTTP-Anfrage entsprechen oder antworten Sie, fügen Sie eine Einschränkung vom Typ „http_request IS NOT NULL“ hinzu:

SELECT
  timestamp, log_name, severity, http_request, resource, labels
FROM
  `TABLE`
WHERE
  http_request IS NOT NULL
ORDER BY timestamp
LIMIT 100

Die folgende Abfrage enthält nur Zeilen, die GET oder POST entsprechen Anfragen:

SELECT
  timestamp, log_name, severity, http_request, resource, labels
FROM
  `TABLE`
WHERE
  http_request IS NOT NULL AND
  http_request.request_method IN ('GET', 'POST')
ORDER BY timestamp ASC
LIMIT 100

Nach HTTP-Status filtern

Ändern Sie zum Filtern nach HTTP-Status die WHERE-Klausel so, dass Folgendes erforderlich ist: Legen Sie das Feld http_request.status fest:

SELECT
  timestamp, log_name, http_request.status, http_request, resource, labels
FROM
  `TABLE`
WHERE
  http_request IS NOT NULL AND
  http_request.status IS NOT NULL
ORDER BY timestamp ASC
LIMIT 100

Um den Typ der in einem Feld gespeicherten Daten zu ermitteln, rufen Sie das Schema auf oder zeigen Sie auf dem Feld. Die Ergebnisse der vorherigen Abfrage zeigen, Im Feld http_request.status werden Ganzzahlwerte gespeichert.

Nach einem Feld mit einem JSON-Typ filtern

Um einen Wert aus einer Spalte mit dem Datentyp JSON zu extrahieren, verwenden Sie die Funktion JSON_VALUE

Betrachten Sie die folgenden Abfragen:

SELECT
  json_payload
FROM
  `TABLE`
WHERE
  json_payload.status IS NOT NULL

und

SELECT
  json_payload
FROM
  `TABLE`
WHERE
  JSON_VALUE(json_payload.status) IS NOT NULL

Bei den vorherigen Abfragen wird der Wert der Spalte json_payload getestet. der Inhalt dieser Spalte wird durch den Inhalt eines Logeintrags bestimmt. Beide Abfragen Zeilen verwerfen, die die Spalte json_payload nicht enthalten. Der Unterschied zwischen diesen beiden Abfragen wird in der letzten Zeile angegeben. was mit NULL verglichen wird. Betrachten Sie nun eine Tabelle mit zwei Zeilen. In einem Zeile hat die Spalte json_payload das folgende Format:

{
    status: {
        measureTime: "1661517845"
    }
}

In der anderen Zeile hat die Spalte json_payload eine andere Struktur:

{
    @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
    jobName: "projects/my-project/locations/us-central1/jobs/test1"
    relativeUrl: "/food=cake"
    status: "NOT_FOUND"
    targetType: "APP_ENGINE_HTTP"
}

Beide vorherigen Zeilen erfüllen die Einschränkung json_payload.status IS NOT NULL Das heißt, das Ergebnis der Abfrage enthält beide Zeilen. Lautet die Einschränkung jedoch JSON_VALUE(json_payload.status) IS NOT NULL, nur die zweite Zeile im Ergebnis enthalten ist.

Nach regulärem Ausdruck filtern

Um den Teilstring zurückzugeben, der mit einem regulären Ausdruck übereinstimmt, verwenden Sie die Funktion REGEXP_EXTRACT Der Rückgabetyp dieser Funktion ist entweder STRING oder BYTES.

Die folgende Abfrage zeigt die neuesten empfangenen Logeinträge an, behält diese Einträge mit dem Feld json_payload.jobName und zeigt dann Teil des Namens, der mit test beginnt:

SELECT
  timestamp, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
FROM
  `TABLE`
WHERE
  json_payload.jobName IS NOT NULL
ORDER BY timestamp DESC
LIMIT 20

Weitere Beispiele finden Sie in der Dokumentation zu REGEXP_EXTRACT Beispiele für reguläre Ausdrücke, die die Sie verwenden können, siehe Funktionen, Operatoren und Bedingungen.

Die in diesem Beispiel gezeigte Abfrage ist nicht effizient. Für eine Teilstring-Übereinstimmung wie verwenden Sie die Funktion CONTAINS_SUBSTR.

Logeinträge gruppieren und zusammenfassen

Dieser Abschnitt baut auf den vorherigen Beispielen auf und zeigt, wie Sie Tabellenzeilen gruppieren und aggregieren. Wenn Sie keine Gruppierung angeben, eine Aggregation angeben, wird ein einzelnes Ergebnis ausgegeben, da SQL alle Zeilen, die die WHERE-Klausel erfüllen, als einzelne Gruppe.

Jeder SELECT-Ausdruck muss in den Gruppenfeldern enthalten oder aggregiert sein.

Nach Zeit gruppieren

Um Daten nach Zeit zu gruppieren, verwenden Sie die Funktion TIMESTAMP_TRUNC. , der einen Zeitstempel auf einen bestimmten Detaillierungsgrad wie MINUTE kürzt. Für Beispiel einen Zeitstempel von 15:30:11, der folgendermaßen formatiert ist: hours:minutes:seconds wird zu 15:30:00, wenn der Detaillierungsgrad festgelegt ist: MINUTE.

Die folgende Abfrage liest die in dem durch die Zeitraumauswahl und behält dann Zeilen, in denen der Wert des Felds json_payload.status nicht NULL ist. Die Abfrage kürzt den Zeitstempel in jeder Zeile um Stunde und gruppiert dann Zeilen mit dem abgeschnittenen Zeitstempel und Status:

SELECT
  TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
  JSON_VALUE(json_payload.status) AS status,
  COUNT(*) AS count
FROM
  `TABLE`
WHERE
  json_payload IS NOT NULL AND
  JSON_VALUE(json_payload.status) IS NOT NULL
GROUP BY hour,status
ORDER BY hour ASC

Weitere Beispiele finden Sie in der Dokumentation zu TIMESTAMP_TRUNC Informationen zu anderen zeitbasierten Funktionen finden Sie unter Datum/Uhrzeit-Funktionen:

Nach Ressource gruppieren

Die folgende Abfrage liest die Daten der letzten Stunde und gruppiert dann Zeilen nach Ressourcentyp. Dann wird die Anzahl der Zeilen für jeden Typ gezählt, und gibt eine Tabelle mit zwei Spalten zurück. In der ersten Spalte wird die Ressource und die zweite Spalte die Anzahl der Zeilen für diesen Ressourcentyp:

SELECT
   resource.type, COUNT(*) AS count
FROM
  `TABLE`
GROUP BY resource.type
LIMIT 100

Nach Schweregrad gruppieren

Die folgende Abfrage liest die Daten der letzten Stunde und behält dann Zeilen bei mit einem Feld für den Schweregrad. Die Abfrage gruppiert die Zeilen dann nach Schweregrad und zählt die Anzahl der Zeilen für jede Gruppe:

SELECT
  severity, COUNT(*) AS count
FROM
  `TABLE`
WHERE
  severity IS NOT NULL
GROUP BY severity
ORDER BY severity
LIMIT 100

Nach log_id gruppieren

Das Ergebnis der folgenden Abfrage ist eine Tabelle mit zwei Spalten. Die erste enthält die Log-Namen und in der zweiten Spalte die Anzahl Logeinträge, die in das Log geschrieben wurden. Die query sortiert die Ergebnisse nach der Anzahl der Einträge:

SELECT
  log_id, COUNT(*) AS count
FROM
  `TABLE`
GROUP BY log_id
ORDER BY count DESC
LIMIT 100

Durchschnittliche Latenz für HTTP-Anfrage berechnen

Die folgende Abfrage veranschaulicht die Gruppierung nach mehreren Spalten und die Berechnung ein Durchschnittswert. Die Abfrage gruppiert Zeilen nach der URL, die in der HTTP- und durch den Wert des Felds labels.checker_location. Nachher Durch Gruppieren der Zeilen berechnet die Abfrage die durchschnittliche Latenz für jede Gruppe:

SELECT
  JSON_VALUE(labels.checker_location) AS location,
  AVG(http_request.latency.seconds) AS secs, http_request.request_url
FROM
  `TABLE`
WHERE
  http_request IS NOT NULL AND
  http_request.request_method IN ('GET')
GROUP BY http_request.request_url, location
ORDER BY location
LIMIT 100

Im vorherigen Ausdruck ist JSON_VALUE erforderlich, um den Wert zu extrahieren des Feldes labels.checker_location, weil der Datentyp für labels ist JSON. Sie verwenden diese Funktion jedoch nicht, um den Wert aus dem http_request.latency.seconds. Das letzte Feld hat den Datentyp Integer

Durchschnittliche Byte berechnen, die für einen Subnetzwerktest gesendet wurden

Die folgende Abfrage zeigt, wie Sie den Durchschnitt anzeigen können der vom Standort gesendeten Byte.

Die Abfrage liest die Daten der letzten Stunde und behält dann nur diese Zeilen bei deren Ressourcentypspalte gce_subnetwork ist und deren json_payload Spalte nicht NULL ist. Als Nächstes gruppiert die Abfrage die Zeilen nach dem Speicherort der . Im Gegensatz zum vorherigen Beispiel, bei dem die Daten als numerische ist der Wert des Felds bytes_sent ein String. Daher müssen Sie wandeln Sie den Wert vor der Berechnung des Durchschnitts in einen FLOAT64 um:

SELECT JSON_VALUE(resource.labels.location) AS location,
   AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) AS bytes
FROM
  `TABLE`
WHERE
  resource.type = "gce_subnetwork" AND
  json_payload IS NOT NULL
GROUP BY location
LIMIT 100

Das Ergebnis der vorherigen Abfrage ist eine Tabelle, in der in jeder Zeile ein Standort aufgeführt ist. und die durchschnittlichen Byte, die für diesen Standort gesendet wurden.

Informationen zu allen Funktionen, die JSON abrufen und transformieren können finden Sie unter JSON-Funktionen.

Informationen zu CAST und anderen Konvertierungsfunktionen finden Sie unter Conversion-Funktionen.

Logeinträge mit einem Feld zählen, das einem Muster entspricht

Um den Teilstring zurückzugeben, der mit einem regulären Ausdruck übereinstimmt, verwenden Sie die Funktion REGEXP_EXTRACT Der Rückgabetyp dieser Funktion ist entweder STRING oder BYTES.

Durch die folgende Abfrage werden die Logeinträge beibehalten, für die der Wert des Felds json_payload.jobName ist nicht NULL. Anschließend werden die Einträge nach dem Namenssuffix gruppiert, mit test. Schließlich zählt die Abfrage die Anzahl der Einträge in jeder Gruppe:

SELECT
  REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
  COUNT(*) AS count
FROM
  `TABLE`
WHERE
  json_payload.jobName IS NOT NULL
GROUP BY name
ORDER BY count
LIMIT 20

Weitere Beispiele finden Sie in der Dokumentation zu REGEXP_EXTRACT Beispiele für reguläre Ausdrücke, die die Sie verwenden können, siehe Funktionen, Operatoren und Bedingungen.

In diesem Abschnitt werden zwei verschiedene Ansätze beschrieben, die Sie für die Suche verwenden können, Spalten in einer Tabelle anzeigen.

Um in einer Tabelle nach Einträgen zu suchen, die mit einer Reihe von Suchbegriffen übereinstimmen, verwenden Sie die Funktion SEARCH. Für diese Funktion sind zwei Parameter erforderlich: wo gesucht werden soll, und die Suchanfrage. Da die SEARCH-Funktion bestimmte Regeln dafür hat, wie die Daten durchsucht werden, empfehlen wir Ihnen, die SEARCH-Dokumentation zu lesen.

Die folgende Abfrage behält nur die Zeilen bei, die ein Feld enthalten die genau mit "35.193.12.15" übereinstimmt:

SELECT
  timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
  `TABLE` AS t
WHERE
  proto_payload IS NOT NULL AND
  log_id = "cloudaudit.googleapis.com/data_access" AND
  SEARCH(t,"`35.193.12.15`")
ORDER BY timestamp ASC
LIMIT 20

In der vorherigen Abfrage wird der Wert, nach dem gesucht werden soll, in Graviszeichen umschlossen. Dieses sucht die Funktion SEARCH nach einer genauen Übereinstimmung zwischen einen Feldwert und den Wert zwischen den Graviszeichen.

Wenn Graviszeichen im Abfragestring weggelassen werden, wird der Abfragestring aufgeteilt. basierend auf Regeln, die in der Dokumentation zu SEARCH definiert sind. Wenn beispielsweise die folgende Anweisung ausgeführt wird, Der Abfragestring wird in vier Tokens aufgeteilt: "35", "193", "12" und "15":

  SEARCH(t,"35.193.12.15")

Die vorherige SEARCH-Anweisung entspricht einer Zeile, wenn ein einzelnes Feld entspricht allen vier Tokens. Die Reihenfolge der Tokens spielt keine Rolle.

Sie können mehrere SEARCH-Anweisungen in eine Abfrage aufnehmen. Im Feld in der vorherigen Abfrage, könnten Sie den Filter für die Log-ID durch einen wie die folgende:

  SEARCH(t,"`cloudaudit.googleapis.com/data_access`")

Mit der vorherigen Anweisung wird die gesamte Tabelle durchsucht, während die ursprüngliche Anweisung sucht nur in der Spalte log_id.

Um mehrere Suchvorgänge für eine Spalte durchzuführen, trennen Sie die einzelnen Zeichenfolgen mit ein Leerzeichen. Die folgende Anweisung entspricht beispielsweise Zeilen, in denen ein Feld enthält "Hello World", "happy" und "days":

  SEARCH(t,"`Hello World` happy days")

Schließlich können Sie auch in bestimmten Spalten einer Tabelle suchen, in der gesamten Tabelle. Mit der folgenden Anweisung wird beispielsweise nur nach die Spalten text_payload und json_payload:

   SEARCH((text_payload, json_payload) ,"`35.222.132.245`")

Informationen dazu, wie die Parameter der Funktion SEARCH verarbeitet werden, finden Sie auf der BigQuery-Referenzseite Suchfunktionen.

Um einen Test durchzuführen, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, um festzustellen, ob ein Wert in einem die Funktion CONTAINS_SUBSTR. Diese Funktion gibt TRUE zurück, wenn der Wert vorhanden ist, und Andernfalls FALSE. Der Suchwert muss ein STRING-Literal sein, aber nicht der Literal-NULL.

Mit der folgenden Abfrage werden beispielsweise alle Audit-Logeinträge zum Datenzugriff abgerufen durch eine bestimmte IP-Adresse, deren Zeitstempel in einem bestimmten Zeitraum liegen. Schließlich sortiert die Abfrage die Ergebnisse und zeigt dann die 20 ältesten Ergebnisse an:

SELECT
  timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
  `TABLE` AS t
WHERE
  proto_payload IS NOT NULL AND
  log_id = "cloudaudit.googleapis.com/data_access" AND
  CONTAINS_SUBSTR(t,"35.193.12.15")
ORDER BY timestamp ASC
LIMIT 20

Mit der vorherigen Abfrage wird ein Teilstringtest durchgeführt. Daher enthält eine Zeile, die „35.193.12.152“ entspricht der CONTAINS_SUBSTR-Anweisung.

Daten aus mehreren Quellen kombinieren

Abfrageanweisungen scannen eine oder mehrere Tabellen oder Ausdrücke und geben den Fehlerwert die berechneten Ergebniszeilen. Sie können beispielsweise Abfrageanweisungen verwenden, um Ergebnisse von SELECT-Anweisungen für verschiedene Tabellen oder Datasets in und wählen dann die Spalten aus den kombinierten Daten aus.

Daten aus zwei Tabellen mit Joins kombinieren

Um Informationen aus zwei Tabellen zu kombinieren, verwenden Sie eine der join-Methoden. . Der Join-Typ und die verwendete Bedingungsklausel bestimmen, wie Zeilen kombiniert und verworfen werden.

Mit der folgenden Abfrage erhalten Sie die json_payload-Felder aus den Zeilen in zwei verschiedene Tabellen, die vom selben Trace-Span geschrieben werden. Die Abfrage führt eine Inner JOIN über zwei Tabellen für Zeilen, in denen die Werte von Die Spalten span_id und trace in beiden Tabellen stimmen überein. Aus diesem Ergebnis Die Abfrage wählt dann die Felder timestamp, severity und json_payload aus die aus TABLE_1 stammen, dem Feld json_payload von TABLE_2 und die Werte von span_id und trace, mit denen die beiden Tabellen verknüpft wurden, und gibt bis zu 100 zurück. Zeilen:

SELECT
  a.timestamp, a.severity, a.json_payload, b.json_payload, a.span_id, a.trace
FROM `TABLE_1` a
JOIN `TABLE_2` b
ON
  a.span_id = b.span_id AND
  a.trace = b.trace
LIMIT 100

Mehrfachauswahl mit Unions kombinieren

Zum Kombinieren der Ergebnisse von zwei oder mehr SELECT-Anweisungen und Verwerfen doppelte Zeilen erstellen, verwenden Sie den Operator UNION. Um Duplikate beizubehalten mit dem Operator UNION ALL.

Die folgende Abfrage liest die Daten der letzten Stunde aus TABLE_1 führt das Ergebnis mit der letzten Stunde des aus TABLE_2 werden die zusammengeführten Daten durch Erhöhen und zeigt dann die ältesten 100 Einträge an:

SELECT
  timestamp, log_name, severity, json_payload, resource, labels
FROM(
  SELECT * FROM `TABLE_1`
  UNION ALL
  SELECT * FROM `TABLE_2`
)
ORDER BY timestamp ASC
LIMIT 100

Nächste Schritte

Informationen zum Weiterleiten und Speichern von Logeinträgen finden Sie in den folgenden Dokumenten:

Die SQL-Referenzdokumentation finden Sie in den folgenden Dokumenten: