Ansicht JOBS_TIMELINE
Die Ansicht INFORMATION_SCHEMA.JOBS_TIMELINE
enthält BigQuery-Metadaten in nahezu Echtzeit nach Zeitabschnitt für alle Jobs, die im aktuellen Projekt gesendet wurden. Diese Ansicht enthält derzeit ausgeführte und abgeschlossene Jobs.
Erforderliche Berechtigungen
Zum Abfragen der Ansicht INFORMATION_SCHEMA.JOBS_TIMELINE
benötigen Sie die IAM-Berechtigung (Identity and Access Management) bigquery.jobs.listAll
für das Projekt.
Jede der folgenden vordefinierten IAM-Rollen enthält die erforderliche Berechtigung:
- Projektinhaber
- BigQuery-Administrator
Weitere Informationen zu BigQuery-Berechtigungen finden Sie unter Zugriffssteuerung mit IAM.
Schema
Wenn Sie die INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
-Ansichten abfragen, enthalten die Ergebnisse eine Zeile für jede Ausführungssekunde des BigQuery-Jobs. Jeder Zeitraum beginnt mit einem ganzen Sekundenintervall und entspricht genau einer Sekunde.
Die Ansicht INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
hat das folgende Schema:
Spaltenname | Datentyp | Wert |
---|---|---|
period_start |
TIMESTAMP |
Startzeit dieses Zeitraums. |
period_slot_ms |
INTEGER |
Genutzte Slotmillisekunden in diesem Zeitraum. |
project_id |
STRING |
(Clustering-Spalte) ID des Projekts. |
project_number |
INTEGER |
Nummer des Projekts. |
user_email |
STRING |
(Clustering-Spalte) E-Mail-Adresse oder Dienstkonto des Nutzers, der den Job ausgeführt hat. |
job_id |
STRING |
ID des Jobs, z. B. bquxjob_1234 . |
job_type |
STRING |
Typ des Jobs. Kann QUERY , LOAD , EXTRACT , COPY oder null sein. Der Jobtyp null gibt einen internen Job an, z. B. die Auswertung einer Anweisung des Skriptjobs oder die Aktualisierung der materialisierten Ansicht. |
statement_type |
STRING |
Typ der Abfrageanweisung, sofern gültig. Beispiel: SELECT , INSERT , UPDATE oder DELETE . |
priority |
STRING |
Die Priorität dieses Jobs Zulässige Werte: INTERACTIVE
und BATCH . |
parent_job_id |
STRING |
ID des übergeordneten Jobs, sofern vorhanden. |
job_creation_time |
TIMESTAMP |
(Partitionierungsspalte) Erstellungszeit dieses Jobs. Die Partitionierung basiert auf der UTC-Zeit dieses Zeitstempels. |
job_start_time |
TIMESTAMP |
Startzeit dieses Jobs. |
job_end_time |
TIMESTAMP |
Endzeit dieses Jobs. |
state |
STRING |
Ausführungsstatus des Jobs am Ende dieses Zeitraums. Gültige Statuswerte sind PENDING , RUNNING und DONE . |
reservation_id |
STRING |
Name der primären Reservierung, die diesem Job am Ende dieses Zeitraums zugewiesen wird, sofern zutreffend. |
edition |
STRING |
Die mit der Reservierung verknüpfte Edition, die diesem Job zugewiesen ist. Weitere Informationen zu Editionen finden Sie unter Einführung in BigQuery-Editionen. |
total_bytes_billed |
INTEGER |
Wenn das Projekt für die Verwendung von On-Demand-Preisen konfiguriert ist, enthält dieses Feld die Gesamtzahl der für den Job in Rechnung gestellten Byte. Wenn das Projekt für die Verwendung von Pauschalpreisen konfiguriert ist, werden Ihnen keine Byte in Rechnung gestellt. Dieses Feld dient nur zur Information. |
total_bytes_processed |
INTEGER |
Gesamtzahl der vom Job verarbeiteten Byte. |
error_result |
RECORD |
Fehlerdetails (falls vorhanden) als
ErrorProto.
. |
cache_hit |
BOOLEAN |
Ob die Abfrageergebnisse dieses Jobs aus einem Cache stammen. |
period_shuffle_ram_usage_ratio |
FLOAT |
Shuffle-Nutzungsverhältnis im ausgewählten Zeitraum. |
period_estimated_runnable_units |
INTEGER |
Arbeitseinheiten, die in diesem Zeitraum sofort geplant werden können. Zusätzliche Slots für diese Arbeitseinheiten beschleunigen Ihre Abfrage, sofern keine andere Abfrage in der Reservierung zusätzliche Slots benötigt. |
transaction_id |
STRING |
ID der Transaktion, in der dieser Job ausgeführt wurde (falls vorhanden). (Vorschau) |
Datenaufbewahrung
Diese Ansicht enthält aktuell ausgeführte Jobs und den Jobverlauf der letzten 180 Tage.
Bereich und Syntax
Für Abfragen dieser Ansicht muss ein Regions-Qualifier verwendet werden. Wenn Sie keinen regionalen Qualifier angeben, werden Metadaten aus allen Regionen abgerufen. In der folgenden Tabelle wird der Regionsbereich für diese Ansicht erläutert:
Ansichtsname | Ressourcenbereich | Regionsbereich |
---|---|---|
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE[_BY_PROJECT] |
auf Projektebene | REGION |
Optional: PROJECT_ID
: die ID Ihres Google Cloud-Projekts. Wenn keine Angabe erfolgt, wird das Standardprojekt verwendet.
REGION
: ist ein beliebiger Dataset-Regionsname.
Beispiel: `region-us`
Beispiele
Wenn Sie die Abfrage für ein anderes Projekt als Ihr Standardprojekt ausführen möchten, fügen Sie die Projekt-ID im folgenden Format hinzu:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
Im folgenden Beispiel wird die Slotauslastung für jede Sekunde des letzten Tages berechnet:
SELECT period_start, SUM(period_slot_ms) AS total_slot_ms, FROM `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() GROUP BY period_start ORDER BY period_start DESC;
+---------------------+---------------+ | period_start | total_slot_ms | +---------------------+---------------+ | 2020-07-29 03:52:14 | 122415176 | | 2020-07-29 03:52:15 | 141107048 | | 2020-07-29 03:52:16 | 173335142 | | 2020-07-28 03:52:17 | 131107048 | +---------------------+---------------+
Sie können die Nutzung einer bestimmten Reservierung mit WHERE reservation_id = "…"
prüfen. Bei Skriptjobs meldet der übergeordnete Job auch die gesamte Slot-Nutzung seiner untergeordneten Jobs. Verwenden Sie zur Vermeidung einer doppelten Zählung WHERE statement_type != "SCRIPT"
, um den übergeordneten Job auszuschließen.
Beispiel: Anzahl von RUNNING
- und PENDING
-Jobs im Zeitverlauf
Wenn Sie die Abfrage für ein anderes Projekt als Ihr Standardprojekt ausführen möchten, fügen Sie die Projekt-ID im folgenden Format hinzu:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
Im folgenden Beispiel wird die Anzahl von RUNNING
- und PENDING
-Jobs zu jeder Sekunde des letzten Tages berechnet:
SELECT period_start, SUM(IF(state = "PENDING", 1, 0)) as PENDING, SUM(IF(state = "RUNNING", 1, 0)) as RUNNING FROM `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE WHERE period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP() GROUP BY period_start;
Das Ergebnis sieht etwa so aus:
+---------------------+---------+---------+ | period_start | PENDING | RUNNING | +---------------------+---------+---------+ | 2020-07-29 03:52:14 | 7 | 27 | | 2020-07-29 03:52:15 | 1 | 21 | | 2020-07-29 03:52:16 | 5 | 21 | | 2020-07-29 03:52:17 | 4 | 22 | +---------------------+---------+---------+
Beispiel: Ressourcennutzung durch Jobs zu einem bestimmten Zeitpunkt
Wenn Sie die Abfrage für ein anderes Projekt als Ihr Standardprojekt ausführen möchten, fügen Sie die Projekt-ID im folgenden Format hinzu:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS
.
Im folgenden Beispiel wird die job_id
aller Jobs, die zu einem bestimmten Zeitpunkt ausgeführt werden, sowie ihre Ressourcennutzung während dieses 1-Sekunden-Zeitraums zurückgegeben:
SELECT job_id, period_slot_ms FROM `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT WHERE period_start = '2020-07-29 03:52:14' AND statement_type != 'SCRIPT';
Das Ergebnis sieht etwa so aus:
+------------------+ | job_id | slot_ms | +------------------+ | job_1 | 2415176 | | job_2 | 4417245 | | job_3 | 427416 | | job_4 | 1458122 | +------------------+
Beispiel: Slot-Nutzungsverhalten mit Admin-Ressourcendiagrammen abgleichen
Sie können administrative Ressourcendiagramme verwenden, um den Zustand Ihrer Organisation, die Slot-Nutzung und die Leistung von BigQuery-Jobs im Zeitverlauf zu überwachen. Im folgenden Beispiel wird die Ansicht INFORMATION_SCHEMA.JOBS_TIMELINE
nach einer Zeitachse der Slot-Nutzung in Intervallen von einer Stunde abgefragt, ähnlich den Informationen, die in Admin-Ressourcendiagrammen verfügbar sind.
WITH snapshot_data AS ( SELECT UNIX_MILLIS(period_start) AS period_start, IFNULL(SUM(period_slot_ms), 0) AS period_slot_ms, DIV(UNIX_MILLIS(period_start), 3600000 * 1) * 3600000 * 1 AS time_ms FROM ( SELECT * FROM `user_proj.region-US`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION WHERE ((job_creation_time >= TIMESTAMP_SUB(@start_time, INTERVAL 1200 MINUTE) AND job_creation_time < TIMESTAMP(@end_time)) AND period_start >= TIMESTAMP(@start_time) AND period_start < TIMESTAMP(@end_time)) AND (statement_type != "SCRIPT" OR statement_type IS NULL) AND REGEXP_CONTAINS(reservation_id, "^user_proj:") ) GROUP BY period_start, time_ms ), data_by_time AS ( SELECT time_ms, SUM(period_slot_ms) / (3600000 * 1) AS submetric_value FROM snapshot_data GROUP BY time_ms ) SELECT time_ms, IFNULL(submetric_value, 0) AS submetric_value, "Slot Usage" AS resource_id, IFNULL(SUM(submetric_value) OVER () / (TIMESTAMP_DIFF(@end_time, @start_time, HOUR) / 1), 0) AS overall_average_slot_count FROM ( SELECT time_ms * 3600000 * 1 AS time_ms FROM UNNEST(GENERATE_ARRAY(DIV(UNIX_MILLIS(@start_time), 3600000 * 1), DIV(UNIX_MILLIS(@end_time), 3600000 * 1) - 1, 1)) AS time_ms ) LEFT JOIN data_by_time USING(time_ms) ORDER BY time_ms DESC;