Tampilan JOBS_TIMELINE
Tampilan INFORMATION_SCHEMA.JOBS_TIMELINE
berisi metadata BigQuery yang mendekati real-time berdasarkan lisensi waktu untuk semua tugas yang dikirimkan dalam project saat ini. Tampilan ini berisi tugas yang sedang berjalan dan telah selesai.
Izin yang diperlukan
Untuk membuat kueri tabel virtual INFORMATION_SCHEMA.JOBS_TIMELINE
, Anda memerlukan izin Identity and Access Management (IAM) bigquery.jobs.listAll
untuk project tersebut.
Setiap peran IAM yang telah ditetapkan berikut menyertakan izin
yang diperlukan:
- Pemilik Project
- BigQuery Admin
Untuk mengetahui informasi selengkapnya tentang izin BigQuery, lihat Kontrol akses dengan IAM.
Skema
Saat Anda membuat kueri tabel virtual INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
, hasil kueri akan berisi satu baris untuk setiap detik eksekusi setiap tugas BigQuery. Setiap periode dimulai pada interval satu detik penuh dan berlangsung tepat satu detik.
Tabel virtual INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
memiliki skema berikut:
Nama kolom | Jenis data | Nilai |
---|---|---|
period_start |
TIMESTAMP |
Waktu mulai periode ini. |
period_slot_ms |
INTEGER |
Slot milidetik yang terpakai dalam periode ini. |
period_shuffle_ram_usage_ratio |
FLOAT |
Rasio penggunaan acak pada jangka waktu yang dipilih. |
project_id |
STRING |
(Kolom pengelompokan) ID project. |
project_number |
INTEGER |
Nomor project. |
user_email |
STRING |
(Kolom pengelompokan) Alamat email atau akun layanan pengguna yang menjalankan tugas. |
job_id |
STRING |
ID tugas. Misalnya, bquxjob_1234 . |
job_type |
STRING |
Jenis tugas. Dapat berupa QUERY , LOAD , EXTRACT , COPY , atau null . Jenis tugas null menunjukkan tugas internal, seperti evaluasi pernyataan tugas skrip atau pemuatan ulang tampilan terwujud. |
statement_type |
STRING |
Jenis pernyataan kueri, jika valid. Misalnya, SELECT , INSERT , UPDATE , atau DELETE . |
job_creation_time |
TIMESTAMP |
(Kolom partisi) Waktu pembuatan tugas ini. Partisi didasarkan pada waktu UTC stempel waktu ini. |
job_start_time |
TIMESTAMP |
Waktu mulai tugas ini. |
job_end_time |
TIMESTAMP |
Waktu berakhir tugas ini. |
state |
STRING |
Status menjalankan tugas di akhir periode ini. Status yang valid mencakup PENDING , RUNNING , dan DONE . |
reservation_id |
STRING |
Nama pemesanan utama yang ditetapkan untuk tugas ini di akhir periode ini, jika berlaku. |
edition |
STRING |
Edisi yang terkait dengan reservasi yang ditetapkan ke tugas ini. Untuk mengetahui informasi selengkapnya tentang edisi, lihat Pengantar edisi BigQuery. |
total_bytes_processed |
INTEGER |
Total byte yang diproses oleh tugas. |
error_result |
RECORD |
Detail error (jika ada) sebagai
ErrorProto.
|
cache_hit |
BOOLEAN |
Apakah hasil kueri tugas ini berasal dari cache. |
period_estimated_runnable_units |
INTEGER |
Unit tugas yang dapat langsung dijadwalkan dalam periode ini. Slot tambahan untuk unit pekerjaan ini akan mempercepat kueri Anda, asalkan tidak ada kueri lain di pemesanan yang memerlukan slot tambahan. |
Retensi data
Tabel virtual ini berisi tugas yang sedang berjalan dan histori tugas selama 180 hari terakhir.
Cakupan dan sintaksis
Kueri terhadap tabel virtual ini harus menyertakan penentu region. Jika Anda tidak menentukan penentu regional, metadata akan diambil dari semua region. Tabel berikut menjelaskan cakupan region untuk tabel virtual ini:
Nama tabel virtual | Cakupan resource | Cakupan region |
---|---|---|
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE[_BY_PROJECT] |
Level project | REGION |
Opsional: PROJECT_ID
: ID project Google Cloud Anda. Jika tidak ditentukan, project default akan digunakan.
REGION
: nama region set data apa pun.
Misalnya, `region-us`
.
Contoh
Untuk menjalankan kueri terhadap project selain project default Anda, tambahkan project ID dalam format berikut:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
Contoh berikut menghitung pemakaian slot untuk setiap detik pada hari terakhir:
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 | +---------------------+---------------+
Anda dapat memeriksa penggunaan untuk reservasi tertentu dengan WHERE reservation_id = "…"
. Untuk tugas skrip, tugas induk juga
melaporkan total penggunaan slot dari tugas turunannya. Untuk menghindari penghitungan ganda, gunakan
WHERE statement_type != "SCRIPT"
untuk mengecualikan tugas induk.
Contoh: Jumlah tugas RUNNING
dan PENDING
dari waktu ke waktu
Untuk menjalankan kueri terhadap project selain project default Anda, tambahkan project ID dalam format berikut:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
.
Contoh berikut menghitung jumlah tugas RUNNING
dan PENDING
di setiap
detik dalam sehari terakhir:
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;
Hasilnya mirip dengan berikut ini:
+---------------------+---------+---------+ | 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 | +---------------------+---------+---------+
Contoh: Penggunaan resource oleh tugas pada titik waktu tertentu
Untuk menjalankan kueri terhadap project selain project default Anda, tambahkan project ID dalam format berikut:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
`myproject`.`region-us`.INFORMATION_SCHEMA.JOBS
.
Contoh berikut menampilkan job_id
dari semua tugas yang berjalan pada titik waktu tertentu bersama dengan penggunaan resource selama periode satu detik tersebut:
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';
Hasilnya mirip dengan berikut ini:
+------------------+ | job_id | slot_ms | +------------------+ | job_1 | 2415176 | | job_2 | 4417245 | | job_3 | 427416 | | job_4 | 1458122 | +------------------+
Contoh: Mencocokkan perilaku penggunaan slot dari diagram resource administratif
Anda dapat menggunakan diagram resource administratif untuk memantau kondisi, penggunaan slot, dan performa tugas BigQuery organisasi dari waktu ke waktu. Contoh berikut membuat kueri tampilan INFORMATION_SCHEMA.JOBS_TIMELINE
untuk linimasa penggunaan slot dengan interval satu jam, mirip dengan informasi yang tersedia di diagram resource administratif.
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;