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. |
period_shuffle_ram_usage_ratio |
FLOAT |
Shuffle-Nutzungsverhältnis im ausgewählten 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 . |
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. |
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_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. |
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. Beispiel:
`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;Hinweis: Bei Ansichtsnamen vom Typ INFORMATION_SCHEMA wird zwischen Groß- und Kleinschreibung unterschieden. Das Ergebnis sieht etwa so aus:
+---------------------+---------------+ | 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. Beispiel:
`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. Beispiel:
`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;