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 den GitHub-Repositories logging-analytics-samples und security-analytics.

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_NAME_OF_LOG_VIEW durch den Tabellennamen für die Logansicht. die Sie abfragen möchten. Dieser Name hat das Format project_ID.region.bucket_ID.view_ID

    Rufen Sie zur Identifizierung dieses Namens die Liste Logansichten im Loganalysen, suchen Sie nach der Logansicht und wählen Sie Abfrage: Der Bereich Abfrage enthält eine Standardabfrage, die den Tabellennamen für die abgefragte Protokollansicht enthält. Informationen zum Zugriff auf die Standardabfrage finden Sie unter Protokollansicht abfragen.

  • Um die in diesem Dokument gezeigten Abfragen für die BigQuery Studio, ersetzen Sie TABLE_NAME_OF_LOG_VIEW 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 Log Analytics 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 Schema für die Logansicht: in der Liste Logansichten nach der gewünschten Ansicht und wählen Sie Name der Ansicht.

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

Logs filtern

SQL-Abfragen bestimmen, welche Einträge in der Logansicht verarbeitet werden sollen, und gruppieren und Aggregationsvorgänge durchfü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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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

Wenn Sie nach einem Lognamen filtern möchten, können Sie eine Einschränkung für den Wert des Felds log_name oder log_id hinzufügen. 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_NAME_OF_LOG_VIEW`
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

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

SELECT
  timestamp, log_name, severity, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
  `TABLE_NAME_OF_LOG_VIEW`
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 Logansicht so zu filtern, dass nur Logeinträge angezeigt werden, die einem HTTP- anfragen oder beantworten, 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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
WHERE
  http_request IS NOT NULL AND
  http_request.status IS NOT NULL
ORDER BY timestamp ASC
LIMIT 100

Um den Datentyp zu ermitteln, der in einem Feld gespeichert ist, können Sie das Schema aufrufen oder das Feld anzeigen. 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_NAME_OF_LOG_VIEW`
WHERE
  json_payload.status IS NOT NULL

und

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

Bei den vorherigen Abfragen wird der Wert des Felds json_payload im Logeintrag. Beide Abfragen Logeinträge verwerfen, die das Feld 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 Logansicht, zwei Logeinträge. Für einen Logeintrag enthält das Feld json_payload Folgendes: Formular:

{
    status: {
        measureTime: "1661517845"
    }
}

Für den anderen Logeintrag hat das Feld 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 Logeinträge erfüllen die Einschränkung json_payload.status IS NOT NULL. Das heißt, das Ergebnis der ersten Abfrage enthält beide Logeinträge. Lautet die Einschränkung jedoch JSON_VALUE(json_payload.status) IS NOT NULL, nur der zweite Logeintrag im Abfrageergebnis enthalten ist.

Nach regulärem Ausdruck filtern

Wenn Sie den Teilstring zurückgeben möchten, 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_NAME_OF_LOG_VIEW`
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 Logeinträge gruppieren und aggregieren. Wenn Sie keine Gruppierung, aber eine Aggregation angeben, wird ein einzelnes Ergebnis ausgegeben, da SQL alle Zeilen, die der WHERE-Klausel entsprechen, als eine einzige Gruppe behandelt.

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. Beispiel: Ein Zeitstempel von 15:30:11, der als hours:minutes:seconds formatiert ist, wird zu 15:30:00, wenn die Granularität auf MINUTE festgelegt ist.

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_NAME_OF_LOG_VIEW`
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 Logeinträge nach Ressourcentyp. Dann wird die Anzahl der Zeilen für jeden Ressourcentyp und gibt eine Tabelle mit zwei Spalten zurück. In der ersten Spalte werden die Ressourcentyp, während die zweite Spalte die Anzahl der Zeilen Ressourcentyp:

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

Nach Schweregrad gruppieren

Die folgende Abfrage liest die Daten der letzten Stunde und behält dann Zeilen mit einem Schweregradfeld bei. 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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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 gesendeten Byte für einen Subnetzwerktest berechnen

Die folgende Abfrage zeigt, wie Sie die durchschnittliche Anzahl der gesendeten Byte nach Standort anzeigen können.

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_NAME_OF_LOG_VIEW`
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_NAME_OF_LOG_VIEW`
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, mit denen Sie in mehreren Spalten einer Tabelle suchen können.

Wenn Sie in einer Log-Ansicht nach Einträgen suchen möchten, die mit einer Reihe von Suchbegriffen übereinstimmen, verwenden Sie die Funktion SEARCH. Für diese Funktion sind zwei Parameter erforderlich: der Ort, an dem 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_NAME_OF_LOG_VIEW` 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 Backticks gesetzt. Dieses sucht die Funktion SEARCH nach einer genauen Übereinstimmung zwischen einen Feldwert und den Wert zwischen den Graviszeichen.

Wenn Anführungszeichen im Abfragestring weggelassen werden, wird der Abfragestring gemäß den in der SEARCH-Dokumentation definierten Regeln aufgeteilt. 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 stimmt mit einer Zeile überein, wenn ein einzelnes Feld mit allen vier Tokens übereinstimmt. Die Reihenfolge der Tokens spielt keine Rolle.

Sie können mehrere SEARCH-Anweisungen in eine Abfrage aufnehmen. In der vorherigen Abfrage könnten Sie den Filter für die Log-ID beispielsweise durch eine Anweisung wie die folgende ersetzen:

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

Mit der vorherigen Anweisung wird in jedem Feld der Logeinträge in der Logansicht gesucht Die ursprüngliche Anweisung durchsucht nur das Feld log_id der Logeinträge.

Wenn Sie mehrere Suchen in mehreren Feldern ausführen möchten, trennen Sie die einzelnen Strings mit einem Leerzeichen. Die folgende Anweisung entspricht beispielsweise Zeilen, in denen ein Feld enthält "Hello World", "happy" und "days":

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

Außerdem können Sie nach bestimmten Feldern suchen, anstatt nach einer ganzen Tabelle. Mit der folgenden Anweisung wird beispielsweise nur in den Spalten text_payload und json_payload gesucht:

   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_NAME_OF_LOG_VIEW` 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

In 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 durchsuchen eine oder mehrere Tabellen oder Ausdrücke und geben die berechneten Ergebniszeilen zurück. 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_NAME_OF_LOG_VIEW_1 stammen, dem Feld json_payload von ABLE_NAME_OF_LOG_VIEW_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_NAME_OF_LOG_VIEW_1` a
JOIN `ABLE_NAME_OF_LOG_VIEW_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.

Mit der folgenden Abfrage werden die Daten der letzten Stunde TABLE_NAME_OF_LOG_VIEW_1 führt das Ergebnis mit der letzten Stunde des aus ABLE_NAME_OF_LOG_VIEW_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_NAME_OF_LOG_VIEW_1`
  UNION ALL
  SELECT * FROM `ABLE_NAME_OF_LOG_VIEW_2`
)
ORDER BY timestamp ASC
LIMIT 100

Beschränkungen

Abfragen, die auf der Seite Loganalysen verwendet werden, unterstützen GoogleSQL-Funktionen mit einigen Ausnahmen.

Die folgenden SQL-Befehle werden für SQL-Abfragen nicht unterstützt, die über die Seite Log Analytics ausgeführt werden:

  • DDL- und DML-Befehle
  • Benutzerdefinierte JavaScript-Funktionen
  • BigQuery ML-Funktionen
  • SQL-Variablen

Folgendes wird nur unterstützt, wenn Sie ein verknüpftes Dataset mit die Seiten BigQuery Studio und Looker Studio und die bq-Befehlszeilentool:

  • Benutzerdefinierte JavaScript-Funktionen
  • BigQuery ML-Funktionen
  • SQL-Variablen

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: